## 实验环境 此次实验的环境如下 - 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| 无 |无| [image:683 size:orig] ## 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 ``` [image:684 size:orig] 测试通过会有成功字样打印出来 ### 2.2 测试复制是否正常 **管理节点** ``` root>masterha_check_repl --conf=/etc/mha/mha.conf ``` 测试通过会有成功字样打印出来 通过输出我们可以看到相关架构信息 [image:685 size:orig] [image:686 size:orig] ## 3. 启动MHA 首先我们可以检测MHA是否已启动 **管理节点** ``` root>masterha_check_status --conf=/etc/mha/mha.conf ``` [image:687 size:orig] 我们在manager上执行如下命令开启MHA **管理节点** ``` root> nohup masterha_manager --conf=/etc/mha/mha.conf --remove_dead_master_conf & ``` --remove_dead_master_conf意思为当发生切换后,老的主库信息会从配置文件删除 [image:688 size:orig] ## 4. 停止MHA ``` root> masterha_stop -conf=/etc/mha/mha.conf ``` [image:689 size:orig] ## 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 ``` [image:690 size:orig] ## 6. 参考资料 [https://www.percona.com/blog/2016/09/02/mha-quickstart-guide/](https://www.percona.com/blog/2016/09/02/mha-quickstart-guide/) [http://www.ttlsa.com/mysql/step-one-by-one-deploy-mysql-mha-cluster/](http://www.ttlsa.com/mysql/step-one-by-one-deploy-mysql-mha-cluster/) [https://www.cnblogs.com/ivictor/p/5686275.html](https://www.cnblogs.com/ivictor/p/5686275.html) [https://andblog.cn/?p=974](https://andblog.cn/?p=974)