Replikasi Master-Master MariaDB + Nginx Reverse Proxy untuk Database

List server:
- Nginx - 192.168.2.3
 - MariaDB 1 - 192.168.2.11
 - MariaDB 2 - 192.168.3.11
 - OS Ubuntu 22.04
 
Untuk instalasi MariaDB dan Nginx bisa dilihat pada tautan berikut:
- https://www.server-world.info/en/note?os=Ubuntu_22.04&p=nginx&f=1
 - https://www.server-world.info/en/note?os=Ubuntu_22.04&p=mariadb&f=1
 
Konfigurasi MariaDB
Server 1 192.168.2.11
vim /etc/mysql/mariadb.conf.d/50-server.cnf
 
# ubah IP bind-address
bind-address = 192.168.3.11
 
# uncomment pada baris server-id
server-id = 1
 
# uncomment pada baris log_bin
log_bin = /var/log/mysql/mysql-bin.log 	
Server 2 192.168.3.11
vim /etc/mysql/mariadb.conf.d/50-server.cnf
 
# ubah IP bind-address
bind-address = 192.168.2.11
 
# uncomment pada baris server-id
server-id = 2
 
# uncomment pada baris log_bin
log_bin = /var/log/mysql/mysql-bin.log 	
Setelah itu restart mariadb di kedua server.
systemctl restart mariadb
Buat user replikasi
Server 1 192.168.2.11
# masuk ke console mysql
mysql -u root -p
# berikan akses untuk server 2
GRANT REPLICATION SLAVE ON *.* TO 'replikasi'@'192.168.3.11' IDENTIFIED BY 'passwordkuat';
FLUSH PRIVILEGES;
Server 2 192.168.3.11
# masuk ke console mysql
mysql -u root -p
# berikan akses untuk server 1
GRANT REPLICATION SLAVE ON *.* TO 'replikasi'@'192.168.2.11' IDENTIFIED BY 'passwordkuat';
FLUSH PRIVILEGES;
Konfigurasi Slave
Status Master Server 1
SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 |      564 |              |                  |
+------------------+----------+--------------+------------------+	
Status Master Server 2
SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 |      564 |              |                  |
+------------------+----------+--------------+------------------+	
Server 1
Buat koneksi ke Server 2
CHANGE MASTER TO
MASTER_HOST='192.168.3.11',
MASTER_USER='replikasi',
MASTER_PASSWORD='passwordkuat',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=564; 
Jalankan slave:
START SLAVE;
Cek status apakah sudah berhasil login ke Server 2
SHOW SLAVE STATUS \G
Server 2
Buat koneksi ke Server 1
CHANGE MASTER TO
MASTER_HOST='192.168.2.11',
MASTER_USER='replikasi',
MASTER_PASSWORD='passwordkuat',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=564; 
Jalankan slave:
START SLAVE;
Cek status apakah sudah berhasil login ke Server 1
SHOW SLAVE STATUS \G
Cara test
- Pada Server 1 buat database baru.
 - Pada Server 2 cek database apakah database yang dibuat pada Server 1 muncul di Server 2.
 - Lakukan juga sebaliknya.
 
Nginx Reverse Proxy untuk Database
Untuk menggunakan reverse proxy ini cukup buat konfigurasi dibawah ini dan diletakan di /etc/nginx.conf diluar parameter http {.
stream {
 upstream db {
  server 192.168.2.11:3306;
  server 192.168.3.11:3306;
 }
 server {
  listen 3306;
  proxy_pass db;
  proxy_connect_timeout 1s;
 }
}
Lihat gambar dibawah:

Cek port database dengan perintah netstat -tulpn | grep nginx:

Untuk penggunaan database, berikan priveleges pada user database ke IP Address dari Server Nginx Reverse Proxy.

Selesai.