MariaDB Mengkonfigurasi Replikasi Basis Data dalam Mode Master-Master / Slave

Replikasi dalam database SQL adalah proses menyalin data dari satu sumber ke yang lain (atau ke beberapa) dan sebaliknya. Data dari satu server basis data secara konstan disalin ke satu atau lebih server lain. Dengan bantuan replikasi, Anda dapat mendistribusikan beban di server, memberikan toleransi kesalahan dan ketersediaan tinggi database MariaDB. DBMS MariaDB / MySQL memungkinkan menggunakan dua jenis replikasi basis data: Master-Master dan Master-Slave. Pada artikel ini, kita akan melihat cara mengkonfigurasi kedua jenis replikasi MariaDB di CentOS 7. Mari kita mulai!

Konten:

  • Instal MariaDB.
  • Konfigurasikan replikasi Master-Master di MariaDB
  • Konfigurasikan Replikasi Master-Slave di MariaDB

Instal MariaDB.

Sebelumnya kami memposting sebuah artikel yang menggambarkan proses instalasi MariaDB di CentOS 7. Anda dapat membiasakan diri dengannya di https://winitpro.ru/index.php/2019/08/28/ustanovka-i-optimizaciya-mariadb/. Oleh karena itu, kami tidak akan fokus pada instalasi MariaDB itu sendiri, tetapi segera kami akan mengonfigurasi replikasi.

Konfigurasikan replikasi Master-Master di MariaDB

Dalam skema replikasi Master-Master, salah satu dari server database MariaDB / MySQL dapat digunakan baik untuk menulis informasi maupun untuk membaca. Banyak orang menemukan jenis replikasi ini tidak sepenuhnya menarik. Jika salah satu server gagal, kemungkinan besar data akan hilang di server Master lainnya. Biasanya, skema ini digunakan ketika semua server harus menyediakan informasi penulisan dan membaca..

Replikasi didasarkan pada file binlog khusus, di mana server Master menyimpan semua operasi database. Server slave terhubung ke master dan menerapkan perintah ke database-nya.

1. MariaDB: Menyiapkan server master pertama (Master-1)

Tambahkan ke file konfigurasi kami my.cnf pada server MariaDB pertama, baris berikut:

#replikasi
server-id = 1
report_host = master
log_bin = / var / lib / mysql / mariadb-bin
log_bin_index = /var/lib/mysql/mariadb-bin.index
relay_log = / var / lib / mysql / relay-bin
relay_log_index = /var/lib/mysql/relay-bin.index

layanan mariadb restart

Buat pengguna untuk mengonfigurasi replikasi:

mysql
buat pengguna 'test_master' @ '%' diidentifikasi oleh 'test_master';
berikan budak replikasi pada *. * ke 'test_master' @ '%';

Untuk menambahkan Slave, kita membutuhkan data bin_log dari server Master1.

MariaDB [(tidak ada)]> tampilkan status master;

+--------------------+----------+--------------+------------------+ | File | Posisi | Binlog_Do_DB | Binlog_Ignore_DB | + -------------------- + ---------- + -------------- + - ---------------- + | mariadb-bin.000002 | 664 | | | + -------------------- + ---------- + -------------- + - ---------------- + 1 baris dalam set (0,000 detik) 

Ini akan menjadi Master-1 kita.

2. MariaDB: Menyiapkan server master kedua (Master-2)

Sambungkan ke server MariaDB kedua, buka file konfigurasi my.cnf dan tambahkan informasinya:

#replikasi
server-id = 2
report_host = master2
log_bin = / var / lib / mysql / mariadb-bin
log_bin_index = /var/lib/mysql/mariadb-bin.index
relay_log = / var / lib / mysql / relay-bin
relay_log_index = /var/lib/mysql/relay-bin.index

Dan juga membuat pengguna di server kedua:

buat pengguna 'test_master2' @ '%' diidentifikasi oleh 'test_master2';
berikan budak replikasi pada *. * ke 'test_master2' @ '%';

Bin_log pada Master-2:

MariaDB [(tidak ada)]> tampilkan status master;

+--------------------+----------+--------------+------------------+ | File | Posisi | Binlog_Do_DB | Binlog_Ignore_DB | + -------------------- + ---------- + -------------- + - ---------------- + | mariadb-bin.000001 | 667 | | | + -------------------- + ---------- + -------------- + - ---------------- + 1 baris dalam set (0,000 detik)

Mari kita atur koneksi antara server MariaDB di cluster perangkat lunak kami:

Hentikan budak:

BERHENTI BUDAK;

Tambahkan Master-1 ke server kedua:

GANTI MASTER KE MASTER_HOST = "IP_master1", MASTER_USER = "test_master", MASTER_PASSWORD = "test_master", MASTER_LOG_FILE = "mariadb-bin.000002", MASTER_LOG_POS = 664;

Kami memulai replikasi:

MULAI BUDAK

Kami terhubung ke Master-1 dan melakukan prosedur yang sama, hanya dengan menentukan data server kedua kami:

