Żeby zapewnić HA cluster powinien składać się, z nieparzystej liczby nodów (3, 5, 7...). Samo XtraDB jest forkiem MySQL Galera.
Wstęp
Poniżej przykładowa konfiguracja dla dwóch nodów (niezalecana):
xtradb-1 - 10.1.100.101
xtradb-2 - 10.1.100.102
Konfiguracja zakłada komunikację po adresach IP (samo resolvowanie dnsów przy bazach danych, jest niezalecane ze względu na performance).
Dodanie kolejnych nodów przebiega analogicznie.
Instalacja (deb/ubuntu)
apt-get update && apt-get install lsb-release gnupg
wget https://repo.percona.com/apt/percona-release_latest.$(lsb_release -sc)_all.deb
dpkg -i percona-release_latest.$(lsb_release -sc)_all.deb
apt-get update && apt-get install percona-xtradb-cluster-57 -y
Konfiguracja
Przed dalszym etapem wymagane jest zatrzymanie baz na wszystkich nodach:
systemctl stop mysql.service
Podnoszenie clustra zawsze wygląda tak samo. Przygotowujemy jeden z nodów, którego będziemy bootstrapować, następnie podłączać do niego pozostałe nody.
Na każdym z nodów edytujemy plik: /etc/mysql/percona-xtradb-cluster.conf.d/wsrep.cnf
[mysqld]
wsrep_provider=/usr/lib/galera3/libgalera_smm.so
wsrep_cluster_address=gcomm://10.1.100.101,10.1.100.102
binlog_format=ROW
default_storage_engine=InnoDB
wsrep_slave_threads= 8
wsrep_log_conflicts
innodb_autoinc_lock_mode=2
wsrep_node_address=10.1.100.101
wsrep_cluster_name=XtraDB_Cluster
wsrep_node_name=node-1
pxc_strict_mode=ENFORCING
wsrep_sst_method=xtrabackup-v2
wsrep_sst_auth=”sstuser:YourPassword”
Na pozostałych nodach zmieniamy tylko wsrep_node_name i wsrep_node_address
Inicjalizacja clustra
/etc/init.d/mysql bootstrap-pxc
Dodanie użytkownika API wsrep:
mysql -p -e "CREATE USER 'sstuser'@'localhost' IDENTIFIED BY 'YourPassword';GRANT PROCESS, RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'sstuser'@'localhost';FLUSH PRIVILEGES;"
Dodanie kolejnego noda
Po edycji pliku konfiguracyjnego i podmianie node_name i node_address, podłączamy host poprzez wystartowanie bazy
systemctl start mysql.service
Status XtraDB Cluster
Status można sprawdzić z poziomu mysql'a:
mysql -p -e "show status like 'wsrep%’;"