keepalived+HAProxy+MySQL双主实验
node1( HAProxy1) :192.168.184.10
node2( HAProxy2) :192.168.184.20
node3( MySQL1) :192.168.184.30
node4( MySQL2) :192.168.184.40
虚拟IP vip:192.168.184.100
在node3执行以下脚本:
systemctl stop firewalld
setenforce 0
yum install mariadb-server -y
sed -i '/^\[mysqld\]$/a\binlog-ignore = information_schema' /etc/my.cnf.d/server.cnf
sed -i '/^\[mysqld\]$/a\binlog-ignore = mysql' /etc/my.cnf.d/server.cnf
sed -i '/^\[mysqld\]$/a\skip-name-resolve' /etc/my.cnf.d/server.cnf
sed -i '/^\[mysqld\]$/a\auto-increment-increment = 1' /etc/my.cnf.d/server.cnf
sed -i '/^\[mysqld\]$/a\log-bin = mysql-bin' /etc/my.cnf.d/server.cnf
sed -i '/^\[mysqld\]$/a\auto_increment_offset = 1' /etc/my.cnf.d/server.cnf
sed -i '/^\[mysqld\]$/a\server-id = 1' /etc/my.cnf.d/server.cnf
systemctl restart mariadb
mysql -uroot -e "grant replication slave on *.* to repuser@'192.168.184.30' identified by '000000';"
在node4执行以下脚本:
systemctl stop firewalld
setenforce 0
yum install mariadb-server -y
sed -i '/^\[mysqld\]$/a\binlog-ignore = information_schema' /etc/my.cnf.d/server.cnf
sed -i '/^\[mysqld\]$/a\binlog-ignore = mysql' /etc/my.cnf.d/server.cnf
sed -i '/^\[mysqld\]$/a\skip-name-resolve' /etc/my.cnf.d/server.cnf
sed -i '/^\[mysqld\]$/a\auto-increment-increment = 2' /etc/my.cnf.d/server.cnf
sed -i '/^\[mysqld\]$/a\log-bin = mysql-bin' /etc/my.cnf.d/server.cnf
sed -i '/^\[mysqld\]$/a\auto_increment_offset = 2' /etc/my.cnf.d/server.cnf
sed -i '/^\[mysqld\]$/a\server-id = 2' /etc/my.cnf.d/server.cnf
systemctl restart mariadb
mysql -uroot -e "grant replication slave on *.* to repuser@'192.168.184.30' identified by '000000';"
查询node3节点master状态:
MariaDB [ ( none) ] > show master status;
+------------------+----------+--------------+--------------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+--------------------------+
| mysql-bin.000001 | 401 | | mysql,information_schema |
+------------------+----------+--------------+--------------------------+
查询node4节点master状态
MariaDB [ ( none) ] > show master status;
+------------------+----------+--------------+--------------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+--------------------------+
| mysql-bin.000001 | 245 | | mysql,information_schema |
+------------------+----------+--------------+--------------------------+
在node3节点执行连接命令:
MariaDB [ ( none) ] > change master to master_host = "192.168.184.40" ,master_port= 3306 ,master_user= "repuser" ,master_password= "000000" ,master_log_file= "mysql-bin.000001" ,master_log_pos= 245 ;
MariaDB [ mysql] > start slave;
在node4节点执行连接命令:
MariaDB [ ( none) ] > change master to master_host = "192.168.184.30" ,master_port= 3306 ,master_user= "repuser" ,master_password= "000000" ,master_log_file= "mysql-bin.000001" ,master_log_pos= 401 ;
MariaDB [ mysql] > start slave;
查看从节点状态: show slave status \ G; 观察IO和SQL线程是否为YES
MariaDB [ ( none) ] > show slave status \ G; Slave_IO_Running: YesSlave_SQL_Running: Yes
测试:
1 .在node3上创建db1数据库,在node4上查看是否有db1
2 .在node4上创建db2数据库,在node3上查看是否有db2
3 .最终要实现node3和node4上保持数据同步
在node1和node2上执行以下脚本:
yum install haproxy ‐y
mv /etc/haproxy/haproxy.cfg{ ,.bak}
cat > /etc/haproxy/haproxy.cfg << EOF
globallog 127.0.0.1 local2chroot /var/lib/haproxypidfile /var/run/haproxy.pidmaxconn 4000user haproxygroup haproxydaemonstats socket /var/lib/haproxy/stats
listen mysql_proxybind 0.0.0.0:3306mode tcpbalance sourceserver mysqldb1 192.168.184.30:3306 weight 1 checkserver mysqldb2 192.168.184.40:3306 weight 2 check
listen statsmode httpbind 0.0.0.0:8080stats enablestats uri /dbsstats realm haproxy\ statisticsstats auth admin:admin
EOF
systemctl start haproxy
node1上执行以下脚本:
yum install keepalived ‐y
mv /etc/keepalived/keepalived.conf{ ,.bak}
cat > /etc/keepalived/keepalived.conf << EOF
! Configuration File for keepalived
global_defs {router_id node1
}
vrrp_script chk_http_port {script "/usr/local/src/check_proxy_pid.sh"interval 1weight ‐2
}
vrrp_instance VI_1 {state MASTERinterface ens33virtual_router_id 10priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}track_script {chk_http_port}virtual_ipaddress {192.168.184.100}
}
EOF
systemctl start keepalived
node2上执行以下脚本:
yum install keepalived ‐y
mv /etc/keepalived/keepalived.conf{ ,.bak}
cat > /etc/keepalived/keepalived.conf << EOF
! Configuration File for keepalived
global_defs {router_id node2
}
vrrp_instance VI_1 {state MASTERinterface ens33virtual_router_id 10priority 99advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.10.100}
}
EOF
systemctl start keepalived
[ root@node1 src]
A = ` ps -C haproxy --no-header | wc -l `
if [ $A -eq 0 ] ; then
exit 1
else
exit 0
fi