[ English | Deutsch | Indonesia | русский | English (United Kingdom) ]
Pemeliharaan klaster Galera¶
Pemeliharaan rutin termasuk menambahkan atau menghapus node dari cluster tanpa mengurangi operasi dan juga memulai cluster setelah secara anggun menutup semua node.
Instance MySQL di-restart ketika membuat cluster, ketika menambahkan node, ketika layanan tidak berjalan, atau ketika perubahan dilakukan ke file konfigurasi /etc/mysql/my.cnf
.
Verifikasi status kluster¶
Bandingkan output dari perintah berikut dengan output berikut. Ini seharusnya memberi Anda informasi tentang status kluster Anda.
# ansible galera_container -m shell -a "mariadb \
-e 'show status like \"%wsrep_cluster_%\";'"
node3_galera_container-3ea2cbd3 | FAILED | rc=1 >>
ERROR 2002 (HY000): Can't connect to local MySQL server
through socket '/var/run/mysqld/mysqld.sock' (2)
node2_galera_container-49a47d25 | FAILED | rc=1 >>
ERROR 2002 (HY000): Can't connect to local MySQL server
through socket '/var/run/mysqld/mysqld.sock' (2)
node4_galera_container-76275635 | success | rc=0 >>
Variable_name Value
wsrep_cluster_conf_id 7
wsrep_cluster_size 1
wsrep_cluster_state_uuid 338b06b0-2948-11e4-9d06-bef42f6c52f1
wsrep_cluster_status Primary
Dalam contoh ini, hanya satu simpul yang merespons.
Dengan halus menutup layanan MariaDB di semua kecuali satu node memungkinkan node operasional yang tersisa untuk melanjutkan pemrosesan permintaan SQL. Ketika secara halus mematikan beberapa node, lakukan tindakan secara berurutan untuk mempertahankan operasi.
Mulai kluster¶
Secara halus mematikan semua node akan menghancurkan cluster. Memulai atau memulai kembali kluster dari nol node membutuhkan pembuatan kluster baru di salah satu node.
Mulai kluster baru di node paling canggih. Ubah ke direktori
playbook
dan periksa nilaiseqno
di filegrastate.dat
pada semua node:# ansible galera_container -m shell -a "cat /var/lib/mysql/grastate.dat" node2_galera_container-49a47d25 | success | rc=0 >> # GALERA saved state version: 2.1 uuid: 338b06b0-2948-11e4-9d06-bef42f6c52f1 seqno: 31 cert_index: node3_galera_container-3ea2cbd3 | success | rc=0 >> # GALERA saved state version: 2.1 uuid: 338b06b0-2948-11e4-9d06-bef42f6c52f1 seqno: 31 cert_index: node4_galera_container-76275635 | success | rc=0 >> # GALERA saved state version: 2.1 uuid: 338b06b0-2948-11e4-9d06-bef42f6c52f1 seqno: 31 cert_index:
Dalam contoh ini, semua node dalam kluster mengandung nilai positif
seqno
yang sama karena disinkronkan sesaat sebelum shutdown yang anggun. Jika semua nilaiseqno
sama, setiap node dapat memulai kluster baru.## for init # /etc/init.d/mariadb start --wsrep-new-cluster ## for systemd # systemctl set-environment _WSREP_NEW_CLUSTER='--wsrep-new-cluster' # systemctl start mariadb # systemctl set-environment _WSREP_NEW_CLUSTER=''
Please also have a look at Starting the Cluster.
This can also be done with the help of Ansible using the shell module:
# ansible galera_container -m shell -a "/etc/init.d/mariadb start --wsrep-new-cluster" --limit galera_container[0]
Perintah ini menghasilkan kluster yang berisi single node. Nilai
wsrep_cluster_size
menunjukkan jumlah node dalam kluster.node2_galera_container-49a47d25 | FAILED | rc=1 >> ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (111) node3_galera_container-3ea2cbd3 | FAILED | rc=1 >> ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) node4_galera_container-76275635 | success | rc=0 >> Variable_name Value wsrep_cluster_conf_id 1 wsrep_cluster_size 1 wsrep_cluster_state_uuid 338b06b0-2948-11e4-9d06-bef42f6c52f1 wsrep_cluster_status Primary
Restart MariaDB on the other nodes (replace [0] from previous Ansible command with [1:]) and verify that they rejoin the cluster.
node2_galera_container-49a47d25 | success | rc=0 >> Variable_name Value wsrep_cluster_conf_id 3 wsrep_cluster_size 3 wsrep_cluster_state_uuid 338b06b0-2948-11e4-9d06-bef42f6c52f1 wsrep_cluster_status Primary node3_galera_container-3ea2cbd3 | success | rc=0 >> Variable_name Value wsrep_cluster_conf_id 3 wsrep_cluster_size 3 wsrep_cluster_state_uuid 338b06b0-2948-11e4-9d06-bef42f6c52f1 wsrep_cluster_status Primary node4_galera_container-76275635 | success | rc=0 >> Variable_name Value wsrep_cluster_conf_id 3 wsrep_cluster_size 3 wsrep_cluster_state_uuid 338b06b0-2948-11e4-9d06-bef42f6c52f1 wsrep_cluster_status Primary
Pemulihan klaster Galera¶
Run the openstack.osa.galera_server
playbook using the galera_force_bootstrap
variable
to automatically recover a node or an entire environment.
Jalankan perintah Ansible berikut untuk menunjukkan node yang gagal:
# openstack-ansible openstack.osa.galera_server -e galera_force_bootstrap=True --tags galera_server-config
You can additionally define a different bootstrap node through
galera_server_bootstrap_node
variable, in case current bootstrap node is in
desynced/broken state. You can check what node is currently selected for
bootstrap using this ad-hoc:
root@aio1:/opt/openstack-ansible# ansible -m debug -a var="groups['galera_all'][0]" localhost
The cluster comes back online after completion of this command. If this fails, please review restarting the cluster and recovering the primary component in the Galera documentation as they're invaluable for a full cluster recovery.
Pulihkan kegagalan single-node¶
Jika satu simpul gagal, simpul lainnya mempertahankan kuorum dan terus memproses permintaan SQL.
Ubah ke direktori
playbooks
dan jalankan perintah Ansible berikut untuk menentukan node gagal:# ansible galera_container -m shell -a "mariadb \ -e 'show status like \"%wsrep_cluster_%\";'" node3_galera_container-3ea2cbd3 | FAILED | rc=1 >> ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (111) node2_galera_container-49a47d25 | success | rc=0 >> Variable_name Value wsrep_cluster_conf_id 17 wsrep_cluster_size 3 wsrep_cluster_state_uuid 338b06b0-2948-11e4-9d06-bef42f6c52f1 wsrep_cluster_status Primary node4_galera_container-76275635 | success | rc=0 >> Variable_name Value wsrep_cluster_conf_id 17 wsrep_cluster_size 3 wsrep_cluster_state_uuid 338b06b0-2948-11e4-9d06-bef42f6c52f1 wsrep_cluster_status Primary
Dalam contoh ini, node 3 telah gagal.
Restart MariaDB pada node gagal dan verifikasi bahwa itu bergabung kembali dengan cluster.
If MariaDB fails to start, run the
mariadbd
command and perform further analysis on the output. As a last resort, rebuild the container for the node.
Memulihkan kegagalan multi-node¶
Ketika semua kecuali satu node gagal, node yang tersisa tidak dapat mencapai quorum dan berhenti memproses permintaan SQL. Dalam situasi ini, node gagal yang pulih tidak dapat bergabung dengan kluster karena tidak ada lagi.
Jalankan perintah Ansible berikut untuk menunjukkan node yang gagal:
# ansible galera_container -m shell -a "mariadb \ -e 'show status like \"%wsrep_cluster_%\";'" node2_galera_container-49a47d25 | FAILED | rc=1 >> ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (111) node3_galera_container-3ea2cbd3 | FAILED | rc=1 >> ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (111) node4_galera_container-76275635 | success | rc=0 >> Variable_name Value wsrep_cluster_conf_id 18446744073709551615 wsrep_cluster_size 1 wsrep_cluster_state_uuid 338b06b0-2948-11e4-9d06-bef42f6c52f1 wsrep_cluster_status non-Primary
Dalam contoh ini, node 2 dan 3 gagal. Server operasional yang tersisa menunjukkan
non-Primer
karena tidak dapat mencapai kuorum.Run the following command to rebootstrap the operational node into the cluster:
# mariadb -e "SET GLOBAL wsrep_provider_options='pc.bootstrap=yes';" node4_galera_container-76275635 | success | rc=0 >> Variable_name Value wsrep_cluster_conf_id 15 wsrep_cluster_size 1 wsrep_cluster_state_uuid 338b06b0-2948-11e4-9d06-bef42f6c52f1 wsrep_cluster_status Primary node3_galera_container-3ea2cbd3 | FAILED | rc=1 >> ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (111) node2_galera_container-49a47d25 | FAILED | rc=1 >> ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (111)
Node operasi yang tersisa menjadi simpul utama dan mulai memproses permintaan SQL.
Restart MariaDB pada node gagal dan verifikasi bahwa mereka bergabung kembali dengan cluster:
# ansible galera_container -m shell -a "mariadb \ -e 'show status like \"%wsrep_cluster_%\";'" node3_galera_container-3ea2cbd3 | success | rc=0 >> Variable_name Value wsrep_cluster_conf_id 17 wsrep_cluster_size 3 wsrep_cluster_state_uuid 338b06b0-2948-11e4-9d06-bef42f6c52f1 wsrep_cluster_status Primary node2_galera_container-49a47d25 | success | rc=0 >> Variable_name Value wsrep_cluster_conf_id 17 wsrep_cluster_size 3 wsrep_cluster_state_uuid 338b06b0-2948-11e4-9d06-bef42f6c52f1 wsrep_cluster_status Primary node4_galera_container-76275635 | success | rc=0 >> Variable_name Value wsrep_cluster_conf_id 17 wsrep_cluster_size 3 wsrep_cluster_state_uuid 338b06b0-2948-11e4-9d06-bef42f6c52f1 wsrep_cluster_status Primary
If MariaDB fails to start on any of the failed nodes, run the
mariadbd
command and perform further analysis on the output. As a last resort, rebuild the container for the node.
Memulihkan kegagalan environment yang lengkap¶
Kembalikan dari backup jika semua node dalam gugus Galera gagal (jangan mematikan dengan perlahan). Ubah ke direktori playbook
dan jalankan perintah berikut untuk menentukan apakah semua node dalam gugus telah gagal:
# ansible galera_container -m shell -a "cat /var/lib/mysql/grastate.dat"
node3_galera_container-3ea2cbd3 | success | rc=0 >>
# GALERA saved state
version: 2.1
uuid: 338b06b0-2948-11e4-9d06-bef42f6c52f1
seqno: -1
cert_index:
node2_galera_container-49a47d25 | success | rc=0 >>
# GALERA saved state
version: 2.1
uuid: 338b06b0-2948-11e4-9d06-bef42f6c52f1
seqno: -1
cert_index:
node4_galera_container-76275635 | success | rc=0 >>
# GALERA saved state
version: 2.1
uuid: 338b06b0-2948-11e4-9d06-bef42f6c52f1
seqno: -1
cert_index:
All the nodes have failed if mariadbd
is not running on any of the
nodes and all of the nodes contain a seqno
value of -1.
Jika ada node tunggal yang memiliki nilai seqno
positif, maka node tersebut dapat digunakan untuk me-restart klaster. Namun, karena tidak ada jaminan bahwa setiap node memiliki salinan data yang identik, kami tidak menyarankan untuk me-restart klaster menggunakan perintah --wsrep-new-cluster
pada satu node.
Buat kembali sebuah kontainer¶
Memulihkan dari kegagalan tertentu memerlukan pembangunan kembali satu atau lebih kontainer.
Nonaktifkan node gagal pada load balancer.
Catatan
Jangan mengandalkan pemeriksaan kesehatan penyeimbang beban (load balancer) untuk menonaktifkan node. Jika node tidak dinonaktifkan, load balancer mengirim permintaan SQL ke dalamnya sebelum bergabung kembali dengan cluster dan menyebabkan inkonsistensi data.
Hancurkan kontainer dan hapus data MariaDB yang disimpan di luar kontainer:
# openstack-ansible openstack.osa.containers_lxc_destroy \ -l node3_galera_container-3ea2cbd3
Dalam contoh ini, node 3 gagal.
Jalankan host setup playbook untuk membangun kembali kontainer pada node 3:
# openstack-ansible oopenstack.osa.containers_lxc_create -l node3 \ -l node3_galera_container-3ea2cbd3
Playbook ini me-restart semua kontainer lain di node.
Jalankan playbook infrastruktur untuk mengonfigurasi kontainer secara spesifik di node 3:
# openstack-ansible openstack.osa.setup_infrastructure \ --limit node3_galera_container-3ea2cbd3
Peringatan
Kontainer baru menjalankan kluster single-node Galera, yang merupakan keadaan berbahaya karena environment berisi lebih dari satu database aktif dengan data yang berpotensi berbeda.
# ansible galera_container -m shell -a "mariadb \ -e 'show status like \"%wsrep_cluster_%\";'" node3_galera_container-3ea2cbd3 | success | rc=0 >> Variable_name Value wsrep_cluster_conf_id 1 wsrep_cluster_size 1 wsrep_cluster_state_uuid da078d01-29e5-11e4-a051-03d896dbdb2d wsrep_cluster_status Primary node2_galera_container-49a47d25 | success | rc=0 >> Variable_name Value wsrep_cluster_conf_id 4 wsrep_cluster_size 2 wsrep_cluster_state_uuid 338b06b0-2948-11e4-9d06-bef42f6c52f1 wsrep_cluster_status Primary node4_galera_container-76275635 | success | rc=0 >> Variable_name Value wsrep_cluster_conf_id 4 wsrep_cluster_size 2 wsrep_cluster_state_uuid 338b06b0-2948-11e4-9d06-bef42f6c52f1 wsrep_cluster_status Primary
Mulai ulang MariaDB di kontainer baru dan verifikasi bahwa ini bergabung kembali dengan kluster.
Catatan
In larger deployments, it may take some time for the MariaDB daemon to start in the new container. It will be synchronizing data from the other MariaDB servers during this time. You can monitor the status during this process by tailing the
journalctl -f -u mariadb
log file.Baris yang dimulai dengan
WSREP_SST
akan muncul selama proses sinkronisasi dan Anda akan melihat baris denganWSREP: SST complete, seqno: <NUMBER>
jika sinkronisasi berhasil.# ansible galera_container -m shell -a "mariadb \ -e 'show status like \"%wsrep_cluster_%\";'" node2_galera_container-49a47d25 | success | rc=0 >> Variable_name Value wsrep_cluster_conf_id 5 wsrep_cluster_size 3 wsrep_cluster_state_uuid 338b06b0-2948-11e4-9d06-bef42f6c52f1 wsrep_cluster_status Primary node3_galera_container-3ea2cbd3 | success | rc=0 >> Variable_name Value wsrep_cluster_conf_id 5 wsrep_cluster_size 3 wsrep_cluster_state_uuid 338b06b0-2948-11e4-9d06-bef42f6c52f1 wsrep_cluster_status Primary node4_galera_container-76275635 | success | rc=0 >> Variable_name Value wsrep_cluster_conf_id 5 wsrep_cluster_size 3 wsrep_cluster_state_uuid 338b06b0-2948-11e4-9d06-bef42f6c52f1 wsrep_cluster_status Primary
Aktifkan node yang gagal sebelumnya pada load balancer.