cdelgehier.XtraDB-Cluster
Ansible-Rolle ansible-role-XtraDB-Cluster
Eine Ansible-Rolle zum Einrichten eines Percona XtraDB Clusters. Die Aufgaben dieser Rolle sind:
- Pakete installieren
- Verbindungen sichern
- Den Cluster initialisieren
Anforderungen
Keine speziellen Anforderungen
Rollenvariablen
GRUNDLAGEN
Variable | Standard | Kommentare (Typ) |
---|---|---|
xtradb_bind_address |
- | Die hörende IP |
xtradb_bind_interface |
eth0 |
Die vom Cluster verwendete Schnittstelle |
xtradb_cluster_name |
foo |
Ein Name für den Cluster |
xtradb_configured |
xtradb_datadir /konfiguriert |
Ein Cookie für Idempotenz |
xtradb_datadir |
/var/lib/mysql |
Verzeichnis der Daten |
xtradb_master_node |
groups[xtradb_nodes_group][0] |
Der gewählte Knoten als Master |
xtradb_mysql_user |
mysql |
Der Benutzer für Galera |
xtradb_nodes_group |
xtradb-cluster-nodes |
Knoten-Gruppe, in der der Cluster installiert wird |
xtradb_root_password |
root |
Passwort für den Root-Benutzer |
xtradb_root_user |
root |
Der Root-Benutzer |
xtradb_secured |
xtradb_datadir /gesichert |
Ein Cookie für Idempotenz |
xtradb_service |
mysql |
Name des Linux-Dienstes |
xtradb_sst_password |
sstpassword |
Passwort für den xtradb_sst_user |
xtradb_sst_user |
sstuser |
Benutzer für den Zustandssnapshot-Transfer |
xtradb_swappiness |
0 |
"Swappiness"-Wert. Standardwert des Systems ist 60. Ein Wert von 0 bedeutet, dass der Austausch von Prozessen vermieden wird. |
xtradb_databases |
[] | Liste der Namen der hinzuzufügenden Datenbanken |
xtradb_users |
[] | Liste der Diktate, die die hinzuzufügenden Benutzer spezifizieren. Siehe unten für Details. |
xtradb_version |
57 |
Paketversion von XtraDB |
MySQL-Teil
Für mehr Informationen zu den Werten lesen Sie die Dokumentation zu den MariaDB Server-Systemvariablen.
Variable | Standard | Kommentare (Typ) |
---|---|---|
xtradb_binlog_format |
ROW |
Das format für die binäre Protokollierung |
xtradb_character_set_server |
utf |
Der Zeichensatz |
xtradb_collation_server |
utf8_general_ci |
Die Sortierreihenfolge |
xtradb_default_storage_engine |
InnoDB |
Einstellung des Speicher-Engine |
xtradb_innodb_autoinc_lock_mode |
2 |
Es gibt drei mögliche Einstellungen für den Parameter innodb_autoinc_lock_mode: 0, 1 oder 2, für “traditionell”, “fortlaufend” oder “interleaved” Sperrmodus. |
xtradb_innodb_buffer_pool_instances |
|
Um mehrere Pufferpool-Instanzen zu aktivieren, setzen Sie die Konfigurationsoption innodb_buffer_pool_instances auf einen Wert größer als 1 (8 ist der Standard) bis maximal 64. |
xtradb_innodb_buffer_pool_size |
|
Ein guter Wert ist 70%-80% des verfügbaren Speichers. |
xtradb_innodb_file_format |
|
|
xtradb_innodb_file_format_check |
|
|
xtradb_innodb_file_per_table |
|
|
xtradb_innodb_flush_log_at_trx_commit |
|
Bei einer Einstellung von 1 wird der Log-Puffer bei jedem Transaktionscommit auf die Protokolldatei auf der Festplatte ausgegeben. |
xtradb_innodb_log_buffer_size |
|
Innodb schreibt geänderte Datensätze in seinen Log-Puffer, der im Speicher gehalten wird. |
xtradb_innodb_log_file_size |
|
Der Standardwert wurde in MySQL 5.6 von 5 MB auf 50 MB geändert. |
xtradb_innodb_file_per_table |
on |
innodb_file_per_table ist in MySQL 5.6 standardmäßig aktiviert. |
xtradb_innodb_strict_mode |
on |
|
xtradb_join_buffer_size |
|
|
xtradb_log_warnings |
|
|
xtradb_long_query_time |
|
|
xtradb_max_allowed_packet |
|
|
xtradb_max_connections |
4096 |
|
xtradb_max_heap_table_size |
|
|
xtradb_max_user_connections |
|
|
xtradb_pxc_strict_mode |
ENFORCING |
PXC Strict Mode soll die Verwendung von experimentellen und nicht unterstützten Funktionen in Percona XtraDB Cluster vermeiden. |
xtradb_query_cache_size |
|
|
xtradb_read_buffer_size |
|
|
xtradb_read_rnd_buffer_size |
|
|
xtradb_skip_name_resolve |
1 |
Nur IP-Adressen verwenden. Setzen Sie es auf 0, um Hostnamen aufzulösen. |
xtradb_slow_query_log |
0 |
Auf 1 setzen, um das Protokoll langsamer Abfragen zu aktivieren. |
xtradb_socket |
|
|
xtradb_sort_buffer_size |
|
|
xtradb_table_definition_cache |
|
|
xtradb_table_open_cache |
|
|
xtradb_table_open_cache_instances |
|
|
xtradb_tmp_table_size |
|
Hinzufügen von Datenbanken
Datenbanken werden mit einem Diktat definiert, das die Felder name:
(erforderlich) und init_script:
(optional) enthält.
Das Init-Skript ist eine SQL-Datei, die ausgeführt wird, wenn die Datenbank erstellt wird, um Tabellen zu initialisieren und mit Werten zu füllen.
xtradb_databases:
- name: keystone
- name: mydb
init_script: files/init_mydb.sql
Hinzufügen von Benutzern
Benutzer werden mit einem Diktat definiert, das die Felder name:
, password:
, priv:
und optional host:
enthält.
Das Passwort ist im Klartext und priv:
gibt die Berechtigungen für diesen Benutzer an, wie in der Ansible-Dokumentation beschrieben.
Ein Beispiel:
xtradb_users:
- name: keystone
password: KEYSTONE_DBPASS
priv: 'keystone.*:SUPER'
- name: cdelgehier
password: yolo
priv: 'mydb.*:ALL'
host: '192.168.1.%'
Abhängigkeiten
Keine Abhängigkeiten.
Beispiel-Playbook
- hosts: db
gather_facts: true
become: true
roles:
- role: ansible-role-XtraDB-Cluster
xtradb_cluster_name: "prod-customer"
xtradb_sst_user: sstuser
xtradb_sst_password: s3cr3t
xtradb_root_password: yolo
xtradb_nodes_group: "db"
xtradb_bind_interface: eth0
- hosts: db
gather_facts: true
become: true
roles:
- role: ansible-role-XtraDB-Cluster
xtradb_cluster_name: "prod-customer"
xtradb_sst_user: sstuser
xtradb_sst_password: s3cr3t
xtradb_root_password: yolo
xtradb_bind_address: "{{ ansible_default_ipv4.address }}"
xtradb_wsrep_cluster_address: "gcomm://{{ groups['db'] | map('extract', hostvars, ['ansible_default_ipv4', 'address']) | join(',') }}"
xtradb_master_node: "{{ hostvars[ groups['db'][0] ].ansible_default_ipv4.address }}"
- hosts: db
gather_facts: true
become: true
roles:
- role: ansible-role-XtraDB-Cluster
xtradb_cluster_name: "prod-customer"
xtradb_sst_password: s3cr3t
xtradb_root_password: yolo
xtradb_nodes_group: "db"
xtradb_bind_interface: eth0
xtradb_databases:
- name: keystone
xtradb_users:
- name: keystone
password: PASSWD
priv: 'keystone.*:GRANT,ALL'
xtradb_innodb_buffer_pool_instances: 8
xtradb_innodb_buffer_pool_size: "384M"
xtradb_innodb_file_format: "Barracuda"
xtradb_innodb_file_format_check: "1"
xtradb_innodb_file_per_table: "on"
xtradb_innodb_flush_log_at_trx_commit: "1"
xtradb_innodb_log_buffer_size: "16M"
xtradb_innodb_log_file_size: "50M"
xtradb_innodb_strict_mode: "on"
xtradb_join_buffer_size: "128K"
xtradb_log_warnings: "1"
xtradb_long_query_time: "10"
xtradb_max_allowed_packet: "16M"
xtradb_max_connections: "505"
xtradb_max_heap_table_size: "16M"
xtradb_max_user_connections: "500"
xtradb_query_cache_size: "0" # deaktivieren
xtradb_read_buffer_size: "128K"
xtradb_read_rnd_buffer_size: "256k"
xtradb_skip_name_resolve: "1"
xtradb_slow_query_log: "1"
xtradb_sort_buffer_size: "2M"
xtradb_table_definition_cache: "1400"
xtradb_table_open_cache: "2000"
xtradb_table_open_cache_instances: "8"
xtradb_tmp_table_size: "16M"
[db]
node1 ansible_host=192.168.1.173
node2 ansible_host=192.168.1.156
node3 ansible_host=192.168.1.154
Testen
Es gibt zwei Arten von Testumgebungen. Eine, die von Vagrant betrieben wird, und eine andere, die von Docker betrieben wird. Letztere ist geeignet für automatisierte Tests auf Travis-CI. Der Testcode wird in separaten Orphan-Branches aufbewahrt. Für Details, wie Sie diese Testumgebungen auf Ihrem eigenen Rechner einrichten, siehe die README-Dateien in den jeweiligen Branches:
- Docker: docker-tests
Entfernen
Um alle Spuren zu entfernen und eine neue Installation zu starten
ansible db -m shell -a 'rm -rf /var/lib/mysql /var/log/mysqld.log /etc/percona-xtradb-cluster.conf.d ; yum remove Percona* -y'
Mitwirken
Probleme, Funktionsanfragen und Ideen sind willkommen und können im Abschnitt für Probleme veröffentlicht werden.
Pull-Anfragen sind ebenfalls sehr willkommen. Der beste Weg, um einen PR einzureichen, ist, zunächst ein Fork dieses Github-Projekts zu erstellen, dann einen Themen-Branch für die vorgeschlagene Änderung zu erstellen und diesen Branch in Ihr eigenes Fork hochzuladen. Github kann dann einfach einen PR basierend auf diesem Branch erstellen.
Lizenz
Lizenz nach 2-Klauseln-BSD-Lizenz, siehe LICENSE.md
Mitwirkende
- Cedric DELGEHIER (Wartung)
ansible-galaxy install cdelgehier.XtraDB-Cluster