实验环境

此次实验的环境如下

  • MySQL 5.7.25

  • Redhat 6.10

  • 操作系统账号:mysql

  • 数据库复制账号:repl

  • 复制格式:基于行的复制

  • MHA版本: 0.56

IP地址 主从关系 复制账号 复制格式
11.12.14.29 主库 repl Row-Based
11.12.14.30 从库(半同步/备master) repl Row-Based
11.12.14.39 从库(异步) repl Row-Based
11.12.14.40 管理节点
11.12.14.41 VIP
1.png

1. 管理节点配置

vim /etc/mha/mha.conf
[server default]
# mysql user and password
user=monitor
password=123456
ssh_user=root

# working directory on the manager
manager_workdir=/etc/mha/manager
manager_log=/etc/mha/manager/mha.log
ping_interval=1

# working directory on MySQL servers
remote_workdir=/etc/mha/node

# replication user
repl_user=repl
repl_password=rpl
master_binlog_dir=/oradata/datalog/mysql/binlog

## customized script
master_ip_failover_script=/etc/mha/script/master_ip_failover
master_ip_online_change_script=/etc/mha/script/master_ip_online_change
secondary_check_script=/usr/bin/masterha_secondary_check -s 11.12.14.30  -s 11.12.14.39 --user=root  --master_host=11.12.14.29 --master_ip=11.12.14.29  --master_port=3306

[server1]
hostname=shytest
candidate_master=1

[server2]
hostname=shytest2
candidate_master=1

[server3]
hostname=shytest3
no_master=1

接下来我们来解释每个参数的意义

  • manager_workdir 管理节点工作目录,mha运行时会有状态文件生成
  • masnager_log 管理节点生成的日志
  • ping_interval 管理节点检测主库状态的间隔,默认为3s
  • remote_workdir MHA node工作目录,不存在会自动建立,如果不允许创建,MHA Node自动异常退出
  • master_binlog_dir 指定主库的二进制日志位置,防止管理节点无法连接主库获取日志位置

  • master_ip_failover_script 发生切换时VIP漂移脚本

  • master_ip_online_change_script 用于手动切换时VIP的漂移
  • secondary_check_script 若管理节点无法连接主库,则调用该脚本从从库检测主库状态
  • candidate_master 指定如果主库发生故障,优先提升该节点为主库
  • no_master 指定该节点不会成为主库

2. 测试连接

2.1 测试ssh是否设置正确

管理节点

root>masterha_check_ssh --conf=/etc/mha/mha.conf
2.png

测试通过会有成功字样打印出来

2.2 测试复制是否正常

管理节点

root>masterha_check_repl --conf=/etc/mha/mha.conf

测试通过会有成功字样打印出来

通过输出我们可以看到相关架构信息

4.png

3. 启动MHA

首先我们可以检测MHA是否已启动

管理节点

root>masterha_check_status --conf=/etc/mha/mha.conf
5.png

我们在manager上执行如下命令开启MHA

管理节点

root> nohup masterha_manager    --conf=/etc/mha/mha.conf --remove_dead_master_conf &

--remove_dead_master_conf意思为当发生切换后,老的主库信息会从配置文件删除

6.png

4. 停止MHA

root> masterha_stop -conf=/etc/mha/mha.conf 
7.png

5. 设置relay log清理计划

前面我们说到我们已经取消了relay log的自动清理,这里需要在主从库3台上设置定时任务手动清理

这里首先需要在root用户环境变量中增加mysql相关路径

主从库三台

export MYSQL_HOME=/usr/local/mysql
export PATH=$HOME/bin:$MYSQL_HOME/bin:$PATH
0 4 1 * * /usr/bin/purge_relay_logs --user=monitor --password=123456 -disable_relay_log_purge --workdir=/tmp/ >> /tmp/purge_relay_logs.log 2>&1
8.png

6. 参考资料

https://www.percona.com/blog/2016/09/02/mha-quickstart-guide/

http://www.ttlsa.com/mysql/step-one-by-one-deploy-mysql-mha-cluster/

https://www.cnblogs.com/ivictor/p/5686275.html

https://andblog.cn/?p=974