1、集群环境

角色 区域 IP 主机名
Zabbix-Server 钦州 10.196.12.162 Server-10.196.12.162
临港 10.18.18.212 Server-10.18.18.212
Zabbix-Proxy 钦州 10.196.4.211 Proxy01-10.196.4.211
钦州 10.196.4.213 Proxy02-10.196.4.213
钦州 10.196.12.166 Proxy03-10.196.12.166
DB_Master/MHA_node 钦州 10.196.12.163 SHQZ-PS-ZABBIX-SV-MYSQL01
DB_Slave/MHA_node 钦州 10.196.12.164 SHQZ-PS-ZABBIX-SV-MYSQL02
MHA_manager 钦州 10.196.12.165 SHQZ-PS-ZABBIX-SV-MANAGE
DB_Slave/MHA_node 临港 10.18.18.210 SHLG-PS-ZABBIX-SV-MYSQL03

2、Zabbix-Server主从切换

现有集群Zabbix-Server节点部署有以下角色:

  • Zabbix-Server
  • PHP
  • Nginx

请求入口由Nginx承担,主节点Nginx监听本机8080端口连接本机PHP Socket进程,php配置文件指向本机Zabbix-Server和数据库主节点。从节点Nginx同样监听8080端口连接本机PHP Socket进程,php配置文件指向本机Zabbix-Server和数据库主节点。
因此主从切换时,仅需进行如下操作:

  1. 停止主节点Zabbix-Server进程,主节点降级为从Server节点;
  2. 启动从节点Zabbix-Server进程,从节点升级为主Server节点;
  3. 修改Zabbix-Proxy节点配置文件指向新Zabbix-Server节点;
  4. 如数据库也发生切换,需要将Zabbix-Server配置文件中数据库地址修改为切换后数据库主节点IP;

    2.1、停止主节点Zabbix-Server进程

    使用mon用户登录10.196.12.162节点,执行停止进程操作,必须停止主节点Zabbix-Server后才可启动从节点Server,否者两个节点将会同时触发监控项执行。
    1. ]$ cd /data/zabbix_server/sbin
    2. ]$ sh zabbix_tools.sh stop
    确认Zabbix-Server进程已经停止。
    image.png

    2.2、启动从节点Zabbix-Server进程

    使用mon用户登录10.18.18.212节点,执行启动进程操作
    1. ]$ cd /data/zabbix_server/sbin
    2. ]$ sh zabbix_tools.sh start
    确认进程已正常启动。
    image.png

    2.3、修改Zabbix-Proxy节点

    登录所有Zabbix-proxy节点配置,执行以下操作。 ```bash ]$ vim /etc/zabbix/zabbix_proxy.conf

    修改如下行

    Server=10.18.18.212

修改完成后重启Zabbix-proxy进程

]$ systemctl restart zabbix-proxy

  1. <a name="YIGUX"></a>
  2. #### 2.4、登录验证切换
  3. 浏览器访问[http://10.18.18.212:8080/zabbix.php](http://192.168.100.110:8080/zabbix.php)<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/12377978/1635758277458-f1effb04-e73b-437e-b9a8-949fe0aa05f9.png#clientId=uba9004c4-12f8-4&from=paste&height=402&id=ue20a3746&margin=%5Bobject%20Object%5D&name=image.png&originHeight=402&originWidth=976&originalType=binary&ratio=1&size=35153&status=done&style=none&taskId=u4dbecf19-79fb-4bb3-8bf4-eb00be66c40&width=976)<br />同时访问主节点[http://10.196.12.162:8080/zabbix.php](http://10.18.18.212:8080/zabbix.php),可以看到数据均可看到,但相关系统信息均不存在<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/12377978/1635758400896-a4dfb4c3-48f5-4051-9260-5e0db24f3202.png#clientId=uba9004c4-12f8-4&from=paste&height=397&id=u59398177&margin=%5Bobject%20Object%5D&name=image.png&originHeight=397&originWidth=979&originalType=binary&ratio=1&size=33256&status=done&style=none&taskId=u40563a89-f8f6-4f4d-a648-c0f50b49e4d&width=979)
  4. <a name="vBZRS"></a>
  5. ### 2.5、数据库配置修改
  6. 如数据库没有进行主从切换,则无需此步骤。如果发生主从切换,则此步骤为必要操作。操作按照以下说明执行
  7. - 登录当前Zabbix-Server主节点,修改zabbix php中配置
  8. ```bash
  9. ]$ cd /data/nginx/html/conf
  10. ]$ vim zabbix.conf.php
  11. # 修改如下信息
  12. $DB['TYPE'] = 'MYSQL';
  13. $DB['SERVER'] = '192.168.100.110'; # Zabbix数据库主节点IP
  14. $DB['PORT'] = '3306';
  15. $DB['DATABASE'] = 'dbzabbix';
  16. $DB['USER'] = 'zabbix';
  17. $DB['PASSWORD'] = 'Zabbix@2021';

修改完成后无需重启,刷新浏览器即可。

3、数据库主从切换

当前集群使用10.196.12.165作为MHA Manager节点,10.196.12.163为初始Mysql主节点,10.196.12.164和10.18.18.210为初始Mysql从节点,所有Mysql节点均部署MHA Node。数据库切换分为两部分,同机房Mysql主从切换和异地机房Mysql主从切换。

3.1、同机房主从切换

同机房主从切换即为Mysql主节点从10.196.12.163切换到10.196.12.16。

3.1.1、停止主节点Mysql服务
  1. $ systemctl stop mysqld
  2. $ ps -ef |grep mysql | grep -v grep | awk '{print $2}' |xargs kill -9

