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和数据库主节点。
因此主从切换时,仅需进行如下操作:
- 停止主节点Zabbix-Server进程,主节点降级为从Server节点;
- 启动从节点Zabbix-Server进程,从节点升级为主Server节点;
- 修改Zabbix-Proxy节点配置文件指向新Zabbix-Server节点;
- 如数据库也发生切换,需要将Zabbix-Server配置文件中数据库地址修改为切换后数据库主节点IP;
2.1、停止主节点Zabbix-Server进程
使用mon用户登录10.196.12.162节点,执行停止进程操作,必须停止主节点Zabbix-Server后才可启动从节点Server,否者两个节点将会同时触发监控项执行。
确认Zabbix-Server进程已经停止。]$ cd /data/zabbix_server/sbin]$ sh zabbix_tools.sh stop
2.2、启动从节点Zabbix-Server进程
使用mon用户登录10.18.18.212节点,执行启动进程操作
确认进程已正常启动。]$ cd /data/zabbix_server/sbin]$ sh zabbix_tools.sh start
2.3、修改Zabbix-Proxy节点
登录所有Zabbix-proxy节点配置,执行以下操作。 ```bash ]$ vim /etc/zabbix/zabbix_proxy.conf修改如下行
Server=10.18.18.212
修改完成后重启Zabbix-proxy进程
]$ systemctl restart zabbix-proxy
<a name="YIGUX"></a>#### 2.4、登录验证切换浏览器访问[http://10.18.18.212:8080/zabbix.php](http://192.168.100.110:8080/zabbix.php)<br /><br />同时访问主节点[http://10.196.12.162:8080/zabbix.php](http://10.18.18.212:8080/zabbix.php),可以看到数据均可看到,但相关系统信息均不存在<br /><a name="vBZRS"></a>### 2.5、数据库配置修改如数据库没有进行主从切换,则无需此步骤。如果发生主从切换,则此步骤为必要操作。操作按照以下说明执行- 登录当前Zabbix-Server主节点,修改zabbix php中配置```bash]$ cd /data/nginx/html/conf]$ vim zabbix.conf.php# 修改如下信息$DB['TYPE'] = 'MYSQL';$DB['SERVER'] = '192.168.100.110'; # Zabbix数据库主节点IP$DB['PORT'] = '3306';$DB['DATABASE'] = 'dbzabbix';$DB['USER'] = 'zabbix';$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服务
$ systemctl stop mysqld或$ 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.
- 登录10.196.12.16数据库查看主从状态```bashroot@localhost:mysql.sock [zbxtest]>show slave status\GNo connection. Trying to reconnect...Connection id: 27Current database: zbxtest*************************** 1. row ***************************Slave_IO_State: Waiting for master to send eventMaster_Host: 10.196.12.16Master_User: replMaster_Port: 3306Connect_Retry: 60Master_Log_File: mysql-bin.000002Read_Master_Log_Pos: 613Relay_Log_File: relay-bin.000002Relay_Log_Pos: 779Relay_Master_Log_File: mysql-bin.000002Slave_IO_Running: YesSlave_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 节点:
masterha_stop --conf=/etc/masterha/app_zabbix.cnf
如果原主10.196.12.163 已经宕机,切换命令如下:
]$ 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 正常,手动切换命令如下:
]$ 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服务
$ systemctl start mysqld或/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf &
从mangae.log中找到新master 日志的起始位置,以便老的master修复后重新加入MHA集群
$ cd /home/mha/masterha/app_zabbix$ more manager.log |grep -i changeFri 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,设置为只读模式
root@localhost:mysql.sock [zbxtest]>set global read_only=1;Query OK, 0 rows affected (0.01 sec)root@localhost:mysql.sock [zbxtest]>set global relay_log_purge=0;Query OK, 0 rows affected (0.00 sec)root@localhost:mysql.sock [zbxtest]>stop slave ;
stop slave,配置主从复制
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!';Connection id: 6Current 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
<a name="q3fug"></a>### 4、MHA重启操作```bash# 启动前建议清除之前的failover 日志:rm -f /home/mha/masterha/app_zabbix/saved_master_binlog_from*rm -f /home/mha/masterha/app_zabbix/app_zabbix.failover.completerm -f /home/mha/masterha/app_zabbix/manager.log#启动前检查masterha_check_ssh --conf=/etc/masterha/app_zabbix.cnfmasterha_check_repl --conf=/etc/masterha/app_zabbix.cnf#启动nohup masterha_manager --ignore_last_failover --conf=/etc/masterha/app_zabbix.cnf &#查看启动状态masterha_check_status --conf=/etc/masterha/app_zabbix.cnf
