Cara Mengatur Replikasi MariaDB (Master-Slave) di CentOS/RHEL 7 dan Debian 8/9


Bahkan ketika beberapa orang TI mendengar ungkapan “Replikasi basis data”, mereka sering mengasosiasikannya dengan kebutuhan untuk memiliki banyak salinan informasi yang sama untuk menghindari kehilangan data jika terjadi kegagalan perangkat keras atau kerusakan data. Meskipun hal ini benar pada batas tertentu, replikasi database lebih dari sekadar konsep umum pencadangan database dan ketersediaan data.

Di antara manfaat lain dari replikasi database dalam pengaturan master-slave yang dapat kami sebutkan:

  1. Pencadangan dapat dilakukan di server budak tanpa mempengaruhi (dan dipengaruhi oleh) operasi penulisan di server master.
  2. Operasi intensif sumber daya (seperti analisis data) dapat dilakukan pada budak tanpa mempengaruhi kinerja master.

Pada artikel ini kami akan menjelaskan cara menyiapkan replikasi master-slave di MariaDB 10.1. Berbeda dengan replikasi klasik, MariaDB memperkenalkan konsep ID Transaksi Global (GTID) di v10.0, yang memungkinkan untuk mengubah budak menjadi terhubung ke dan mereplikasi dari master yang berbeda dengan mudah. Selain itu, status budak dicatat dengan cara yang aman dari kerusakan (pembaruan status dilakukan dalam transaksi yang sama dengan pembaruan data).

Jika Anda mencari replikasi MySQL pada CentOS/RHEL 6, ikuti panduan ini Menyiapkan Replikasi MySQL (Master-Slave) di CentOS/RHEL 6

Menginstal MariaDB 10.1 di CentOS/RHEL 7 dan Debian 8/9

Lingkungan pengujian kami terdiri dari mesin berikut (keduanya CentOS 7):

Master: 192.168.0.18
Slave: 192.168.0.19

Untuk menginstal MariaDB versi terbaru, kami perlu menambahkan repositori mereka ke server kami. Jika Anda menggunakan MariaDB versi lama, katakanlah 5.5, pertimbangkan untuk meningkatkan ke versi 10.1 terbaru menggunakan artikel di bawah ini.

  1. Tingkatkan MariaDB 5.5 ke MariaDB 10.1

Di CentOS/RHEL

Buat file bernama MariaDB.repo di dalam /etc/yum.repos.d dengan konten berikut di Master dan Slave sistem:

MariaDB 10.1 CentOS repository list - created 2016-01-23 14:16 UTC
http://mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.1/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

Simpan file dan instal MariaDB di kedua server menggunakan yum:

yum update && yum install MariaDB-server MariaDB-client

Di Debian/Ubuntu

Tambahkan kunci untuk mengautentikasi paket dan repositori MariaDB:

apt-get install software-properties-common
apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db
add-apt-repository 'deb [arch=amd64,i386] http://mirror.edatel.net.co/mariadb/repo/10.1/debian jessie main'

Catatan: Ganti nama distribusi dan nama kode pada baris yang disorot di atas.

Instal menggunakan perintah apt-get:

apt-get update
apt-get install mariadb-server

Setelah Anda menginstal MariaDB, jalankan prosedur mysql_secure_installation pada master dan slave, mari kita siapkan contoh database pengujian di mesin master.

Menyiapkan Contoh Database MySQL di Master

Sekarang kita akan menyiapkan database Karyawan dari https://github.com/datacharmer/test_db di server master (yang menyediakan kumpulan data 4 juta catatan tersebar di enam tabel) dalam dua langkah sederhana:

Kloning repositori dan gunakan untuk mengimpor database sampel ke instalasi MariaDB Anda:

git clone https://github.com/datacharmer/test_db
cd test_db
mysql < employees.sql

Mengonfigurasi Server MySQL di Master

Untuk mengkonfigurasi master, ikuti langkah-langkah berikut:

LANGKAH 1: Edit file /etc/my.cnf. Di bawah bagian [mysqld], tambahkan empat baris berikut:

log-bin
server_id=1
replicate-do-db=employees
bind-address=192.168.0.18

dan mulai ulang MariaDB:

systemctl restart mariadb

LANGKAH 2: Masuk ke server MariaDB sebagai root, buat budak pengguna dan tetapkan hibah yang diperlukan:

MariaDB [(none)]> CREATE USER 'slave'@'localhost' IDENTIFIED BY 'SlavePassword';
MariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* TO slave IDENTIFIED BY 'SlavePassword' WITH GRANT OPTION;
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> FLUSH TABLES WITH READ LOCK;
MariaDB [(none)]> SHOW MASTER STATUS;

