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 lub uuidgen w 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ń
ALL
dla 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.mysql
Licencja
mit
Pobrania
238
Właściciel