一、验证读写分离
备注为了配置MaxScale.cnf文件的端口生效,简便做法去除所有节点上的防火墙
伪分布模式安装步骤:1、 关闭防火墙 :service iptables stop centos7版本: systemctl stop firewalld.service
验证防火墙状态:service iptables status centos7版本: firewall-cmd --state
关闭防火墙的自动开启 :chkconfig iptables off centos7版本: systemctl disable firewalld.service
chkconfig --list | grep iptables(查看防火墙服务状态) centos7版本:systemctl status firewalld
配置主从复制关系: 主库:60 从库:61,62
先让主从数据库数据不一致,这样还能看出来是到底从哪个机器上查询的数据。
在slave1,slave2 手动插入一条id=2的数据。
启动
/etc/init.d/maxscale start
通过访问maxscale 中间层,192.168.1.59 通过解析分配到权重比较大的从库上去。
说明:只要select 就不会访问到主库。
mysql -h192.168.1.59 -uroot -pzhangtongle123 mydb3 -P4006 -e "select * from employee;"
因为是插入的是中文,命令行工具识别不了所以 显示乱码,这个不碍事。证明我们通过中间层让读写分离就ok!
二、让MaxScale感知到Mysql的复制延迟,和从库全部关闭或宕机的时候的处理。
实验略
max_slave_replication_lag=5
# 当select请求在一个从库上,查询相应超过5秒,就会自动切换到其他节点。
detect_stale_master=1
# 当所有的slave节点挂了,或者关闭了。强制从master去查询了。
三、结合MHA做故障转移切换
注意:MaxScale 无法对主库做故障转移切换,这里需要借助第三方工具,如MHA来进行实现。
但故障切换后,MaxScale是可以自动识别哪台机器是master的。另外,架构必须是一主带N从,不能是双主带N从。
Maxscale与MHA整合
Maxscale与MHA整合其实非常简单,一般MHA都会让 开发使用vip。master宕掉后,slave接管,对前端是透明的。
在与Maxscale结合的时候,Maxscale.conf文件不需要改变任何东西,只需要在后端将MHA部署上就可以。因Maxscale可以监控MySQL的主从变更。
总结:Maxscale与MHA整合,只需要安装MHA即可。
写在最后,对已有的MySQL主从环境上MHA和Maxscale几乎不需要更改任何配置。只需要更改开发框架中的配置 ,把原IP和端口改写为Maxscale server的IP和端口即可。
检查复制链路
masterha_check_repl --conf=/etc/app1.cnf
发现主从数据不一致。在主库上执行:
验证主从数据是否一致:
pt-table-checksum h='192.168.1.60',u='root',p='zhangtongle123',P=3306 --databases "mydb3" --tables "employee" --nocheck-replication-filters --replicate=mydb3.checksums --no-check-binlog-format
检测不一致在哪里:
pt-table-sync --replicate=mydb3.checksums h='192.168.1.60',u='root',p='zhangtongle123',P='3306' --databases=mydb3 --print
删除主从上不一致的数据:
pt-table-sync --replicate=mydb3.checksums h='192.168.1.60',u='root',p='zhangtongle123',P='3306' --databases=mydb3 --execute
再次检查复制链路
备注:手动添加虚拟vip
ip addr add 192.168.1.100/32 dev eth2
masterha_check_repl --conf=/etc/app1.cnf
开启mha
并检测Maxscale 服务器状态
模拟一下主库宕机了:
虚拟ip就会自动切换到从库slave1:61 上来。
然后再次检测下MaxScale后台服务是不是自动识别新的主库:已经成功自动识别新的主库和从库,并标识60已经down了!
maxadmin -uadmin -pmariadb -P6603 -e "list servers"
在然后通过MaxScale 服务器插入一条数据给新的主库看是否正常!
mysql -h192.168.1.59 -uroot -pzhangtongle123 mydb3 -P4006 -e "insert into employee values ('2', '王五', '男', '1980-04-30', '20000', '教授');"
OK,成功插入61并成功同步62.
四、快速初始化环境:
1、停止mha和maxscale
/etc/init.d/maxscale stop
masterha_stop --conf=/etc/app1.cnf
2、重新配置主从:
在61、62上执行。并从60主库上(show master status 获得MASTER_LOG_FILE、MASTER_LOG_POS )
stop slave;
reset slave all;
CHANGE MASTER TO MASTER_HOST='192.168.1.60',MASTER_USER='repl',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000013',MASTER_LOG_POS=107;
start slave;
show slave status;
3、重新开启:mha和maxscale
去掉slave1的vip,加载master上。
ip addr delete 192.168.1.100/32 dev eth2
ip addr add 192.168.1.100/32 dev eth2
4、检查复制链路:
masterha_check_repl --conf=/etc/app1.cnf
5、开启MHA、MaxScale服务:
/root/mha_sh/startmha.sh
/etc/init.d/maxscale start
6、检查MaxScale服务
maxadmin -uadmin -pmariadb -P6603 -e "list servers"