BERHENTI BUDAK;
GANTI MASTER KE MASTER_HOST = "183.219.19.36", MASTER_USER = "test_master2", MASTER_PASSWORD = "test_master2", MASTER_LOG_FILE = "mariadb-bin.000001", MASTER_LOG_POS = 667;
MULAI BUDAK

Periksa status server kedua:

tampilkan status budak \ G

Seperti yang dapat Anda lihat di tangkapan layar, ada koneksi di dua server, tidak ada kesalahan yang diamati.

3. Verifikasi replikasi antara server MariaDB.

Selanjutnya, untuk memverifikasi bahwa replikasi antara dua server MariaDB bekerja dalam mode master + master dan bahwa umumnya berfungsi, kita akan membuat basis baru pada Master-1 dan membuat tabel di dalamnya.

MariaDB [(tidak ada)]> create database master1;

Kueri OK, 1 baris terpengaruh (0,001 dtk)


MariaDB [(tidak ada)]> use master1;

Basis data berubah

MariaDB [master1]> CREATE TABLE hello (

-> AuthorID INT TIDAK NULL AUTO_INCREMENT,

-> Nama Penulis VARCHAR (100),

-> KUNCI UTAMA (AuthorID)

->);

Kueri OK, 0 baris terpengaruh (0,005 dtk)

Kami memeriksa bahwa database secara otomatis muncul di master kedua, dan tabel kami juga ada di dalamnya:

MariaDB [(tidak ada)]> tampilkan basis data;

+--------------------+ | Database | + -------------------- + | information_schema | | master1 | | mysql | | performance_schema | + -------------------- + 4 baris dalam set (0,001 detik)

MariaDB [(tidak ada)]> use master1;

MariaDB [master1]> tampilkan tabel;

+-------------------+ | Tables_in_master1 | + ------------------- + | halo | + ------------------- + 1 baris diset (0,000 detik) 

Pangkalan itu dibuat pada master kedua. Untuk pemeriksaan penuh, buat tabel di database master1 dari server master kedua dan periksa apakah mereka ditransfer ke arah yang berlawanan.

MariaDB [master1]> CREATE TABLE hello_master1 (

-> AuthorID INT TIDAK NULL AUTO_INCREMENT,

-> Nama Penulis VARCHAR (100),

-> KUNCI UTAMA (AuthorID)

->);

Kueri OK, 0 baris terpengaruh (0,006 dtk)

Tabel hello_master1 diteruskan ke server pertama:

MariaDB [master1]> tampilkan tabel;

+-------------------+ | Tables_in_master1 | + ------------------- + | halo | | hello_master1 | + ------------------- + 2 baris diset (0,000 detik) 

Seperti yang Anda lihat, sebuah tabel baru telah muncul di Master-1. Replikasi bekerja seperti yang kita inginkan.

Konfigurasikan Replikasi Master-Slave di MariaDB

Dalam versi replikasi ini, satu server bertindak sebagai server Slave, yang datanya dikirimkan dari Master secara konstan. Semua perubahan yang akan dilakukan pada server Slave tidak akan ditransfer ke Master. Ini adalah jenis replikasi basis data yang lebih gagal. Paling sering opsi ini digunakan. Dalam konfigurasi ini, Anda akan selalu memiliki server cadangan dengan data terbaru, dan jika gagal pada server Slave, informasi di server Master tidak akan hilang. Anda juga dapat mendistribusikan beban pada database untuk proyek Anda, sehingga aplikasi membaca dari server Slave, dan data direkam hanya melalui server Master. Dengan cara ini Anda meminimalkan respons basis data.

Ketika mengkonfigurasi replika database MariaDB sebagai master + slave, master server (master1) dikonfigurasi seperti dijelaskan di atas.

Kami lolos ke server slave. Tambahkan baris ke my.cnf:

#replikasi
server-id = 2
report_host = slave2
log_bin = / var / lib / mysql / mariadb-bin
log_bin_index = /var/lib/mysql/mariadb-bin.index
relay_log = / var / lib / mysql / relay-bin
relay_log_index = /var/lib/mysql/relay-bin.index

Mulai ulang mariadb. Di server pertama kami mengambil data bin_log.

MariaDB [(tidak ada)]> tampilkan status master;

+--------------------+----------+--------------+------------------+ | File | Posisi | Binlog_Do_DB | Binlog_Ignore_DB | + -------------------- + ---------- + -------------- + - ---------------- + | mariadb-bin.000001 | 664 | | | + -------------------- + ---------- + -------------- + - ---------------- + 1 baris dalam set (0,000 detik)

Pada server slave di konsol mysql, lakukan hal berikut:

MariaDB [(tidak ada)]> STOP SLAVE;

Kueri OK, 0 baris terpengaruh, 1 peringatan (0,000 detik)

MariaDB [(tidak ada)]> GANTI MASTER KE MASTER_HOST = "IP_master", MASTER_USER = "test_master", MASTER_PASSWORD = "test_master", MASTER_LOG_FILE = "mariadb-bin.000001", MASTER_LOG_POS = 664;

