GNU/Linux >> Belajar Linux >  >> Linux

Cara membangun cluster aktif-aktif-aktif dengan RHEL 8 dan Percona MySQL

Di masa lalu, membangun layanan MySQL multi-master yang aman dan toleran terhadap kesalahan sangatlah merepotkan. Itu membutuhkan beberapa langkah dan paket dependen. Konfigurasi replikasi, sinkronisasi data, dan beberapa file konfigurasi ditambahkan ke kompleksitas. Membangun solusi pada OS yang diperkuat seperti Red Hat Enterprise Linux (RHEL) 8 dan menggunakan distribusi MySQL multi-master yang dikemas secara profesional dari Percona membuatnya mudah. Panduan ini menunjukkan caranya.

Diagram arsitektur:

[ Anda mungkin juga menikmati: Terjaga dan ketersediaan tinggi:Topik lanjutan ]

Instal perangkat lunak cluster

Jalankan perintah berikut di ketiga server (DB1 , DB2 , dan DB3 ):

# yum -y install https://repo.percona.com/yum/percona-release-latest.noarch.rpm

# percona-release enable-only pxc-80 release
# percona-release enable tools release

# yum repolist 
Updating Subscription Management repositories. 
repo id                                         repo name 
prel-release-noarch                             Percona Release release/noarch YUM repository 
pxc-80-release-x86_64                           Percona XtraDB Cluster 8.0 release/x86_64 YUM repository 
rhel-8-for-x86_64-appstream-rpms                Red Hat Enterprise Linux 8 for x86_64 - AppStream (RPMs) 
rhel-8-for-x86_64-baseos-rpms                   Red Hat Enterprise Linux 8 for x86_64 - BaseOS (RPMs) 
satellite-tools-6.8-for-rhel-8-x86_64-rpms      Red Hat Satellite Tools 6.8 for RHEL 8 x86_64 (RPMs) 
tools-release-x86_64                            Percona Tools release/x86_64 YUM repository

Karena repositori RHEL 8 menyertakan versi MySQL, Anda harus menonaktifkan akses ke repositori tersebut agar instalasi Percona berhasil diselesaikan.

# yum -y module disable mysql
# yum -y install percona-xtradb-cluster

Konfigurasikan kluster

Di DB1 server, mulai layanan database untuk mengaksesnya melalui klien MySQL untuk memperbarui kata sandi default dan mengizinkan host mana pun untuk terhubung dari jarak jauh untuk manajemen:

# systemctl start mysql

# grep 'temporary password' /var/log/mysqld.log
# mysql -u root -p


Ubah kata sandi root default dengan ALTER perintah:

# mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'redhatPERCONA';

Aktifkan login dari host mana pun dengan UPDATE perintah:


# mysql> UPDATE mysql.user SET host='%' WHERE user='root';

Keluar dari administrasi MySQL:

# mysql> exit

Di DB1 server, hentikan layanan basis data:

# systemctl stop mysql

Di DB2 dan DB3 server, mulai/hentikan layanan MySQL untuk membuat struktur file awal:

# systemctl start mysql
# systemctl stop mysql

Pada semua server database di cluster (DB1 , DB2 , dan DB3 ) pastikan file konfigurasi /etc/my.cnf berisi bidang unik berikut:

wsrep_cluster_address=gcomm://
wsrep_cluster_name=
wsrep_node_name=

Tambahkan alamat IP setiap server database. Beginilah cara cluster berkomunikasi dan kepada siapa:

wsrep_cluster_address=gcomm://192.168.40.91,192.168.40.92,192.168.40.93

Tambahkan nama cluster yang unik. Ini harus sama di semua server di cluster. Ini akan mengidentifikasi cluster dari cluster lain:

wsrep_cluster_name=pxc-cluster

Tambahkan nama node unik dan alamat IP-nya. Cluster harus memiliki cara untuk mengidentifikasi setiap node:

wsrep_node_name=pxc-cluster-node-db1
wsrep_node_address=192.168.40.91

Jalankan perintah ini di setiap server database untuk memastikan pengaturan yang Anda buat sudah benar:

[DB1]
# grep -e address -e cluster /etc/my.cnf | grep -v \# 
wsrep_cluster_address=gcomm://192.168.40.91,192.168.40.92,192.168.40.93 
wsrep_node_address=192.168.40.91 
wsrep_cluster_name=pxc-cluster 
wsrep_node_name=pxc-cluster-node-db1

[DB2]
# grep -e address -e cluster /etc/my.cnf | grep -v \# 
wsrep_cluster_address=gcomm://192.168.40.91,192.168.40.92,192.168.40.93 
wsrep_node_address=192.168.40.92 
wsrep_cluster_name=pxc-cluster 
wsrep_node_name=pxc-cluster-node-db2

[DB3]
# grep -e address -e cluster /etc/my.cnf | grep -v \# 
wsrep_cluster_address=gcomm://192.168.40.91,192.168.40.92,192.168.40.93 
wsrep_node_address=192.168.40.93 
wsrep_cluster_name=pxc-cluster 
wsrep_node_name=pxc-cluster-node-db3

