GNU/Linux >> Belajar Linux >  >> Debian

Cara Mengatur Replikasi Sinkron MariaDB Galera Multi-Master menggunakan Debian 10

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):Tekan Setel 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.


Debian
  1. Cara mengatur Replikasi Streaming PostgreSQL dengan Slot Replikasi di Debian 10

  2. Cara Mengatur Cluster MariaDB Galera di Ubuntu 20.04

  3. Cara Setup Server Rsyslog di Debian 11

  1. Cara mengatur vsftpd di Debian

  2. Cara Menginstal MariaDB 10.x di Debian 11

  3. Cara Setup Opencart dengan LAMP (PHP, Apache, Mariadb) di Debian 11

  1. Cara Menginstal MariaDB di Debian 9

  2. Cara Menginstal MariaDB di Debian 10

  3. Cara Mengonfigurasi Replikasi Master-Slave MySQL (MariaDB) di Debian 10