3.1.2、触发MHA切换
  • 观察MHA Manager日志,查看切换过程 ```bash ——- Failover Report ——-

app_zabbix: MySQL Master failover 10.196.12.163(10.196.12.163:3306) to 10.196.12.16(10.196.12.16:3306) succeeded …… Master failover to 10.196.12.16(10.196.12.16:3306) completed successfully.

  1. - 登录10.196.12.16数据库查看主从状态
  2. ```bash
  3. root@localhost:mysql.sock [zbxtest]>show slave status\G
  4. No connection. Trying to reconnect...
  5. Connection id: 27
  6. Current database: zbxtest
  7. *************************** 1. row ***************************
  8. Slave_IO_State: Waiting for master to send event
  9. Master_Host: 10.196.12.16
  10. Master_User: repl
  11. Master_Port: 3306
  12. Connect_Retry: 60
  13. Master_Log_File: mysql-bin.000002
  14. Read_Master_Log_Pos: 613
  15. Relay_Log_File: relay-bin.000002
  16. Relay_Log_Pos: 779
  17. Relay_Master_Log_File: mysql-bin.000002
  18. Slave_IO_Running: Yes
  19. Slave_SQL_Running: Yes

切换完成后,执行2.5步骤,修改zabbix中数据库配置。然后登录zabbix管理页面,查看最新数据是否可以正常获取及展示。

3.2、异地机房主从切换

异地机房主从切换即为Mysql主节点从10.196.12.163切换到10.18.18.210。
默认切换为同机房切换,异地机房切换需要手动切换,参考以下操作:
需要关闭MHA的管理进程或者MHA进程已经关闭,登录MHA Manager即10.196.12.165执行如下操作。

  • 手动关闭manager 节点:

    1. masterha_stop --conf=/etc/masterha/app_zabbix.cnf
  • 如果原主10.196.12.163 已经宕机,切换命令如下:

    1. ]$ masterha_master_switch --master_state=dead --conf=/etc/masterha/app_zabbix.cnf --dead_master_host=10.196.12.163 --dead_master_port=3306 --new_master_host=10.18.18.210 --new_master_port=3306 --ignore_last_failover
  • 如果原主10.196.12.163 正常,手动切换命令如下:

    1. ]$ masterha_master_switch --conf=/etc/masterha/app_zabbix.cnf --master_state=alive --orig_master_is_new_slave --new_master_host=10.18.18.210 --new_master_port=3306 --running_updates_limit=10000

    切换后10.18.18.210是新主,10.196.12.163角色变为新从。
    切换过后,参考步骤4 ,重启MHA manager。
    PS:除非是极端情况,建议尽量不做这类这类切换,把主库作为单点放在异地机房。

3.3、将故障节点重新加入MHA集群
故障节点恢复后,可通过如下方式将节点重新添加至MHA集群。这里假设10.196.12.163为故障节点,且主节点已切换至10.196.12.16。
登录10.196.12.163,启动Mysql服务

  1. $ systemctl start mysqld
  2. /usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf &

从mangae.log中找到新master 日志的起始位置,以便老的master修复后重新加入MHA集群

  1. $ cd /home/mha/masterha/app_zabbix
  2. $ more manager.log |grep -i change
  3. Fri Jun 18 14:04:21 2021 - [info] All other slaves should start replication from here. Statement should be: CHANGE MASTER TO MASTER_HOST='192.168.137.138', MASTER_PORT=3306, MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=1712, MASTER_USER='repl', MASTER_PASSWORD='xxx';

登录故障数据库即10.196.12.163,设置为只读模式

  1. root@localhost:mysql.sock [zbxtest]>set global read_only=1;
  2. Query OK, 0 rows affected (0.01 sec)
  3. root@localhost:mysql.sock [zbxtest]>set global relay_log_purge=0;
  4. Query OK, 0 rows affected (0.00 sec)
  5. root@localhost:mysql.sock [zbxtest]>stop slave ;
  • stop slave,配置主从复制

    1. root@localhost:mysql.sock [zbxtest]>CHANGE MASTER TO MASTER_HOST='10.196.12.16', MASTER_PORT=3306, MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=1712, MASTER_USER='repl', MASTER_PASSWORD='repl_pwd2021!';
    2. Connection id: 6
    3. Current database: zbxtest
  • 启动主从复制 ```bash root@localhost:mysql.sock [zbxtest]>start slave; Query OK, 0 rows affected (0.01 sec)

root@localhost:mysql.sock [zbxtest]>show slave status\G * 1. row * Slave_IO_State: Waiting for master to send event Master_Host: 10.196.12.16 Master_User: repl Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000002 Read_Master_Log_Pos: 613 Relay_Log_File: relay-bin.000004 Relay_Log_Pos: 826 Relay_Master_Log_File: mysql-bin.000002 Slave_IO_Running: Yes Slave_SQL_Running: Yes

  1. <a name="q3fug"></a>
  2. ### 4、MHA重启操作
  3. ```bash
  4. # 启动前建议清除之前的failover 日志:
  5. rm -f /home/mha/masterha/app_zabbix/saved_master_binlog_from*
  6. rm -f /home/mha/masterha/app_zabbix/app_zabbix.failover.complete
  7. rm -f /home/mha/masterha/app_zabbix/manager.log
  8. #启动前检查
  9. masterha_check_ssh --conf=/etc/masterha/app_zabbix.cnf
  10. masterha_check_repl --conf=/etc/masterha/app_zabbix.cnf
  11. #启动
  12. nohup masterha_manager --ignore_last_failover --conf=/etc/masterha/app_zabbix.cnf &
  13. #查看启动状态
  14. masterha_check_status --conf=/etc/masterha/app_zabbix.cnf