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为自己数据库的密码
据此,在从服务器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的状态:
从服务器DB1按照上面的方法再做一遍,把DB0变成自己的从服务器,则双方互为主从。
最后在DB0上执行:
mysql> start slave;
3、配置keepalived
DB1从服务器上的/etc/keepalived/keepalived.conf
而DB0的主服务器上,把上面的priority 改为100,且在adver_int 2下面加上nopreempt
脚本check_slave_p1双方各一份,用于检测mysql复制的状态。放在/etc/keepalived/mysqlcheck/check_slave.p1
重启keepalived即可。systemctl restart keepalived
4、测试数据同步
用另外一台机器登陆vip的mysql,需要DB0和DB1对这台机器授权,让它可以CURD。
对模式school的表student插入数据:
mysql> insert into student values("jack",15,"m"),("lili",18,"f");
在DB0查看:
在DB1查看:
可以看出,数据已经同步。
5、测试keepalived故障切换
远程以vip地址登陆mysql,不要断开。然后在DB0服务器执行:
mysql> slave stop;
然后在刚才远程打开的mysql执行查询命令,第一次会出错,然后会重新连接。之后即可查询,因此此时已经切换到DB1数据库。
接着,重新打开DB0的日志接收功能,但keepalived不再切换了,因此我们在配置从写了nopreempt(非抢占)。