Mulai cluster

Setelah konfigurasi terlihat bagus, langkah selanjutnya adalah bootstrap DB1 server. Ini dilakukan dengan layanan khusus yang disebut [email protected] :

# systemctl start [email protected]

Login untuk memeriksa status dengan perintah berikut:

# mysql -u root -p
# mysql> show status like 'wsrep%';

Cari wsrep_cluster_size, yang seharusnya 1 , karena satu-satunya server di cluster saat ini adalah DB1 .

Layanan bootstrap menghasilkan sertifikat keamanan TLS yang digunakan untuk komunikasi cluster yang aman. Salin file-file ini ke /var/lib/mysql pada dua server database lainnya:server-key.pem ,ca.pem , dan server-cert.pem

# cd /var/lib/mysql
# scp server-key.pem server-cert.pem ca.pem db2:/var/lib/mysql/
# scp server-key.pem server-cert.pem ca.pem db3:/var/lib/mysql/


Konfigurasikan firewall untuk operasi cluster yang aman

Cluster Percona memerlukan empat port berikut agar terbuka agar berfungsi dengan baik:3306, 4444, 4567, dan 4568. Jalankan perintah firewall ini di ketiga server (DB1 , DB2 , dan DB3 ) untuk mengonfigurasinya.

Pastikan firewall layanan sedang berjalan:

# systemctl enable firewalld
# systemctl start firewalld

Zona default adalah publik , jadi kecuali Anda telah mengubahnya, Anda dapat menambahkan empat port yang diperlukan dengan cara ini:

# firewall-cmd --add-port 3306/tcp --zone=public --permanent
# firewall-cmd --add-port 4444/tcp --zone=public --permanent
# firewall-cmd --add-port 4567/tcp --zone=public --permanent

# firewall-cmd --add-port 4568/tcp --zone=public --permanent

Atau, jika Anda mau, tambahkan beberapa port sekaligus dari satu perintah:

# firewall-cmd --add-port={3306/tcp,4444/tcp,4567/tcp,4568/tcp} --zone=public --permanent


Muat ulang firewall service dengan perintah berikut, lalu daftarkan port untuk mengonfirmasi bahwa layanan telah dikonfigurasi seperti yang diharapkan:

# firewall-cmd --reload

# firewall-cmd --list-ports 
3306/tcp 4444/tcp 4567/tcp 4568/tcp

Anda dapat menemukan informasi lebih lanjut tentang firewall RHEL 8 di sini.

Kembangkan cluster

Sekarang saatnya untuk menambahkan lebih banyak server ke cluster yang ada yang sedang berjalan setelah di-bootstrap. Tujuannya adalah untuk menambahkan keduanya DB2 dan DB3 ke cluster yang berjalan di DB1 .

Satu per satu, mulai layanan MySQL di setiap server, tunggu sampai selesai sebelum pindah ke server berikutnya.

Di DB2 , ketik:

# systemctl start mysql

Lakukan hal yang sama pada DB3 :

# systemctl start mysql

Di DB1 , tail mysql.log file untuk melihat server baru bergabung dengan cluster. Ini akan memberi tahu Anda jika semuanya berfungsi seperti yang diharapkan atau jika terjadi kesalahan selama fase penggabungan klaster:

# tail -f /var/log/mysqld.log | grep db3

2021-04-08T17:48:25.892746Z 0 [Note] [MY-000000] [Galera] STATE EXCHANGE: got state msg: 9ea100f1-9892-11eb-af
0e-66802999478c from 0 (pxc-cluster-node-db3) 
       0: 9e07f773-9892-11eb-a4b8-7bfcd02aca9e, pxc-cluster-node-db3

2021-04-08T17:48:26.405209Z 0 [Note] [MY-000000] [Galera] Member 0.0 (pxc-cluster-node-db3) requested state tr
ansfer from '*any*'. Selected 1.0 (pxc-cluster-node-db1)(SYNCED) as donor.

2021-04-08T17:48:41.023324Z 0 [Note] [MY-000000] [Galera] 1.0 (pxc-cluster-node-db1): State transfer to 0.0 (p
xc-cluster-node-db3) complete. 
2021-04-08T17:48:46.677727Z 0 [Note] [MY-000000] [Galera] 0.0 (pxc-cluster-node-db3): State transfer from 1.0 
(pxc-cluster-node-db1) complete. 
2021-04-08T17:48:46.678022Z 0 [Note] [MY-000000] [Galera] Member 0.0 (pxc-cluster-node-db3) synced with group.

Pada output file log di atas, Anda dapat melihat bahwa DB3 bergabung dengan cluster, meminta transfer status, dan berhasil menyinkronkan datanya dari DB1. Cara lain untuk memverifikasi ukuran cluster adalah dengan masuk ke server mana pun yang merupakan anggota cluster dan menjalankan perintah berikut:

