daixijun.mysql
mysql
Przeznaczone do szybkiego wdrażania klastra MySQL.
Obsługiwane tryby klastra:
- Idealna replikacja oparta na GTID
- Włączona domyślnie pół-synchronizacja (Semi-Sync)
- Replikacja oparta na architekturze MHA
- MGR pojedynczy tryb główny (domyślnie)
- MGR tryb wielu głównych
- Klaster ReplicaSet
Obsługiwane wersje MySQL:
- Oficjalny serwer MySQL Community Server
- Otwarty projekt GreatSQL
- Percona Percona Server for MySQL
Wymagania środowiskowe
- Centos 7+
- Ansible 2.9+
- MySQL 8.0+
Zmienne
| Nazwa zmiennej | Typ | Wartość domyślna | Opis | 
|---|---|---|---|
| mysql_version | string | 8.0.23 | Wersja MySQL | 
| mysql_upgrade | bool | false | Czy wykonać operację aktualizacji wersji? | 
| mysql_download_url | string | Adres do pobrania pakietu bez instalacji | |
| mysql_inventory_group | string | mysql | Nazwa grupy w inwentaryzacji Ansible, domyślnie mysql | 
| mysql_basedir | string | /usr/local/mysql | Katalog instalacji | 
| mysql_datadir | string | /data/mysql | Katalog na pliki danych | 
| mysql_logdir | string | /var/log/mysqld | Katalog na logi | 
| mysql_pidfile | string | /var/run/mysqld/mysqld.pid | Lokalizacja pliku PID | 
| mysql_socket | string | /var/run/mysqld/mysqld.sock | Lokalizacja pliku Socket | 
| mysql_port | int | 3306 | Port nasłuchujący | 
| mysql_bind_address | string | 0.0.0.0 | Adres nasłuchujący | 
| mysql_interface | string | "" | Określ karta sieciowa, domyślnie używana jest pierwsza karta poza lo | 
| mysql_default_time_zone | string | +8:00 | Określenie strefy czasowej | 
| mysql_character_set_server | string | utf8mb4 | Domyślny zestaw znaków | 
| mysql_collation_server | string | utf8mb4_general_ci | Domyślna kolacja znaków | 
| mysql_max_connections | int | 1005 | Maksymalna liczba połączeń | 
| mysql_max_user_connections | int | 1000 | Maksymalna liczba połączeń dla użytkownika, musi być mniejsza niż mysql_max_connections | 
| mysql_interactive_timeout | int | 28800 | Czas oczekiwania na aktywność przed zamknięciem połączenia interaktywnego | 
| mysql_wait_timeout | int | 28800 | Czas oczekiwania na aktywność przed zamknięciem połączenia nieinteraktywnego | 
| mysql_max_connect_errors | int | 200 | Maksymalna liczba błędów połączenia | 
| mysql_root_password | string | "" | Hasło dla konta root | 
| mysql_cluster_type | string | mgr | Typ klastra (domyślnie mgr), do wyboru mgr(Mysql Group Replication)/ms(Master-Slave) | 
| mysql_cluster_name | string | default | Nazwa klastra, odpowiednia dla InnodbCluster/ReplicaSet | 
| mysql_mha_enabled | bool | false | Czy włączyć wysoką dostępność opartą na MHA | 
| mysql_mha_config_dir | string | /etc/mha | Katalog plików konfiguracyjnych MHA | 
| mysql_mha_manager_workdir | string | /var/log/mha | Katalog roboczy MHA, zawierający logi i informacje o stanie | 
| mysql_mha_user | string | mha | Użytkownik do łączenia się z MySQL, potrzebne są uprawnienia ALL | 
| mysql_mha_password | string | "" | Hasło do zarządzania MySQL | 
| mysql_mha_repl_user | string | repl | Konto do replikacji MySQL | 
| mysql_mha_repl_password | string | "" | Hasło dla konta replikacji MySQL | 
| mysql_mha_ssh_user | string | root | Konto SSH do komunikacji między węzłami | 
| mysql_mha_ssh_port | int | 22 | Port SSH do komunikacji między węzłami | 
| mysql_mha_ping_interval | int | 2 | Interwał pingowania stanu węzła głównego | 
| mysql_mha_vip | string | "" | VIP przypisany do węzła głównego | 
| mysql_mha_wechat_token | string | "" | Klucz robota WeChat do wysyłania powiadomień | 
| mysql_mha_proxy | string | "" | Proxy używane w skrypcie do wysyłania powiadomień (send_report) | 
| mysql_repl_user | string | repl | Konto do replikacji/klastrowania | 
| mysql_repl_password | string | Hasło do konta replikacji/klastrowania | |
| mysql_group_replication_name | uuid | "" | Nazwa klastra grupowego, wygenerowana poprzez SELECT UUID()w MySQL lubuuidgenw shellu | 
| mysql_group_replication_single_primary_mode | bool | true | Czy klaster MGR jest w trybie pojedynczego źródła | 
| mysql_innodb_cluster_enable | bool | true | Czy włączyć klaster Innodb | 
| mysql_innodb_cluster_username | string | ic | Użytkownik do tworzenia i zarządzania klastrem Innodb, wymagane uprawnienia ALL WITH GRANT OPTION | 
| mysql_innodb_cluster_password | string | "" | Hasło zarządzające | 
| mysql_proxysql_config | bool | false | Czy używać proxysql jako warstwy proxy | 
| mysql_proxysql_monitor_username | string | monitor | Użytkownik proxysql monitorujący stan mgr | 
| mysql_proxysql_monitor_password | string | "" | Hasło monitorujące stan mgr w proxysql | 
| mysql_databases | array | [] | Bazy danych do utworzenia | 
| mysql_users | array | [] | Użytkownicy do utworzenia | 
Zależności
Kolekcje:
Przykład
Instalacja
ansible-galaxy collection install -r requirements.yml
Użycie
- hosts: serwery
  roles:
    - { role: mysql, mysql_version: 8.0.20 }
Znane problemy
-  Moduł mysql_user ma problemy z idempotencją przy przyznawaniu uprawnień ALLdla wersji MySQL powyżej 8.0 Idempotencja grant all
Do zrobienia
- W trybie master-slave wsparcie dla pół-synchronizacji
- Ulepszenie testów side-effect w MHA
- Wsparcie dla aktualizacji wersji
- Wsparcie dla odbudowy węzłów
- W skrajnych przypadkach MGR, po awarii wszystkich węzłów, należy znaleźć instancję z największym gtid, aby ustawić ją jako główną i ponownie uruchomić klaster
Naprawa błędów klastra
Odzyskiwanie z awarii klastra MGR
Zbierz dane, wykonaj SELECT RECEIVED_TRANSACTION_SET from performance_schema.replication_connection_status + show variables like 'gtid_executed', a następnie wybierz największą główną, aby ustawić jako główną.
Zainstaluj
 ansible-galaxy install daixijun.mysqlLicencja
 
            mit
          
Pobrania
 
            249
          
Właściciel
 