Pada artikel ini, saya akan menunjukkan cara mengkonfigurasi cluster database MySQL dengan tiga node dalam replikasi multi-master. Replikasi multi-master memungkinkan penulisan record di setiap node, jadi jika sebuah node gagal, kita dapat mengerjakan node lainnya seolah-olah tidak terjadi apa-apa.
Dokumentasi resmi Percona dapat ditemukan di situs web resmi https://www.percona.com/
Pertama-tama, mengapa kita memilih tiga node dan bukan hanya dua? Di cluster mana pun, jumlah node harus ganjil, jadi dalam kasus pemutusan koneksi node, kami berasumsi bahwa grup server tertinggi memiliki data baru, dan harus direplikasi ke node bawah untuk menghindari kehilangan data. Ini terkait hanya untuk menyelesaikan konflik dalam replikasi data, kami tidak akan kehilangan data yang ditulis hanya ke node yang terputus.
Ini digunakan untuk menghindari keadaan yang disebut otak terbelah , di mana kita tidak dapat secara otomatis memilih node mana yang memiliki data yang benar. Pikirkan contoh cluster 2 node di mana kedua node terputus satu sama lain, dan catatan yang sama ditulis ke kedua node:siapa yang menang ketika mereka kembali online? Kami tidak tahu, sehingga terjadi split brain, dan kami harus memutuskan secara manual rekaman mana yang benar.
Jumlah node yang diperlukan untuk menentukan bagian cluster mana yang memiliki data yang benar disebut QUORUM, dalam kasus kami, kuorumnya adalah 2. Jadi kami membutuhkan 2 server yang selalu terhubung satu sama lain. Jika ketiga node mati, kami memiliki otak terbelah dan kami harus memutuskan server mana yang harus masuk ke mode bootstrap secara manual, ini adalah prosedur untuk menentukan server utama mana yang akan dilanjutkan dari otak terbelah.
Mengonfigurasi Cluster Percona XtraDB di Debian 8
Tutorial ini menjelaskan cara menginstal dan mengonfigurasi tiga node Percona XtraDB Cluster di server Debian 8, kami akan menggunakan paket dari repositori Percona.
- server 1
- Nama host:mysql1.local.vm
- Alamat IP:192.168.152.100
- Simpul 2
- Nama host: mysql2.local.vm
- Alamat IP:192.168.152.110
- Simpul 3
- Nama host: mysql3.local.vm
- Alamat IP:192.168.152.120
Pada setiap host, ubah file /etc/hosts sebagai berikut untuk memastikan DNS akan bekerja dengan benar.
127.0.0.1 localhost
192.168.152.100 mysql1.local.vm mysql1
192.168.152.110 mysql2.local.vm mysql2
192.168.152.120 mysql3.local.vm mysql3
# Baris berikut ini diinginkan untuk host yang mendukung IPv6
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
Prasyarat
Prosedur yang dijelaskan dalam tutorial ini memerlukan pengaturan server minimal berikut:
- Ketiga node memiliki Debian 8, saya sarankan untuk mengikuti panduan ini https://www.howtoforge.com/tutorial/debian-8-jessie-minimal-server/
Langkah 1. Memasang Cluster Percona Xtradb
Pada semua node, jalankan perintah berikut sebagai root:
wget https://repo.percona.com/apt/percona-release_0.1-4.$(lsb_release -sc)_all.deb
dpkg -i percona-release_0.1-4.$( lsb_release -sc)_all.deb
apt-get update
apt-get -y install percona-xtradb-cluster-57
Jelas, masukkan kata sandi mysql yang ingin Anda pilih.
Setelah paket diinstal, mysqld akan dimulai secara otomatis. Hentikan mysqld pada ketiga node menggunakan /etc/init.d/mysql stop .
Langkah 2. Konfigurasi node pertama
Masing-masing node harus dikonfigurasi untuk dapat mem-bootstrap cluster. Untuk informasi selengkapnya tentang mem-bootstrap kluster, lihat Mem-boot kluster .
-
Pastikan untuk menambahkan baris ini ke file konfigurasi /etc/mysql/my.cnf untuk simpul pertama (mysql1.local.vm) di akhir bagian [mysqld]:
[mysqld]
...# Path ke galeri Galera
wsrep_provider=/usr/lib/libgalera_smm.so
# URL koneksi cluster berisi IP node#1, node#2 dan node#3
wsrep_cluster_address=gcomm://192.168.152.100,192.168.152.110,192.168.152.120
# Agar Galera bekerja dengan benar format binlog harus ROW
binlog_format=ROW
# Mesin penyimpanan MyISAM hanya memiliki dukungan eksperimental
default_storage_engine=InnoDB
# Mode penguncian peningkatan otomatis InnoDB ini adalah persyaratan untuk Galera
innodb_autoinc_lock_mode=2
# Alamat Node #1
wsrep_node_address=192.168.152.100
# metode SST
wsrep_sst_method=xtrabackup-v2
# Nama cluster
wsrep_cluster_name=my_ubuntu_cluster
# Otentikasi untuk metode SST
wsrep_sst_auth="sstuser:PASSW0RD"Perhatikan kata sandi yang Anda siapkan di sana dalam kasus saya "PASSW0RD".
-
Mulai node pertama dengan perintah berikut:
[dilindungi email]:~# /etc/init.d/mysql bootstrap-pxc
Perintah ini akan memulai node pertama dan mem-bootstrap cluster, Anda akan melihat sesuatu seperti ini jika semuanya baik-baik saja:
[email protected]:~# /etc/init.d/mysql bootstrap-pxc
[ ok ] Bootstrapping Server database Cluster Percona XtraDB:mysqld ..
[email protected]:~# -
Setelah node pertama dimulai, sambungkan ke mysql dengan perintah mysql -p klasik, maka status cluster dapat diperiksa dengan mengeksekusi kueri tampilkan status seperti 'wsrep%';seperti pada contoh di bawah ini:
mysql> tampilkan status seperti 'wsrep%';+----------------------------+---- ----------------------------------+| Nama_variabel | Nilai |+-----------------------------+------------------ --------------------+| wsrep_local_state_uuid | 0251a27c-8a19-11e6-905b-f3f13b0ddc5b |...| wsrep_local_state | 4 || wsrep_local_state_comment | Disinkronkan |...| wsrep_cluster_size | 1 || wsrep_cluster_status | Utama || wsrep_connected | AKTIF |...| wsrep_ready | ON |+----------------------------+------------------ --------------------+59 baris dalam set (0,00 detik)
Output ini menunjukkan bahwa cluster telah berhasil di-bootstrap.
Untuk melakukan Transfer Snapshot Negara menggunakan XtraBackup , siapkan pengguna baru dengan hak istimewa yang tepat:
mysql> BUAT PENGGUNA 'sstuser'@'localhost' DIIDENTIFIKASI DENGAN 'PASSW0RD';mysql> PROSES GRANT, RELOAD, LOCK TABLES, REPLICATION CLIENT PADA *.* UNTUK 'sstuser'@'localhost';mysql> FLUSH PRIVILEGES;
Catatan
Akun root MySQL juga dapat digunakan untuk melakukan SST, tetapi lebih aman menggunakan pengguna lain (non-root) untuk ini.
Langkah 3. Konfigurasi node kedua
-
Tambahkan baris berikut ke file konfigurasi /etc/mysql/my.cnf pada node kedua (mysql2.local.vm), sehingga berisi data berikut:
[mysqld]
...# Path ke galeri Galera
wsrep_provider=/usr/lib/libgalera_smm.so
# URL koneksi cluster berisi IP node#1, node#2 dan node#3
wsrep_cluster_address=gcomm://192.168.152.100,192.168.152.110,192.168.152.120
# Agar Galera bekerja dengan benar format binlog harus ROW
binlog_format=ROW
# Mesin penyimpanan MyISAM hanya memiliki dukungan eksperimental
default_storage_engine=InnoDB
# Mode penguncian peningkatan otomatis InnoDB ini adalah persyaratan untuk Galera
innodb_autoinc_lock_mode=2
# Alamat Node #2
wsrep_node_address=192.168.152.110
# metode SST
wsrep_sst_method=xtrabackup-v2
# Nama cluster
wsrep_cluster_name=my_ubuntu_cluster
# Otentikasi untuk metode SST
wsrep_sst_auth="sstuser:PASSW0RD" -
Mulai node kedua dengan perintah berikut (perhatian kali ini seperti yang Anda lihat tidak dalam mode boostrap!!):
[email protected]:~# /etc/init.d/mysql start
-
Setelah server dimulai, server akan menerima SST secara otomatis. Status cluster sekarang dapat diperiksa di kedua node. Berikut ini adalah contoh status dari node kedua (mysql2.local.vm):
mysql> tampilkan status seperti 'wsrep%';+----------------------------+---- ----------------------------------+| Nama_variabel | Nilai |+-----------------------------+------------------ --------------------+| wsrep_local_state_uuid | 0251a27c-8a19-11e6-905b-f3f13b0ddc5b |...| wsrep_local_state | 4 || wsrep_local_state_comment | Disinkronkan |...| wsrep_cluster_size | 2 || wsrep_cluster_status | Utama || wsrep_connected | AKTIF |...| wsrep_ready | ON |+----------------------------+------------------ --------------------+40 baris dalam set (0,01 detik)
Output ini menunjukkan bahwa node baru telah berhasil ditambahkan ke cluster. Perhatikan variabel wsrep_cluster_size yang menjadi 2, bukan salah satu kueri pertama yang kita buat.
Langkah 4. Konfigurasi node ketiga
-
Tambahkan baris berikut ke file konfigurasi /etc/mysql/my.cnf pada node kedua (mysql3.local.vm), sehingga berisi konfigurasi berikut:
[mysqld]
...# Path ke galeri Galera
wsrep_provider=/usr/lib/libgalera_smm.so
# URL koneksi cluster berisi IP node#1, node#2 dan node#3
wsrep_cluster_address=gcomm://192.168.152.100,192.168.152.110,192.168.152.120
# Agar Galera bekerja dengan benar format binlog harus ROW
binlog_format=ROW
# Mesin penyimpanan MyISAM hanya memiliki dukungan eksperimental
default_storage_engine=InnoDB
# Mode penguncian peningkatan otomatis InnoDB ini adalah persyaratan untuk Galera
innodb_autoinc_lock_mode=2
# Alamat Node #2
wsrep_node_address=192.168.152.120
# metode SST
wsrep_sst_method=xtrabackup-v2
# Nama cluster
wsrep_cluster_name=my_ubuntu_cluster
# Otentikasi untuk metode SST
wsrep_sst_auth="sstuser:PASSW0RD" -
Mulai node ketiga dengan perintah berikut:
[email protected]:~# /etc/init.d/mysql start
-
Setelah server dimulai, server akan menerima SST secara otomatis. Status cluster dapat diperiksa di semua node. Berikut ini adalah contoh status dari node ketiga (mysql3.local.vm):
mysql> tampilkan status seperti 'wsrep%';+----------------------------+------- -------------------------------+| Nama_variabel | Nilai |+-----------------------------+------------------ --------------------+| wsrep_local_state_uuid | 0251a27c-8a19-11e6-905b-f3f13b0ddc5b |...| wsrep_local_state | 4 || wsrep_local_state_comment | Disinkronkan |...| wsrep_cluster_size | 3 || wsrep_cluster_status | Utama || wsrep_connected | AKTIF |...| wsrep_ready | ON |+----------------------------+------------------ --------------------+40 baris dalam set (0,01 detik)
Output ini mengkonfirmasi bahwa node ketiga telah bergabung dengan cluster. Sekali lagi lihat wsrep_cluster_size yang sekarang menjadi 3, bukan 2.
Jika Anda mengalami beberapa masalah, lihat /var/log/syslog untuk melihat apakah semuanya baik-baik saja
4 Okt 12:16:13 mysql3 mysql[2767]:Memulai server database MySQL (Percona XtraDB Cluster):mysqld . . .Transfer status sedang berlangsung, pengaturan tidur lebih tinggi:mysqld . ..
4 Okt 12:16:13 mysql3 systemd[1]:Memulai LSB:Memulai dan menghentikan daemon mysql (Percona XtraDB Cluster).
4 Okt 12:17:01 mysql3 CRON[3731] :(root) CMD ( cd / &&run-parts --report /etc/cron.hourly)
Dalam contoh ini, semuanya berjalan dengan baik, dan Anda dapat melihat Transfer Negara sedang berlangsung, artinya data akan ditransfer ke node.
Menguji replikasi
Untuk menguji replikasi, mari buat database baru di node kedua, buat tabel untuk database tersebut di node ketiga, dan tambahkan beberapa record ke tabel di node pertama.
-
Buat database baru di node kedua:
mysql@mysql2> BUAT DATABASE percona;Kueri OK, 1 baris terpengaruh (0,01 detik)
-
Buat tabel pada simpul ketiga:
mysql@mysql3> GUNAKAN percona;Database berubahmysql@pxc3> contoh CREATE TABLE (node_id INT PRIMARY KEY, node_name VARCHAR(30));Query OK, 0 baris terpengaruh (0,05 detik)
-
Sisipkan record pada node pertama:
mysql@mysql1> INSERT INTO percona.example VALUES (1, 'percona1');Kueri OK, 1 baris terpengaruh (0,02 detik)
-
Ambil semua baris dari tabel itu pada simpul kedua:
mysql@mysql2> SELECT * FROM percona.example;+---------+-----------+| simpul_id | node_name |+--------+------------+| 1 | percona1 |+---------+-----------+1 baris dalam set (0,00 detik)
Untuk memastikan bahwa aplikasi Anda selalu dapat mencapai cluster, Anda dapat menambahkan loadbalancer di depan ketiga node tersebut.