# mysql -u root -p
# mysql> show status like 'wsrep%';

Cari wsrep_cluster_size , yang seharusnya 3 , karena ketiga server (DB1 , DB2 , dan DB3 ) telah bergabung dengan cluster sekarang.

Cari wsrep_incoming_addresses , yang seharusnya menampilkan ketiga alamat IP server. Sekali lagi, ini adalah cara lain untuk mengonfirmasi bahwa semua server berada di cluster dan berkomunikasi dengan benar.

Menguji cluster

Setelah kluster tiga node aktif dan berjalan, Anda perlu menguji kemampuan active-active-active.

Di server DB1 , buat database baru dengan perintah berikut:

# mysql -u root -p
# mysql> create database myACTIVEdb;

Di server DB2 atau DB3 , jalankan perintah berikut untuk memeriksa apakah database yang baru dibuat muncul:

# mysql -u root -p
# mysql> show databases; 
+--------------------+ 
| Database           | 
+--------------------+ 
| information_schema | 
| myACTIVEdb         | 
| mysql              | 
| performance_schema | 
| sys                | 
+--------------------+ 
5 rows in set (0.00 sec)

Basis data baru akan segera muncul. Terlepas dari penulisan server mana yang dilakukan, data direplikasi ke server database lainnya. Selamat, Anda sekarang memiliki server MySQL Percona tiga simpul aktif-aktif-aktif yang berjalan di RHEL 8!

Pemeliharaan klaster

Dari waktu ke waktu, salah satu server database mungkin memerlukan pemeliharaan yang memerlukan reboot. Anda harus selalu mematikan layanan MySQL dengan benar sebelum mem-boot ulang:

# systemctl stop mysql

Perintah ini dapat memakan waktu, karena mempersiapkan cluster untuk berada dalam keadaan terganggu. Biarkan dimatikan dengan benar untuk menyinkronkan dan memperbarui status cluster di semua server.

Nyalakan ulang server dalam pemeliharaan, lalu bergabung kembali dengan cluster dengan perintah berikut:

# systemctl start mysql

Kesehatan kluster bergantung pada menjaga kuorum . Ingatlah selalu untuk menjaga satu lebih dari setengah ukuran cluster dan berjalan. Untuk kelompok yang terdiri dari tiga orang, kuorum akan menjadi dua. Untuk kelompok lima, kuorum akan menjadi tiga. Menumbuhkan cluster dari tiga menjadi lima itu mudah; ulangi saja langkah-langkah yang diuraikan di atas. Dianjurkan untuk memiliki jumlah server ganjil di cluster, membuat kuorum lebih mudah dikelola.

Jika seluruh cluster mati dan perlu dimulai ulang, ingatlah untuk memilih satu server untuk memulai cluster. Itu dilakukan dengan proses bootstrap. Misalnya, pada DB1 :

# systemctl start [email protected]

Di dua server lainnya, gabungkan mereka setelah proses bootstrap selesai, dengan perintah berikut:

# systemctl start mysql

Cluster sekarang sudah aktif dan beroperasi.

SELinux

RHEL 8 dikirimkan dengan SELinux dalam Menegakkan mode. Red Hat, Percona, dan MySQL telah melakukan pekerjaan yang baik dengan SELinux bekerja di luar kotak di Menegakkan mode. Tidak ada perubahan yang perlu dilakukan. Anda dapat menemukan detail lebih lanjut di situs web Percona jika perubahan pada parameter konfigurasi Percona tertentu perlu diubah.

[ Dapatkan ebook gratis ini:Mengelola kluster Kubernetes Anda untuk boneka. ]

Menutup

RHEL 8 menyediakan platform untuk beban kerja database yang dapat didukung dan menawarkan performa yang luar biasa. Percona telah melakukan pekerjaan yang bagus dalam mengemas implementasi multi-master server MySQL yang mudah diterapkan dengan mempertimbangkan detail keamanan.


Linux
  1. Cara Instal Lighttpd Dengan PHP5 FastCGI Dan MySQL di openSUSE 12.1

  2. Cara Menginstal Nginx Dengan PHP-FPM Dan MySQL Di openSUSE 12.1

  3. Cara Mengatur LogAnalyzer dengan Rsyslog dan MySQL

  1. Cara menginstal Percona XtraDB Cluster untuk MySQL di Debian 8

  2. Cara Membuat Database di MySQL dengan MySQL Workbench

  3. Cara mengaktifkan dan memasang 2 grup Volume dengan nama yang sama di CentOS/RHEL

  1. Cara Instal Lighttpd Dengan PHP5 FastCGI Dan MySQL Pada CentOS 6 / RHEL 6

  2. Cara Menginstal Lighttpd Dengan PHP5 FastCGI Dan MySQL Di Fedora 16

  3. Cara Instal Nginx Dengan PHP-FPM Dan MySQL Di Fedora 16 “Verne”