daixijun.mysql
mysql
Ein Werkzeug zur schnellen Bereitstellung von MySQL-Clustern.
Unterstützte Cluster-Modi:
- GTID-basierte Master-Slave-Replikation
- Standardmäßig aktiviertes Semi-Sync
- Master-Slave-Replikation basierend auf MHA-Architektur
- MGR Einzelmaster-Modus (Standard)
- MGR Mehrmaster-Modus
- ReplicaSet
Unterstützte MySQL-Versionen:
- Oracle Offizielle MySQL Community Server
- Open Source GreatSQL
- Percona Percona Server für MySQL
Systemanforderungen
- CentOS 7+
- Ansible 2.9+
- MySQL 8.0+
Variablen
Variablenname | Typ | Standardwert | Beschreibung |
---|---|---|---|
mysql_version | string | 8.0.23 | MySQL-Version |
mysql_upgrade | bool | false | Ob ein Upgrade der Version durchgeführt werden muss |
mysql_download_url | string | Download-URL für das Installationspaket | |
mysql_inventory_group | string | mysql | Gruppenname im Ansible-Inventory, standardmäßig mysql |
mysql_basedir | string | /usr/local/mysql | Installationsverzeichnis |
mysql_datadir | string | /data/mysql | Verzeichnis zur Speicherung von Daten |
mysql_logdir | string | /var/log/mysqld | Verzeichnis für Logs |
mysql_pidfile | string | /var/run/mysqld/mysqld.pid | Speicherort der PID-Datei |
mysql_socket | string | /var/run/mysqld/mysqld.sock | Speicherort der Socket-Datei |
mysql_port | int | 3306 | Verfügbare Portnummer |
mysql_bind_address | string | 0.0.0.0 | Bindungsadresse |
mysql_interface | string | "" | Bestimmte Netzwerkschnittstelle, standardmäßig die erste, die nicht lo ist |
mysql_default_time_zone | string | +8:00 | Bestimmung der Zeitzone |
mysql_character_set_server | string | utf8mb4 | Standard-Zeichensatz |
mysql_collation_server | string | utf8mb4_general_ci | Standard-Zeichenreihe |
mysql_max_connections | int | 1005 | Maximale Verbindungen |
mysql_max_user_connections | int | 1000 | Maximale Benutzerverbindungen, muss kleiner als mysql_max_connections sein |
mysql_interactive_timeout | int | 28800 | Wartezeit in Sekunden, bevor interaktive Verbindungen vom Server geschlossen werden |
mysql_wait_timeout | int | 28800 | Wartezeit in Sekunden, bevor nicht-interaktive Verbindungen vom Server geschlossen werden |
mysql_max_connect_errors | int | 200 | Maximale Anzahl an Verbindungsfehlern |
mysql_root_password | string | "" | Passwort für den root-Benutzer |
mysql_cluster_type | string | mgr | Cluster-Typ (Standard ist MGR), wählbar zwischen mgr (Mysql Gruppenreplikation) oder ms (Master-Slave) |
mysql_cluster_name | string | default | Name des Clusters für InnodbCluster/ReplicaSet |
mysql_mha_enabled | bool | false | Ob MHA-basierte Master-Slave-Hochverfügbarkeit aktiviert ist |
mysql_mha_config_dir | string | /etc/mha | Verzeichnis für die MHA-Konfigurationsdateien |
mysql_mha_manager_workdir | string | /var/log/mha | Arbeitsverzeichnis von MHA, in dem Logs und Statusinformationen gespeichert werden |
mysql_mha_user | string | mha | Benutzer für die Verbindung zur MySQL-Verwaltung, benötigt ALL -Rechte |
mysql_mha_password | string | "" | Management-Passwort für MySQL |
mysql_mha_repl_user | string | repl | Benutzer für die MySQL-Master-Slave-Replikation |
mysql_mha_repl_password | string | "" | Passwort für die MySQL-Master-Slave-Replikation |
mysql_mha_ssh_user | string | root | SSH-Benutzer für die Kommunikation zwischen Knoten |
mysql_mha_ssh_port | int | 22 | SSH-Port für die Kommunikation zwischen Knoten |
mysql_mha_ping_interval | int | 2 | Herzschlagintervall für den Status des Master-Knotens |
mysql_mha_vip | string | "" | Zu bindende VIP an den Master-Knoten |
mysql_mha_wechat_token | string | "" | Schlüssel für den Unternehmens-WeChat-Bot, um Alarmbenachrichtigungen zu senden |
mysql_mha_proxy | string | "" | Proxy für das Skript zur Alarmbenachrichtigung (send_report) |
mysql_repl_user | string | repl | Benutzer für die Master-Slave/Gruppe-Replikation |
mysql_repl_password | string | Passwort für den Master-Slave/Gruppe-Replikationsbenutzer | |
mysql_group_replication_name | uuid | "" | Name des Replikationsclusters, im MySQL mit SELECT UUID() oder in der Shell mit uuidgen erzeugt |
mysql_group_replication_single_primary_mode | bool | true | Ob das MGR-Cluster im Einzelmaster-Modus läuft |
mysql_innodb_cluster_enable | bool | true | Ob das Innodb Cluster aktiviert werden soll |
mysql_innodb_cluster_username | string | ic | Benutzer zur Erstellung und Verwaltung des Innodb Clusters, benötigt ALL WITH GRANT OPTION Rechte |
mysql_innodb_cluster_password | string | "" | Verwaltungs-Passwort |
mysql_proxysql_config | bool | false | Ob Proxysql als Proxy-Ebene verwendet werden soll |
mysql_proxysql_monitor_username | string | monitor | Proxysql-Benutzer zur Überwachung des MGR-Status |
mysql_proxysql_monitor_password | string | "" | Proxysql-Passwort zur Überwachung des MGR-Status |
mysql_databases | array | [] | Datenbanken, die erstellt werden sollen |
mysql_users | array | [] | Benutzer, die erstellt werden sollen |
Abhängigkeiten
Sammlungen:
Beispiel
Installation
ansible-galaxy collection install -r requirements.yml
Verwendung
- hosts: servers
roles:
- { role: mysql, mysql_version: 8.0.20 }
Bekannte Probleme
- Das mysql_user-Modul hat über MySQL 8.0 hinaus Probleme mit der Idempotenz bei der Vergabe von
ALL
-Rechten Idempotenz aller Berechtigungen
To-Do
- Unterstützung der halb-synchronen Replikation im Master-Slave-Modus
- Verbesserung der Side-Effects-Tests unter MHA
- Unterstützung von Versionsupdates
- Unterstützung für die Wiederherstellung von Knoten
- Nach einem vollständigen Ausfall aller Knoten im MGR-Cluster muss die Instanz mit dem größten GTID als primärer Knoten für die Neugestaltung des Clusters gefunden werden
Cluster-Störung beheben
Wiederherstellung eines MGR-Clusters nach einem asynchronen Ausfall
Nehmen Sie den Schnittpunkt von SELECT RECEIVED_TRANSACTION_SET from performance_schema.replication_connection_status
+ SHOW VARIABLES LIKE 'gtid_executed'
und wählen Sie den Master mit dem größten Wert als Primärknoten aus.