MHA(mysql高可用架构)
一. 一主两从架构搭建
1. master(server1)
# 在所有节点上都执行此操作,保持环境的纯净。
/etc/init.d/mysqld stop
cd /data/mysql/
rm -rf *
vim /etc/my.cnf
server_id=1
gtid_mode=ON
enforce_gtid_consistency=ON
log_slave_updates=ON
log_bin=binlog
mysqld --initialize --user=mysql
/etc/init.d/mysqld start
mysql -p
mysql> alter user root@localhost identified by '123456'; #修改密码
mysql> CREATE USER rpl_user@'%' IDENTIFIED BY '123456';
mysql> GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%';
2. slave(server2、3)
# 在所有节点上都执行此操作,保持环境的纯净。
/etc/init.d/mysqld stop
cd /data/mysql/
rm -rf *
vim /etc/my.cnf
server_id=2
gtid_mode=ON
enforce_gtid_consistency=ON
log_slave_updates=ON
log_bin=binlog
mysqld --initialize --user=mysql
/etc/init.d/mysqld start
mysql -p
# 在slave中
mysql> alter user root@localhost identified by '123456'; #修改密码
mysql> CHANGE MASTER TO MASTER_HOST='192.168.228.11', MASTER_USER='rpl_user', MASTER_PASSWORD = '123456', MASTER_AUTO_POSITION = 1;
mysql> start slave;
mysql> show slave status\G;
虽然没有在slave中创建rpl_user用户,但是它会同步master的操作,因此也创建了该用户。
3. 实验中的问题
配置slave过程中失败。
IO从两个方面查找问题;
- selinux,防火墙
- 用户认证
后面发现我把用户名写错了
4. 测试
同步成功
二. 延迟复制(本节不需要,是穿插内容)
延迟复制服务器,在master做了误操作,可以在slave端进行恢复
mysql> stop slave sql_thread;
mysql> change master to master_delay=60;
mysql> start slave sql_thread;
mysql> show slave status\G;
三. MHA(server4)环境搭建
1. 配置
# 在控制机器操作
cd MHA-7/
yum install -y *.rpm # 安装MHA依赖包
# 在控制机器操作
# 免密操作
ssh-keygen # 生成密钥
ssh-copy-id server1 # 传输公钥
# 在被控制机器操作
yum install -y mha4mysql-node-0.58-0.el7.centos.noarch.rpm # 按照节点工具
# 在控制机器上操作
mkdir -p /etc/masterha # 手动创建配置文件目录
vim /etc/masterha/app1.cnf
[server default]
user=root
password=123456
ssh_user=root
repl_user=rpl_user
repl_password=123456
master_binlog_dir= /data/mysql
remote_workdir=/tmp
secondary_check_script= masterha_secondary_check -s 192.168.228.12 -s 192.168.228.13
ping_interval=3
# master_ip_failover_script= /script/masterha/master_ip_failover
# shutdown_script= /script/masterha/power_manager
# report_script= /script/masterha/send_report
# master_ip_online_change_script= /script/masterha/master_ip_online_change
manager_workdir=/etc/masterha
manager_log=/etc/masterha/manager.log
[server1]
hostname=192.168.228.11
candidate_master=1
check_repl_delay=0
[server2]
hostname=192.168.228.12
candidate_master=1
check_repl_delay=0
[server3]
hostname=192.168.228.13
no_master=1
2. 测试
masterha_check_ssh --conf=/etc/masterha/app1.cnf # 免密测试
# 直接为每一台主机配置相同的公钥私钥
scp -r .ssh/ server1:
scp -r .ssh/ server2:
scp -r .ssh/ server3:
masterha_check_repl --conf=/etc/masterha/app1.cnf # repl远程连接检查
# 在master上面授权远程连接
grant all on *.* to root@'%' identified by '123456';
四、MHA高可用切换
1. 手动切换
1.1 master alive
# 进入维护状态,将server1的master切换为slave;将server2的slave切换为master。
masterha_master_switch --conf=/etc/masterha/app1.cnf --master_state=alive --new_master_host=192.168.228.12 --new_master_port=3306 --orig_master_is_new_slave --running_updates_limit=10000
1.2 master down
[root@server2 ~]# /etc/init.d/mysqld stop # master down
# 切换master为好的机器
masterha_master_switch --conf=/etc/masterha/app1.cnf --master_state=dead --dead_master_host=192.168.228.12 --dead_master_port=3306 --new_master_host=192.168.228.11 --new_master_port=3306 --ignore_last_failover
1.3 恢复down机
[root@server2 ~]# /etc/init.d/mysqld start
CHANGE MASTER TO MASTER_HOST='192.168.228.11', MASTER_USER='rpl_user', MASTER_PASSWORD = '123456', MASTER_AUTO_POSITION = 1;
2. 自动切换
masterha_manager --conf=/etc/masterha/app1.cnf & # 后台监测
cat app1.master_status.health
当之前的server1 要恢复上线,只能是恢复为slave,此时需要为其手动指定master。
mysql> CHANGE MASTER TO MASTER_HOST='192.168.228.12', MASTER_USER='rpl_user', MASTER_PASSWORD = '123456', MASTER_AUTO_POSITION = 1;
mysql> start slave;
mysql> show slave status\G;
# 每次操作完删除下面的文件
[root@server4 masterha]# rm -rf manager.log app1.failover.complete
1.脚本切换
[root@server4 bin]# ls
master_ip_failover master_ip_online_change # 两个脚本
在server4中修改
# 第一次需要手动在master中手动添加VIP
[root@server2 ~]# ip a a 192.168.228.100/24 dev eth0
[root@server2 ~]# /etc/init.d/mysqld stop # 停掉master后
如果要恢复server2,只能手动恢复为slave,因为网络里面不能存在两个master