mysql结合keepalived主从复制

主机				Mysql版本	系统			Ip				Vip
DB0主服务器(读写)	5.5.60		CentOS 7		192.168.11.140	192.168.11.185
DB1从服务器(备用)	5.5.60		CentOS 7		192.168.11.141	

该方案同时只有一个节点对外工作
1、修改mysql配置文件/etc/my.cnf
在[mysql]下加上

server-id=1	# 主服务器DB0,从服务器DB1这里设置为2
log-bin=mysql-bin	# 开启二进制日志
relay-log=mysql-relay-bin	#中继日志
replicate-wild-ignore-table=mysql.%	# 复制时过滤mysql.%名称的表
replicate-wild-ignore-table=test.%
replicate-wild-ignore-table=log.%
replicate-wild-ignore-table=information_schema.%
replicate-wild-ignore-table=performance_schema.%

2、授权
在DB0主服务器的mysql里

mysql> grant replication slave on *.* to 'root'@'192.168.11.141' identified by 'password';	#password为自己数据库的密码

mysql结合keepalived主从复制
据此,在从服务器DB1的mysql里将DB0的设置为自己的主服务器。

mysql> change master to \
		-> master_host='192.168.11.140',
		-> master_user='root',
		-> master_password='password',	# password为自己数据库的密码
		-> master_log_file='mysql-bin.000002',
		-> master_log_pos='245';

查看从服务器DB1的状态:
mysql结合keepalived主从复制

从服务器DB1按照上面的方法再做一遍,把DB0变成自己的从服务器,则双方互为主从。
最后在DB0上执行:

mysql> start slave;

3、配置keepalived
DB1从服务器上的/etc/keepalived/keepalived.conf
mysql结合keepalived主从复制
而DB0的主服务器上,把上面的priority 改为100,且在adver_int 2下面加上nopreempt

脚本check_slave_p1双方各一份,用于检测mysql复制的状态。放在/etc/keepalived/mysqlcheck/check_slave.p1
mysql结合keepalived主从复制
重启keepalived即可。systemctl restart keepalived

4、测试数据同步
用另外一台机器登陆vip的mysql,需要DB0和DB1对这台机器授权,让它可以CURD。
mysql结合keepalived主从复制
对模式school的表student插入数据:

mysql> insert into student values("jack",15,"m"),("lili",18,"f");

在DB0查看:
mysql结合keepalived主从复制

在DB1查看:
mysql结合keepalived主从复制
可以看出,数据已经同步。

5、测试keepalived故障切换
远程以vip地址登陆mysql,不要断开。然后在DB0服务器执行:

mysql> slave stop;

然后在刚才远程打开的mysql执行查询命令,第一次会出错,然后会重新连接。之后即可查询,因此此时已经切换到DB1数据库。
接着,重新打开DB0的日志接收功能,但keepalived不再切换了,因此我们在配置从写了nopreempt(非抢占)。