MariaDB menawarkan dua solusi ketersediaan tinggi (HA) dan pengelompokan yang berbeda. Yang pertama adalah replikasi master/slave MariaDB standar yang dapat dikonfigurasi dalam berbagai topologi terutama untuk tujuan penyeimbangan beban, HA, dan pencadangan. Yang kedua adalah MariaDB Galera, solusi pengelompokan sinkron multi-master. Fitur utamanya adalah sebagai berikut:
- Multi-master:Semua node dalam cluster Galera dapat melakukan operasi baca dan tulis, menawarkan skalabilitas yang lebih baik.
- Node dapat bergabung dengan cluster secara otomatis, dan dikeluarkan jika gagal.
- Replikasi Galera bersifat sinkron, artinya perubahan pada satu node dijamin akan diterapkan pada node lainnya. Secara teori, ini memastikan bahwa tidak ada data yang hilang saat sebuah node gagal.
Panduan ini akan memandu Anda melalui penginstalan MariaDB dan konfigurasinya di kluster Galera. Kami akan menggunakan tiga node Debian 10 untuk demonstrasi, meskipun sejumlah (≥3) node dapat digunakan. Menyiapkan dua node dalam kluster Galera secara teknis dimungkinkan tetapi tidak memberikan toleransi kesalahan karena node yang gagal akan menyebabkan node lain berhenti.
Persyaratan
- Tiga atau lebih Debian 10 instance.
- Akses ke pengguna root atau pengguna mana pun dengan hak istimewa sudo.
- The $EDITOR variabel lingkungan harus disetel.
CATATAN: Cluster Galera dapat bekerja melalui WAN atau LAN. Jika node Anda berbagi jaringan pribadi, gunakan alamat IP pribadi jika berlaku. Jika tidak, alamat WAN harus digunakan.
Jika menggunakan pengguna sudo, buka dan gunakan shell root selama penyiapan ini menggunakan:
sudo -s
Langkah 1:Menginstal MariaDB
Langkah ini harus dijalankan di semua node.
Gunakan perintah berikut untuk menginstal MariaDB, pustaka Galera, dan Rsync. Yang terakhir digunakan oleh Galera.
apt updateapt install -y mariadb-server mariadb-client galera-3 rsync
Pastikan layanan MariaDB diaktifkan:
systemctl aktifkan mariadb.service
Amankan instans MariaDB Anda menggunakan skrip mysql_secure_installation:
mysql_secure_installation
Jawab pertanyaan seperti yang ditunjukkan di bawah ini dan pastikan Anda memilih kata sandi yang kuat untuk pengguna root MySQL.
Masukkan kata sandi saat ini untuk root (masukkan untuk tidak ada):TekanSetel kata sandi root? [Y/n] yKata sandi baru:your_passwordMasukkan ulang kata sandi baru:your_passwordHapus pengguna anonim? [Y/n] yLarang login root dari jarak jauh? [Y/n] yHapus database pengujian dan akses ke sana? [Y/n] yMuat ulang tabel hak istimewa sekarang? [Y/n] kalian sudah selesai! Jika Anda telah menyelesaikan semua langkah di atas, instalasi MariaDB Anda seharusnya sudah aman.
Langkah 2:Mengonfigurasi MariaDB
Langkah ini harus dijalankan di semua node.
Hentikan layanan MariaDB di semua node:
systemctl stop mariadb.service
Secara default, daemon MariaDB hanya mendengarkan koneksi di localhost. Agar cluster berfungsi, ini harus diubah ke alamat yang dapat diakses secara eksternal. Untuk melakukannya, edit file opsi /etc/mysql/mariadb.conf.d/50-server.cnf:
$EDITOR /etc/mysql/mariadb.conf.d/50-server.cnf
Temukan baris berikut:
mengikat-alamat =127.0.0.1
Jika Anda menggunakan jaringan pribadi untuk cluster dan Anda tidak ingin mengekspos MariaDB ke jaringan lain (yaitu WAN), tentukan alamat IPv4 lokal untuk setiap node. Jika tidak, gunakan 0.0.0.0 yang menginstruksikan MariaDB untuk mendengarkan di semua antarmuka. Misalnya:
mengikat-alamat =0.0.0.0
Simpan perubahan dan keluar dari editor teks Anda.
Kami sekarang akan mengonfigurasi opsi terkait cluster. Buat file opsi baru:
$EDITOR /etc/mysql/mariadb.conf.d/99-cluster.cnf
Masukkan konfigurasi masuk akal berikut ke dalam file, menggantikan alamat IP. Itu harus identik di semua node.
[galera]
wsrep_on =di wsrep_provider =/lib/galera/libgalera_smm.so wsrep_cluster_address =gcomm://192.0.2.1,192.0.2.2,192.0.2.3 wsrep_cluster_name =galera_cluster_0 default_noDB_penyimpanan dalam mesin_ganda =Inmode_penyimpanan ganda dalam mesin =Innob_autoinc dalam =1 binlog_format =ROW
- wsrep_on =on mengaktifkan replikasi set tulis, fungsionalitas dasar yang digunakan oleh Galera.
- wsrep_provider menentukan jalur ke perpustakaan galera. Ini disediakan oleh paket galera-3 di /lib/galera/libgalera_smm.so di Debian 10.
- wsrep_cluster_address harus berisi setidaknya satu alamat anggota cluster lainnya. Daftar semua anggota cluster dianjurkan. Tidak diperlukan urutan tertentu.
- wsrep_cluster_name harus unik untuk cluster dan harus identik pada semua node dari cluster galera yang sama.
- Opsi yang tersisa diperlukan agar Galera berfungsi dengan baik dan tidak boleh diubah.
Langkah 3:Bootstrap cluster
Pastikan MariaDB dihentikan/tidak aktif di semua node sebelum melanjutkan:
systemctl status mariadb.service
Untuk memulai cluster, sebuah node harus terlebih dahulu membuatnya. Pada Debian 10, ini dapat dilakukan dengan skrip galera_new_cluster. Script hanya boleh dijalankan pada satu node, dan hanya sekali untuk menginisialisasi cluster.
galera_new_cluster
Ini akan memulai MariaDB pada node saat ini. Pastikan itu berjalan dengan:
systemctl status mariadb.service
Kemudian mulai MariaDB di node lain dengan:
systemctl start mariadb.service
Cluster sekarang harus beroperasi.
Langkah 4:Pengujian
Untuk memastikan cluster berfungsi sebagaimana mestinya, pilih node mana saja dan login ke MariaDB:
mysql -u root -p
Keluarkan pernyataan berikut untuk membuat database:
> BUAT DATABASE test0;> \q
Kemudian periksa database baru ini di semua node lain:
mysql -u root -p -e "TAMPILKAN DATABASES;"
Perintah di atas akan mengembalikan daftar yang berisi test0:
+--------------------+| Basis Data |+--------------------+| skema_informasi || mysql || skema_kinerja || test0 |+-------------------+
Anda mungkin ingin menguji lebih teliti dengan menulis ke cluster dari setiap node. Setelah Anda puas dengan pengujian, bersihkan database yang tidak dibutuhkan dari cluster. Setiap node dapat digunakan.
mysql -u root -p -e "DROP DATABASE test0;"
Langkah 5:Kiat Pemecahan Masalah
Gunakan kueri berikut untuk melihat informasi tentang status node/cluster saat ini:
mysql -u root -p -e "PILIH * FROM information_schema.global_status WHERE variable_name IN ('WSREP_CLUSTER_STATUS','WSREP_LOCAL_STATE_COMMENT','WSREP_CLUSTER_SIZE','WSREP_EVS_REPL_LATENCY','WSREPED_EVDY_'); pra>Cluster 3-node yang sehat akan menampilkan yang berikut ini:
+---------------------------+----------------+| VARIABLE_NAME | VARIABLE_VALUE |+-----------------------+----------------+| WSREP_CLUSTER_SIZE | 3 || WSREP_CLUSTER_STATUS | Utama || WSREP_EVS_DELAYED | || WSREP_EVS_REPL_LATENCY | 0/0/0/0/0 || WSREP_LOCAL_STATE_COMMENT | Disinkronkan || WSREP_READY | AKTIF |+-----------------------+----------------+
- WSREP_CLUSTER_SIZE mewakili jumlah node saat ini dalam komponen cluster.
- WSREP_CLUSTER_STATUS mewakili status komponen cluster dan bukan cluster secara keseluruhan.
- WSREP_EVS_DELAYED menampilkan daftar node yang tertunda. Nilai kosong diharapkan dari cluster yang sehat.
- WSREP_EVS_REPL_LATENCY menunjukkan latensi replikasi dalam format min/avg/max/stddev/samplesize. Nilai ditampilkan dalam hitungan detik. Latensi yang sangat tinggi dapat menyebabkan penurunan kinerja.
- WSREP_LOCAL_STATE_COMMENT menunjukkan status simpul saat ini.
- WSREP_READY menunjukkan apakah node dapat menerima kueri.
Ketika sebuah node dalam cluster 3-node kehilangan konektivitas, cluster dipartisi menjadi komponen utama yang terdiri dari 2 node dan komponen non-primer. Komponen utama tidak terpengaruh oleh pemadaman dan melanjutkan operasi normal. Dari perspektif komponen non-primer, kueri yang ditampilkan di atas akan mengembalikan yang berikut:
+---------------------------+------------------ -------------------------------------------------- -------------------------------------------------- ----------+| VARIABLE_NAME | VARIABLE_VALUE |+------------------------+------------------- -------------------------------------------------- -------------------------------------------------- ---------+| WSREP_CLUSTER_SIZE | 1 || WSREP_CLUSTER_STATUS | non-Utama || WSREP_EVS_DELAYED | 6b7864f2-fe7d-11e9-84ab-93e58c0d2907:tcp://192.0.2.1:4567:3,a421be89-fe7d-11e9-a91e-7e62f7562e58:tcp://192.0.2.3:4567:2 || WSREP_EVS_REPL_LATENCY | 0/0/0/0/0 || WSREP_LOCAL_STATE_COMMENT | Diinisialisasi || WSREP_READY | OFF |+---------------------------+------------------- -------------------------------------------------- -------------------------------------------------- ---------+
Perhatikan nilai WSREP_EVS_DELAYED, yang menunjukkan masalah konektivitas ke node lain.
Pada node komponen utama, kueri yang sama mengembalikan:
+---------------------------+------------------ ----------------------------------------------+| VARIABLE_NAME | NILAI_VARIABEL |+----------------------------+------------------- ---------------------------------------------+| WSREP_CLUSTER_SIZE | 2 || WSREP_CLUSTER_STATUS | Utama || WSREP_EVS_DELAYED | a2217526-fe7d-11e9-8692-1f2f0cdb403d:tcp://192.0.2.2:4567:2 || WSREP_EVS_REPL_LATENCY | 0/0/0/0/0 || WSREP_LOCAL_STATE_COMMENT | Disinkronkan || WSREP_READY | AKTIF |+-----------------------+------------------- ---------------------------------------------+
Untuk memulihkan dari kegagalan node tunggal, tidak diperlukan intervensi manual. Ketika node yang gagal terhubung kembali ke cluster, itu akan disinkronkan dengan cluster secara otomatis.
Informasi Lebih Lanjut
Untuk opsi konfigurasi lanjutan, lihat Variabel Sistem Cluster Galera.