Perintah terakhir (SHOW MASTER STATUS) mengembalikan posisi saat ini dalam log biner (koordinat tepat yang menunjukkan di titik mana budak harus mulai mereplikasi:

LANGKAH 3: Keluar dari perintah MariaDB (dengan exit;) dan gunakan perintah berikut untuk mengambil cuplikan database karyawan. Ketika Anda menekan Enter, Anda akan diminta mengetikkan kata sandi untuk root yang Anda siapkan sebelumnya melalui mysql_secure_installation:

mysqldump -u root -p employees > employees-dump.sql

Setelah dump selesai, sambungkan kembali ke server database untuk membuka kunci tabel, lalu keluar:

MariaDB [(none)]> UNLOCK TABLES;
MariaDB [(none)]> exit;

LANGKAH 4: Salin dump ke slave:

scp employees-dump.sql [email :/root/ 

LANGKAH 5: Jalankan prosedur mysql_upgrade untuk meningkatkan tabel sistem (Anda akan diminta memasukkan kata sandi root MariaDB):

mysql_upgrade -u root -p

LANGKAH 6: Izinkan layanan database melalui firewall:

firewall-cmd --add-service=mysql
firewall-cmd --add-service=mysql --permanent
firewall-cmd --reload

Sekarang mari kita konfigurasikan budaknya.

Mengonfigurasi Server MySQL di Slave

Untuk mengkonfigurasi budak, ikuti langkah-langkah berikut:

LANGKAH 1: Buat akun untuk melakukan tugas replikasi. Hubungkan ke server MariaDB lokal dengan:

mysql -u root –p

dan masukkan kata sandi yang Anda atur sebelumnya.

LANGKAH 2: Setelah terhubung ke server database, buat pengguna dan database kosong, dan berikan izin:

MariaDB [(none)]> CREATE DATABASE employees;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON employees.* TO 'slave'@'localhost' WITH GRANT OPTION;
MariaDB [(none)]> FLUSH PRIVILEGES;

LANGKAH 3: Keluar dari perintah MariaDB dan muat dump yang dibuat di server master:

mysql -u root -p employees < employees-dump.sql

LANGKAH 4: Edit file /etc/my.cnf untuk menetapkan ID server ke budak di bawah [mysqld] bagian. Perhatikan bahwa ini harus berupa bilangan bulat yang berbeda dari 1, seperti yang kita gunakan 1 di master:

server_id=2
replicate-do-db=employees

Mulai ulang server basis data:

systemctl restart mariadb

LANGKAH 5: Jalankan prosedur mysql_upgrade untuk meningkatkan tabel sistem (Anda akan diminta memasukkan kata sandi root MariaDB):

mysql_upgrade -u root -p

LANGKAH 6: Setelah dump diimpor ke slave, kita hanya perlu beberapa langkah untuk mulai mereplikasi. Masuk ke database dan jalankan perintah berikut di prompt MariaDB. Berikan perhatian khusus pada variabel MASTER_LOG_FILE dan MASTER_LOG_POS, yang harus sesuai dengan nilai yang dikembalikan oleh SHOW MASTER STATUS pada LANGKAH 2 “Mengonfigurasi master” di atas.

MariaDB [(none)]> CHANGE MASTER TO
  MASTER_HOST='192.168.0.18',
  MASTER_USER='slave',
  MASTER_PASSWORD='SlavePassword',
  MASTER_PORT=3306,
  MASTER_LOG_FILE='master-bin.000001',
  MASTER_LOG_POS=314,
  MASTER_CONNECT_RETRY=10,
  MASTER_USE_GTID=current_pos;

LANGKAH 7: Jalankan slave dan periksa statusnya tanpa keluar dari perintah MariaDB:

MariaDB [(none)]> START SLAVE;
MariaDB [(none)]> SHOW SLAVE STATUS\G;

Bukan berarti Anda memerlukan ini sekarang, tetapi perhatikan bahwa Anda dapat menghentikan budak tersebut dengan:

MariaDB [(none)]> STOP SLAVE;

jika perintah SHOW SLAVE STATUS\G; mengembalikan kesalahan apa pun. Gunakan kesalahan tersebut untuk memecahkan masalah dan kemudian jalankan START SLAVE; untuk mengujinya lagi.

Uji Replikasi Database MySQL/MariaDB

Mari tambahkan catatan ke tabel karyawan di server master:

MariaDB [(none)]> INSERT INTO employees (emp_no, birth_date, first_name, last_name, gender, hire_date) VALUES (500000, '1983-07-12', 'Dave', 'Null', 'M', '2014-12-12');

Kemudian verifikasi bahwa perubahan ini direplikasi di slave:

MariaDB [(none)]> USE employees;
MariaDB [(none)]> SELECT * FROM employees WHERE emp_no=500000;

Seperti yang Anda lihat, replikasi berfungsi dengan benar dari master ke slave.

Ringkasan

Pada artikel ini kami telah menjelaskan cara menginstal MariaDB versi terbaru di CentOS/RHEL 7 dan Debian 8/9, serta membahas cara menyiapkan replikasi master-slave dengan GTID. Untuk informasi lebih lanjut, Anda mungkin ingin merujuk ke Panduan Replikasi MariaDB, dan jangan ragu untuk menghubungi kami menggunakan formulir di bawah ini jika Anda memiliki pertanyaan atau komentar.