Cara Replikasi MySQL Master To Master Di Centos7
Suatu saat nanti, mungkin diantara pembaca tulisan ini akan membutuhkan yang namanya Replikasi database MySQL. Fungsi dari replikasi ini salah satunya untuk high availability karena database akan ter-replikasi ke dua server database yang berbeda.
Misal, kita asumsikan terdapat dua buah server MySQL dan pastikan MySQL sudah terinstall pada masing-masing server, jika belum coba baca tulisan ini Cara Install Nginx, Php7, MySQL 5.6, PhpMyAdmin Di Centos 7 :
DB-server1 : 192.168.84.100
DB-server2 : 192.168.81.100
jadi, jika kedua database yang berada pada server yang berbeda tersebut direplikasi, maka apapun yang terjadi pada table di DB-server1
, misal kita melakukan insert data ke DB-server1
maka secara otomatis data tersebut akan ada di server DB-server2
, syncronize dan tercopy secara otomatis. Begitupun sebaliknya, jika ada perubahan data pada table database di server DB-server2
maka akan terupdate juga di server DB-server1
.
Namun, berbeda dengan replikasi MySQL Master/Slave, setiap perubahan di server master maka akan tercopy ke server slave, namun apapun yang terjadi pada table di server slave tidak akan tercopy ke server master. Jadi slave server hanya menerima data saja.
Perbedaan antara replikasi master/master dan master/slave sebenarnya adalah jika replikasi master/master maka kedua service slave pada masing-masing server berjalan, jadi keduanya bertindak sebagai master dan slave. Jika fungsi slave adalah menerima data dari master, maka jika keduanya bertindak sebagai master dan slave maka secara otomatis keduanya akan saling kirim/terima data, logis tidak? namun jika master/slave hanya pada server slave saja service slave berjalan, jadi yang slave hanya menerima data dari master. Lebih jelasnya bisa lihat contoh slave status dibawah ini:
$ [root@DB server1 ~]# mysql> SHOW SLAVE STATUS\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.84.100
Master_User: dbuser_replica
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000008
Read_Master_Log_Pos: 771248
Relay_Log_File: mysql-relay-log.000005
Relay_Log_Pos: 771411
Relay_Master_Log_File: mysql-bin.000008
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB: dbny4
$ [root@DB server2 ~]# mysql> SHOW SLAVE STATUS\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.81.100
Master_User: dbuser_replica
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000003
Read_Master_Log_Pos: 120
Relay_Log_File: mysql-relay-log.000005
Relay_Log_Pos: 283
Relay_Master_Log_File: mysql-bin.000003
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB: dbny4
Ok, sepertinya cukup mengenai penjelasan Master/Master dan Master/Slave. Pada tulisan ini yang akan dipraktekan adalah konfigurasi replikasi mysql master to master atau master/master.
Konfigurasi pada DB-server1
Masuk ke server DB-server1 lalu edit file /etc/my.cnf
$ vi /etc/my.cnf
kemudian tambahkan seperti dibawah ini:
server-id=1
log-bin="mysql-bin"
binlog-do-db=dbny4
replicate-do-db=dbny4
relay-log="mysql-relay-log"
jika sudah, simpan dan restart service mysql.
$ systemctl restart mysql
Penjelasan
server-id=1
: kita asumsikan bawah server DB-server1 server id nya adalah 1 atau bisa diubah sesuai keinginan, asalkan tidak sama dengan server satunya lagi.log-bin="mysql-bin"
: ini untuk mysql log bin, biarkan seperti ini saja.binlog-do-db=dbny4
: diubah sesuai dengan nama database.replicate-do-db=dbny4
: ganti dengan nama database yang akan di replikasi.relay-log="mysql-relay-log"
: biarkan seperti ini pada relay log.
selanjutnya masuk ke console MySQL (masih di server DB-server1) dengan cara ketik mysql
lalu enter, seperti dibawah ini:
$ mysql
mysql>
lalu cek master status nya yang mana informasi dari master status ini yang akan digunakan untuk proses replikasi:
mysql> show master status;
+------------------+----------+----------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+----------------+------------------+-------------------+
| mysql-bin.000008 | 886372 | m4n4g3r3_dbny4 | | |
+------------------+----------+----------------+------------------+-------------------+
1 row in set (0,00 sec)
Ok, konfigurasi pada server DB-server 1 kita tahan dulu sampai disini. Lanjut ke konfigurasi server DB-server2.
Konfigurasi server DB-server2
Untuk konfigurasi server DB-server2 ini sama seperti server DB-server1, yang perlu diubah adalah server-id
pada file /etc/my.cnf
menjadi seperti ini:
server-id=2
log-bin="mysql-bin"
binlog-do-db=dbny4
replicate-do-db=dbny4
relay-log="mysql-relay-log"
kita bisa lihat, server-id
disini kita ubah menjadi angka 2. Jika sudah simpan perubahan pada file /etc/my.cnf
tersebut dan restart service mysql nya.
Selanjutnya masuk ke console mysql server DB-server2, lalu jalankan show master status;
.
mysql> show master status;
+------------------+----------+----------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+----------------+------------------+-------------------+
| mysql-bin.000003 | 120 | dbny4 | | |
+------------------+----------+----------------+------------------+-------------------+
1 row in set (0,00 sec)
Sekarang, balik lagi ke server DB-server1
dan masuk ke mysql console nya. Lalu jalan perintah mysql seperti dibawah ini:
mysql> create user 'dbuser_replica'@'%' identified by 'passwordnya'; mysql> GRANT REPLICATION SLAVE ON *.* TO 'dbuser_replica'@'%';
ubah dbuser_replica
sesuai keiginan. User ini nantinya yang akan digunakan sebagai user untuk replikasi. Sesuaikan juga passwordnya
sesuai dengan password yang di inginkan.
Jika sudah, lakukan hal yang sama di server DB-server2
. Pastikan sama baik user dan passwordnya.
Selanjutnya, kembali ke server DB-server1
, lalu jalankan perintah dibawah ini:
CHANGE MASTER TO MASTER_HOST = '192.168.81.100',MASTER_USER = 'dbuser_replica', MASTER_PASSWORD = 'passwordnya', MASTER_LOG_FILE = 'mysql-bin.000003', MASTER_LOG_POS = 120;
Isi MASTER_HOST
dengan alamat IP DB-server2
. Ubah MASTER_LOG_FILE = 'mysql-bin.000003'
dan MASTER_LOG_POS = 120
sesuai dengan informasi yang tampil pada show master status;
pada server DB-server2
Lakukan hal yang sama pada server DB-server2
namun ubah pada MASTER_HOST
dengan IP DB-server1
, dan ubah MASTER_LOG_FILE
, MASTER_LOG_POS
sesuai dengan show master status;
pada server DB-server1
.
Jika semua hal diatas sudah selesai dilakukan. Jalankan perintah ini di kedua server:
mysql> start slave;
Selesai.
Jika konfigurasi berjalan lancar dan berhasil, maka jika dicek dengan perintah SHOW SLAVE STATUS\G;
pada masing-masing server akan tampil kira-kira seperti ini:
DB-server1
mysql> SHOW SLAVE STATUS\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.81.100
Master_User: dbuser_replica
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000003
Read_Master_Log_Pos: 896649
Relay_Log_File: mysql-relay-log.000005
Relay_Log_Pos: 896812
Relay_Master_Log_File: mysql-bin.000008
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB: dbny4
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 896649
Relay_Log_Space: 906181
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
Master_UUID: 1099217b-cb2b-11ea-9504-0025907133a4
Master_Info_File: /var/lib/mysql/master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position: 0
1 row in set (0,00 sec)
ERROR:
No query specified
DB-server2
mysql> SHOW SLAVE STATUS\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.84.100
Master_User: dbuser_replica
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000008
Read_Master_Log_Pos: 896649
Relay_Log_File: mysql-relay-log.000005
Relay_Log_Pos: 896812
Relay_Master_Log_File: mysql-bin.000008
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB: dbny4
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 896649
Relay_Log_Space: 906181
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
Master_UUID: 1099217b-cb2b-11ea-9504-0025907133a4
Master_Info_File: /var/lib/mysql/master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position: 0
1 row in set (0,00 sec)
ERROR:
No query specified
Bagaimana mengujicoba bahwa replikasi nya benar-benar berhasil? cara mudahnya misal dengan melakukan insert data ke table di database server DB-server1
lalu cek apakah ada di table yang sama di server DB-server2
, lakukan juga hal sebaliknya.
=========================================================================
Replikasi master-slave MySql & Keepalived dengan IP virtual
Replikasi MySQL adalah proses yang memungkinkan Anda menyalin data secara otomatis dari satu server basis data ke server lainnya.
Dalam artikel ini, saya akan menunjukkan cara mengonfigurasi replikasi master-slave dan juga menggunakan layanan keepalived untuk toleransi kesalahan atau failover otomatis.
Prasyarat
Kami telah menggunakan dua server Centos 7.
Server dalam contoh ini memiliki IP berikut:
Utama: 192.168.7.130
Budak: 192.168.7.132
Langkah 1: Instal MySql
Instal MySQL di kedua server. Di sini saya telah menginstal MySQL 8.0.26 di kedua server centos.
Setelah instalasi selesai, mulai layanan MySQL dan aktifkan untuk memulai secara otomatis saat boot dengan:
sudo systemctl aktifkan mysql
sudo systemctl mulai mysqldd
Saat server MySQL dimulai untuk pertama kalinya, kata sandi sementara dibuat untuk pengguna root MySQL. Untuk menemukan kata sandi, gunakan perintah grep berikut:
sudo grep 'kata sandi sementara' /var/log/mysqld.log
Jalankan perintah mysql_secure_installation untuk menetapkan kata sandi root baru Anda dan meningkatkan keamanan instans MySQL:
instalasi mysql_aman_
Catatan: Menonaktifkan login jarak jauh saja akan menjadi Tidak(n) jika Anda ingin login dari jarak jauh dari server lain.
Langkah 2: Konfigurasikan Master
Pertama, kita akan mengonfigurasi server MySQL utama dan membuat perubahan berikut:
- Tetapkan IP pribadi. [Anda dapat menetapkan 0.0.0.0 jika Anda ingin mengakses dari IP virtual]
- Tetapkan ID server yang unik.
- Aktifkan pencatatan biner.
Untuk melakukannya, buka file konfigurasi MySQL dan tambahkan baris berikut di bagian [mysqld]:
sudo nano /etc/my.cnf
Kemudian,
alamat-bind = 192.168.7.130/0.0.0.
server-id = 1
log_bin = mysql-bin0
Setelah selesai, mulai ulang layanan MySQL agar perubahan diterapkan
sudo systemctl mulai ulang mysqld
Langkah selanjutnya adalah membuat pengguna replikasi baru. Masuk ke server MySQL sebagai pengguna root:
Login ke MySQL terlebih dahulu, lalu:
BUAT PENGGUNA 'replika'@'%' YANG DIIDENTIFIKASI OLEH 'Datasoft1998@'
BERIKAN REPLIKASI SLAVE PADA *.* KE 'replika'@'%';
BERIKAN SEMUA HAK ISTIMEWA PADA * . * KEPADA 'replika'@'%';
UBAH PENGGUNA 'replika'@'%' YANG DIIDENTIFIKASI DENGAN mysql_native_password OLEH 'Datasoft1998@';;
Saat masih di dalam prompt MySQL, jalankan perintah berikut yang akan mencetak nama file biner dan posisinya.
TAMPILKAN STATUS MASTER\G
KELUARAN:
*************************** 1. baris ***************************
Berkas: mysql-bin.000001
Posisi: 1427
Binlog_Do_DB:
Binlog_Abaikan_DB:
Set_Gtid_yang_dieksekusi:
1 baris dalam set (0,00 detik)
Catat nama berkas, 'mysql-bin.000001' dan Posisi '1427'. Anda akan memerlukan nilai-nilai ini saat mengonfigurasi server slave. Nilai-nilai ini mungkin akan berbeda di server Anda.
Langkah 3: Konfigurasikan Slave
Kita harus menyiapkan server slave seperti yang ada di server master.
- Tetapkan IP pribadi. [Anda dapat menetapkan 0.0.0.0 jika Anda ingin mengakses dari IP virtual]
- Tetapkan ID server yang unik.
- Aktifkan pencatatan biner.
Untuk melakukannya, buka file konfigurasi MySQL dan tambahkan baris berikut di bagian [mysqld]:
sudo nano /etc/my.cnf
Kemudian,
alamat-bind = 192.168.7.132/0.0.0.
server-id = 1
log_bin = mysql-bin0
Setelah selesai, mulai ulang layanan MySQL agar perubahan diterapkan
sudo systemctl mulai ulang mysqld
Kemudian login ke MySQL dan Pertama, hentikan thread slave:
HENTIKAN BUDAK;
Kemudian,
GANTI MASTER T
HOST_UTAMA='192.168.7.130',
MASTER_USER='replika',
KATA SANDI_UTAMA='Datasoft1998@',
MASTER_LOG_FILE='mysql-bin.000001',
LOG_MASTER_POS=1427;O
Kemudian mulai slave,
MULAI BUDAK;
Semua konfigurasi telah selesai, kini Anda dapat membuat basis data dari server utama, tetapi dapat melihat pantulannya di server budak.
Ini adalah akhir dari pengaturan master-slave. Sekarang saatnya untuk tetap hidup guna memastikan toleransi kesalahan.
Langkah 2: Tetap Hidup:
Pertama, kita perlu tahu cara menjaga keepalived tetap berfungsi. Dalam pengaturan basis data Replikasi Master-Slave, ketika Master gagal, kita perlu membuat perubahan konfigurasi secara manual untuk beralih ke server berikutnya yang tersedia. Ketika ini terjadi, waktu henti diperkirakan terjadi karena failover manual akan memakan waktu.
Keepalived adalah utilitas yang menyediakan failover antarmuka. Dengan implementasi Keepalived yang baik, Anda akan dapat melakukan failover alamat IP virtual saat server induk tidak tersedia dan secara otomatis mengalihkan IP tersebut ke server siaga aktif. Hasilnya, server kedua akan menangani lalu lintas tanpa waktu henti di lingkungan produksi.
Prasyarat
Kita perlu mengonfigurasikan konfigurasi master-slave, yang telah kita lakukan sebelumnya. Dan yang kedua adalah kita perlu menyiapkan IP virtual.
Di sini kami menggunakan 3 set alamat IP pada dua server.
Server Utama – 192.168.7.130
Server Budak – 192.168.7.132
Alamat IP Virtual – 192.168.2.115
Mengonfigurasi VIP:
Tampilkan alamat ip
Dari keluaran di atas, kita dapat melihat bahwa antarmuka jaringan adalah eth0 .
Berkas konfigurasi untuk antarmuka jaringan eth0 dapat ditemukan di:
/etc/sysconfig/network-scripts.
Untuk membuat antarmuka jaringan virtual, kita perlu menyalin berkas konfigurasi master.
cd /etc/sysconfig/skrip-jaringan
jika cp-eth0 jika cp-eth0:1/
Sekarang edit file ifcfg-eth0:1 dan tambahkan IP virtual Anda di bagian IPADDR. Sebelum membuat ip virtual, periksa apakah ip virtual tersebut benar-benar ada atau tidak.
JENIS="Ethernet
PROXY_METHOD="tidak ada"
BROWSER_ONLY="tidak"
BOOTPROTO="tidak ada"
DEFROUTE="ya"
IPV4_FAILURE_FATAL="tidak"
IPV6INIT="ya"
IPV6_AUTOCONF="ya"
IPV6_DEFROUTE="ya"
IPV6_FAILURE_FATAL="tidak"
IPV6_ADDR_GEN_MODE="privasi-stabil"
NAMA="enp0s3"
UUID="b1d44459-6b90-435a-950e-9b6001cfcf1b"
PERANGKAT="enp0s3"
ONBOOT="ya"
IPADDR="192.168.2.115"
AWALAN="24"
GERBANG="192.168.40.60"
DNS1="192.168.40.60"
IPV6_PRIVACY="tidak"
ZONA=publik"
Kemudian,
systemctl memulai ulang jaringan
Menginstal KeepAlived:
sudo yum -y instal keepalived
Mari kita cadangkan file konfigurasi Keepalived default jika seandainya Anda ingin menggunakannya nanti sebagai templat atau referensi.
mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.kembali
Konfigurasikan File Konfigurasi Keepalived di Master Server
Ubah file /etc/keepalived/keepalived.conf :
skrip vrrp chk_mysql {
skrip "pidof mysqld"
selang waktu 2
berat 2
}
contoh vrrp VI_1 {
antarmuka enp0s3
negara MASTER
id_router_virtual 50
ip_src_unicast 192.168.7.130
rekan unicast {
Nomor telepon 192.168.7.132
}
prioritas 102
skrip trek {
chk_mysql
}
alamat_ip_virtual {
192.168.2.115/24 pengembang enp0s3
}
}
Konfigurasikan File Konfigurasi Keepalived di Server Slave
Ubah file /etc/keepalived/keepalived.conf :
skrip vrrp chk_mysql {
skrip "pidof mysqld"
selang waktu 2
berat 2
}
contoh vrrp VI_1 {
antarmuka eth0
status CADANGAN
id_router_virtual 50
ip_src_unicast 192.168.7.132
rekan unicast {
Nomor telepon 192.168.7.130
}
prioritas 101
skrip trek {
chk_mysql
}
alamat_ip_virtual {
192.168.2.115/24 pengembang enp0s3
}
}
Jalankan Perintah di Kedua Server
firewall-cmd --langsung --permanen --tambahkan-aturan filter ipv4 INPUT 0
--dalam-antarmuka eth0 --tujuan 224.0.0.18 --protokol vrrp -j TERIMA;
firewall-cmd --direct --permanent --add-rule filter ipv4 KELUARAN 0
--out-interface eth0 --destination 224.0.0.18 --protocol vrrp -j TERIMA;
firewall-cmd -reload;
[Pilihan terbaik adalah mematikan firewall. Leluconnya tidak penting. Oh, saya lupa memberi tahu satu hal penting, Anda perlu menonaktifkan SELINUX dari enforcing -> disabled.]
Kemudian konfigurasikan layanan Keepalived untuk memulai secara otomatis saat server dimulai:
systemctl mengaktifkan keepalive
systemctl mulai keepalivedd
Sekarang periksa status Keepalived di server Master dan Slave dengan:
layanan status tetap hidup
Itu saja, sekarang Anda telah mengonfigurasi replikasi master-slave MySQL Anda dengan keepalived
===========================================================
MySql master-slave replication & Keepalived with virtual IP
MySQL replication is a process that allows you to automatically copy data from one database server to another.
In this article, I will show how to configure master-slave replication and also use keepalived service for fault tolerance or automatic failover.
Prerequisites
We have used two Centos 7 servers.
The servers in this example have the following IPs:
Master: 192.168.7.130
Slave: 192.168.7.132
Step 1: Install MySql
Install MySQL on both servers. Here I have installed MySQL 8.0.26 on both centos servers.
Once the installation is completed, start the MySQL service and enable it to automatically start on boot with:
sudo systemctl enable mysql
sudo systemctl start mysqldd
When the MySQL server starts for the first time, a temporary password is generated for the MySQL root user. To find the password use the following grep command:
sudo grep 'temporary password' /var/log/mysqld.log
Run the mysql_secure_installation command to set your new root password and improve the security of the MySQL instance:
mysql_secure_installation
Note: Just disabling remote login will be No(n) if you want to log in remotely from other servers.
Step 2: Configure Master
First, we will configure the master MySQL server and make the following changes:
- Set the private IP. [you can set 0.0.0.0 if you want to access from virtual ip]
- Set a unique server ID.
- Enable binary logging.
To do so open the MySQL configuration file and add the following lines in the [mysqld] section:
sudo nano /etc/my.cnf
then,
bind-address = 192.168.7.130/0.0.0.
server-id = 1
log_bin = mysql-bin0
Once done, restart the MySQL service for changes to take effect
sudo systemctl restart mysqld
The next step is to create a new replication user. Log in to the MySQL server as the root user:
Login to MySQL first and then:
CREATE USER 'replica'@'%' IDENTIFIED BY 'Datasoft1998@'
GRANT REPLICATION SLAVE ON *.* TO 'replica'@'%';
GRANT ALL PRIVILEGES ON * . * TO 'replica'@'%';
ALTER USER 'replica'@'%' IDENTIFIED WITH mysql_native_password BY 'Datasoft1998@';;
While still inside the MySQL prompt, execute the following command that will print the binary filename and position.
SHOW MASTER STATUS\G
OUTPUT:
*************************** 1. row ***************************
File: mysql-bin.000001
Position: 1427
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)
Take note of the file name, ‘mysql-bin.000001’ and Position ‘1427’. You’ll need these values when configuring the slave server. These values will probably be different on your server.
Step 3: Configure Slave
We have to set up the slave server as the master has.
- Set the private IP. [you can set 0.0.0.0 if you want to access from virtual ip]
- Set a unique server ID.
- Enable binary logging.
To do so open the MySQL configuration file and add the following lines in the [mysqld] section:
sudo nano /etc/my.cnf
then,
bind-address = 192.168.7.132/0.0.0.
server-id = 1
log_bin = mysql-bin0
Once done, restart the MySQL service for changes to take effect
sudo systemctl restart mysqld
Then login to the MySQL and First, stop the slave threads:
STOP SLAVE;
then,
CHANGE MASTER T
MASTER_HOST='192.168.7.130',
MASTER_USER='replica',
MASTER_PASSWORD='Datasoft1998@',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=1427;O
Then start the slave,
START SLAVE;
All configuration is done, now you can create a database from the master server, but can see the reflection on the slave server.
This is the end of the master-slave setup. Now it's time to stay alive to ensure fault tolerance.
Step 2: Keep Alived:
First, we need to know how to keep keepalived work. In the Master-Slave Replication database setup, when the Master fails, we need to manually make the configuration changes in order to fail over to the next available server. When this happens, downtime is expected since manual failover will take time.
Keepalived is a utility that provides interface failover. With a good implementation of Keepalived, you will be able to failover a virtual IP address when the master server becomes unavailable and automatically switches that IP over to the hot standby server. As a result, the second server will handle the traffic without any downtime in the production environment.
Prerequisites
We need to configure the master-slave configuration, which we have done already. And the second one is we need to set up a virtual IP.
Here we use 3 sets of IP addresses on two servers.
Master Server – 192.168.7.130
Slave Server – 192.168.7.132
Virtual IP Address – 192.168.2.115
Configuring VIP:
ip addr show
From the above output, we can see that the network interface is eth0.
The configuration file for the eth0 network interface can be found in:
/etc/sysconfig/network-scripts.
In order to create a virtual network interface, we need to copy the master configuration file.
cd /etc/sysconfig/network-scripts
cp ifcfg-eth0 ifcfg-eth0:1/
Now edit the ifcfg-eth0:1 file and add your virtual IP in the IPADDR section. Before creating a virtual ip, check that physically it exists or not.
TYPE="Ethernet
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="enp0s3"
UUID="b1d44459-6b90-435a-950e-9b6001cfcf1b"
DEVICE="enp0s3"
ONBOOT="yes"
IPADDR="192.168.2.115"
PREFIX="24"
GATEWAY="192.168.40.60"
DNS1="192.168.40.60"
IPV6_PRIVACY="no"
ZONE=public"
then,
systemctl restart network
Installing KeepAlived:
sudo yum -y install keepalived
Let’s back up the default Keepalived configuration file if in case you’d like to use it later as a template or for reference.
mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.back
Configure Keepalived Config File in Master Server
Modify /etc/keepalived/keepalived.conf file:
vrrp_script chk_mysql {
script "pidof mysqld"
interval 2
weight 2
}
vrrp_instance VI_1 {
interface enp0s3
state MASTER
virtual_router_id 50
unicast_src_ip 192.168.7.130
unicast_peer {
192.168.7.132
}
priority 102
track_script {
chk_mysql
}
virtual_ipaddress {
192.168.2.115/24 dev enp0s3
}
}
Configure Keepalived config File in Slave Server
Modify /etc/keepalived/keepalived.conf file:
vrrp_script chk_mysql {
script "pidof mysqld"
interval 2
weight 2
}
vrrp_instance VI_1 {
interface eth0
state BACKUP
virtual_router_id 50
unicast_src_ip 192.168.7.132
unicast_peer {
192.168.7.130
}
priority 101
track_script {
chk_mysql
}
virtual_ipaddress {
192.168.2.115/24 dev enp0s3
}
}
Run Command on Both Servers
firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0
--in-interface eth0 --destination 224.0.0.18 --protocol vrrp -j ACCEPT;
firewall-cmd --direct --permanent --add-rule ipv4 filter OUTPUT 0
--out-interface eth0 --destination 224.0.0.18 --protocol vrrp -j ACCEPT;
firewall-cmd -reload;
[Best option will be to turn off the firewall. Jokes apart. Oh I have forgotten to tell an important thing, you need to disable SELINUX from enforcing -> disabled.]
Then configure the Keepalived service to automatically start at the start of the server:
systemctl enable keepalive
systemctl start keepalivedd
Now check the status of the Keepalived on Master and Slave servers by:
service keepalived status
That's all, now you have configured your MySQL master-slave replication with keepalived.
Tidak ada komentar:
Posting Komentar