Kueri OK, 0 baris terpengaruh (0,014 dtk)

MariaDB [(tidak ada)]> MULAI BUDAK;

Saat menyiapkan replikasi untuk database MariDB yang ada, sebelum memulai replikasi, Anda harus meletakkan database dalam mode baca sehingga file binlog tidak diperbarui.

SET GLOBAL read_only = ON;

Pada saat yang sama, Anda juga perlu membuat database dump dan menggunakannya untuk memuat data awal ke MariaDВ pada server slave.

Periksa Status Budak: TAMPILKAN STATUS BUDAK \ G;

Buat database tentang Master:

MariaDB [(tidak ada)]> buat database master_hello;

Kueri OK, 1 baris terpengaruh (0,001 dtk)

Kami memeriksa apakah database itu dibuat di server Slave juga:

MariaDB [(tidak ada)]> tampilkan basis data;

+--------------------+ | Database | + -------------------- + | information_schema | | master_hello | | master_test | | mysql | | performance_schema | | tes | + -------------------- + 6 baris dalam set (0,001 detik) 

Mari kita buat basis data tentang Budak dan periksa apakah datanya ditransfer ke Master kita.

Seperti yang Anda lihat, kami menciptakan basis, dan itu ada di Slave. Periksa apakah dia muncul di Master. Dia tidak ada di sana. Replikasi dari slave ke master tidak berjalan.

Artinya, replikasi MariaDB hanya bekerja satu arah. Mari kita lakukan pemeriksaan lain dengan menghapus database master_hello dari server Slave:

Dan periksa untuk melihat apakah dia pensiun di server master:

Seperti yang kita lihat, semuanya sudah beres dan alasnya sudah ada.

P.S. Saat membuat replika, Anda mungkin menemukan beberapa jebakan, yang paling umum adalah firewall. Secara default, Centos 7 memiliki firewalld yang diinstal, yang memiliki port 3306 ditutup, yang digunakan MariaDB. Anda dapat membuka port ini melalui iptables atau menonaktifkan firewall Anda (opsi buruk).

Secara default, dalam konfigurasi my.cnf, parameter bind-address menentukan alamat IP di mana koneksi ke database diharapkan (bind-address = 127.0.0.1) Untuk memperbolehkan koneksi lokal dan eksternal, Anda perlu membatalkan komentar pada baris ini dan menambahkan aturan iptables yang memungkinkan koneksi dari alamat IP master / slave server port 3306.

iptables -I INPUT -p tcp -s ip_address_slave_server --port 3306 -j ACCEPT
iptables -I INPUT -p tcp --port 3306 -j DROP

Selama pengaturan awal, saya mengalami masalah seperti itu dan mudah dideteksi. Jika Anda menjalankan pemeriksaan status SlaveTAMPILKAN STATUS BUDAK \ G;", Anda akan melihat kesalahan:

Sebagai kesimpulan, saya ingin mengatakan bahwa Anda dapat menambahkan beberapa parameter ke konfigurasi blok #replikasi di file my.cnf. Di bawah ini saya akan memberikan contoh dan deskripsi singkat tentang parameter yang kami tentukan, serta contoh fungsi lainnya yang berguna dalam mengatur replikasi.

server-id = 1 - tentukan ID server, biasanya mulai dengan 1, tetapi Anda dapat menggunakan nomor apa pun, yang utama adalah bahwa itu tidak bersamaan dengan server lain yang akan terlibat dalam replikasi.

report_host = master - biasanya nama host dari server terdaftar, Anda dapat menentukan alamat IP

log_bin = / var / lib / mysql / mariadb-bin - jalur untuk memperbarui log

log_bin_index = /var/lib/mysql/mariadb-bin.index - memungkinkan Anda untuk mengetahui log mana yang saat ini aktif dan mana yang sebelumnya digunakan.

relay_log = / var / lib / mysql / relay-bin

relay_log_index = /var/lib/mysql/relay-bin.index - log replikasi sendiri

Opsi apa lagi yang bisa saya gunakan? Jika Anda perlu mengkonfigurasi replika hanya untuk database tertentu atau beberapa, tambahkan fungsi:

replicate-do-db = dbname - jika Anda memerlukan beberapa database, daftarkan dengan koma.

Pengecualian database apa pun dari replikasi:

binlog-abaikan-db = dbname

Database layanan, seperti:

information_schema, mysql, dan performance_schema

Waktu penyimpanan bin_log:

expire_logs_days = 10 - di mana 10 adalah jumlah hari dimana log akan disimpan.

Selain itu, jika data dari server Master tidak ditulis dalam database dengan nama yang sama, ini juga dapat dikonfigurasi dalam file konfigurasi:

replicate-rewrite-db = dbmaster-> dbname

Itu semua pengaturan kami sudah selesai. Saya pikir dengan bantuan artikel ini Anda dapat dengan mudah mengkonfigurasi replikasi database MariaDB di kedua mode Master + Master dan Master + Slave.