[MARIADB] GALERA 3 NODE - fourslickz/notes GitHub Wiki
=========================
Node1 (Production)
=========================
[mysqld]
bind-address=0.0.0.0
default_storage_engine=InnoDB
binlog_format=ROW
innodb_autoinc_lock_mode=2
query_cache_size=0
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_name="galera_cluster"
wsrep_cluster_address="gcomm://10.2.0.101,10.2.0.102,10.2.0.103"
# Node specific
wsrep_node_name="node1"
wsrep_node_address="10.2.0.101"
wsrep_sst_method=rsync
=========================
Node2
=========================
[mysqld]
bind-address=0.0.0.0
default_storage_engine=InnoDB
binlog_format=ROW
innodb_autoinc_lock_mode=2
query_cache_size=0
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_name="galera_cluster"
wsrep_cluster_address="gcomm://10.2.0.101,10.2.0.102,10.2.0.103"
# Node specific
wsrep_node_name="node2"
wsrep_node_address="10.2.0.102"
wsrep_sst_method=rsync
=========================
Node3
=========================
[mysqld]
bind-address=0.0.0.0
default_storage_engine=InnoDB
binlog_format=ROW
innodb_autoinc_lock_mode=2
query_cache_size=0
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_name="galera_cluster"
wsrep_cluster_address="gcomm://10.2.0.101,10.2.0.102,10.2.0.103"
# Node specific
wsrep_node_name="node3"
wsrep_node_address="10.2.0.103"
wsrep_sst_method=rsync
SCRIPT
#!/bin/bash
# ========================================
# Script Deploy MariaDB Galera 3 Node
# NODE_ID = 1,2,3
# ========================================
NODE_ID=$1 # jalankan: ./deploy_galera.sh 1
IP_NODE1="10.2.0.101"
IP_NODE2="10.2.0.102"
IP_NODE3="10.2.0.103"
CLUSTER_NAME="galera_cluster"
if [ -z "$NODE_ID" ](/fourslickz/notes/wiki/--z-"$NODE_ID"-); then
echo "Usage: $0 <NODE_ID: 1|2|3>"
exit 1
fi
# Tentukan node-specific
case $NODE_ID in
1)
NODE_NAME="node1"
NODE_IP="$IP_NODE1"
;;
2)
NODE_NAME="node2"
NODE_IP="$IP_NODE2"
;;
3)
NODE_NAME="node3"
NODE_IP="$IP_NODE3"
;;
*)
echo "NODE_ID harus 1,2, atau 3"
exit 1
;;
esac
# 1️⃣ Install MariaDB + Galera
yum install -y MariaDB-server MariaDB-client galera rsync haproxy
systemctl enable mariadb
systemctl stop mariadb
# 2️⃣ Konfigurasi my.cnf
cat > /etc/my.cnf.d/galera.cnf <<EOL
[mysqld]
bind-address=0.0.0.0
default_storage_engine=InnoDB
binlog_format=ROW
innodb_autoinc_lock_mode=2
query_cache_size=0
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_name="$CLUSTER_NAME"
wsrep_cluster_address="gcomm://$IP_NODE1,$IP_NODE2,$IP_NODE3"
wsrep_node_name="$NODE_NAME"
wsrep_node_address="$NODE_IP"
wsrep_sst_method=rsync
EOL
# 3️⃣ Bootstrap atau start
if [ "$NODE_ID" == "1" ](/fourslickz/notes/wiki/-"$NODE_ID"-==-"1"-); then
echo "Bootstrapping Node1..."
galera_new_cluster
else
echo "Starting Node$NODE_ID..."
systemctl start mariadb
fi
# 4️⃣ Setup HAProxy (optional)
cat > /etc/haproxy/haproxy.cfg <<EOL
global
log /dev/log local0
maxconn 2000
defaults
log global
mode tcp
timeout connect 5s
timeout client 50s
timeout server 50s
frontend mysql_front
bind *:3306
default_backend mysql_back
backend mysql_back
balance roundrobin
server node1 $IP_NODE1:3306 check
server node2 $IP_NODE2:3306 check
server node3 $IP_NODE3:3306 check
EOL
systemctl enable haproxy
systemctl restart haproxy
# 5️⃣ Firewall / IPtables (optional)
iptables -t nat -F PREROUTING
iptables -t nat -F POSTROUTING
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 3306 -j DNAT --to-destination $IP_NODE1:3306
iptables -t nat -A POSTROUTING -s 10.2.0.0/24 -o eth0 -j MASQUERADE
service iptables save
echo "Node$NODE_ID deployment selesai. Cek cluster status:"
echo "Login ke MariaDB dan jalankan: SHOW STATUS LIKE 'wsrep%';"