部署阶段及问题笔记:https://www.cnblogs.com/l-hh/category/1400262.html
两台机器都安装keepalived
[root@zabbix-master ~]# yum install keepalived.x86_64 -y
keepalived配置
Zabbix-master配置文件:
! Configuration File for keepalived global_defs { router_id zabbix-master #router_id 机器标识 } vrrp_script chk_zabbix { script "/etc/keepalived/check.sh zabbix_server" interval 1 #每1秒检测一次服务的运行状态 weight 30 #优先级变化幅度 fall 2 #尝试两次都成功才成功 rise 2 #尝试两次都失败才失败 } vrrp_script chk_mysql { script "/etc/keepalived/check.sh mysqld" interval 1 weight 20 fall 2 rise 2 } vrrp_instance VI_1 { #vrrp实例定义部分 state MASTER #设置lvs的状态,MASTER和BACKUP两种,必须大写 interface eth0 #设置对外服务的接口 virtual_router_id 100 #设置虚拟路由标示,这个标示是一个数字,同一个vrrp实例使用唯一标示 priority 100 #定义优先级,数字越大优先级越高,在一个vrrp——instance下,master的优先级必须大于backup advert_int 1 #设定master与backup负载均衡器之间同步检查的时间间隔,单位是秒 authentication { #设置验证类型和密码 auth_type PASS #主要有PASS和AH两种 auth_pass 1111 #验证密码,同一个vrrp_instance下MASTER和BACKUP密码必须相同 } virtual_ipaddress { #设置虚拟ip地址,可以设置多个,每行一个 192.168.115.200 } track_script { chk_zabbix } track_script { chk_mysql } notify_master "/etc/keepalived/zabbix.sh start" #指定当切换到master时,执行的脚本 notify_backup "/etc/keepalived/zabbix.sh stop" #指定当切换到backup时,执行的脚本 }
如下图:
Zabbix-slave配置文件:
! Configuration File for keepalived global_defs { router_id zabbix-slave } vrrp_script chk_zabbix { script "/etc/keepalived/check.sh zabbix_server" interval 1 weight 5 fall 2 rise 2 } vrrp_script chk_mysql { script "/etc/keepalived/check.sh mysqld" interval 1 weight 45 fall 2 rise 2 } vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 100 priority 90 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.115.200 } track_script { chk_zabbix } track_script { chk_mysql } notify_master "/etc/keepalived/zabbix.sh start" notify_backup "/etc/keepalived/zabbix.sh stop" }
如下图:
注:主备中chk_zabbix和chk_mysql的weight值。该设置目的是保证主机的zabbix或者mysql服务异常时keepalived能正常发生切换,并且当主机的zabbix和mysql服务重新正常启动时keepalived能够回切。
check.sh中的脚本(主备机相同):
注:该脚本为判断zabbix、mysql和http服务的状态,某个服务出现异常时将停止keepalived,VIP切换到zabbix-slave上。
#!/bin/bash zabbix_server=`ps -C zabbix_server --no-header | wc -l` mysqld=`ps -C mysqld --no-header | wc -l` case $1 in zabbix_server) if [ $zabbix_server -gt 0 ];then exit 0 else exit 1 fi ;; mysqld) if [ $mysqld -gt 0 ];then exit 0 else exit 1 fi ;; Esac
在服务器执行:
[root@zabbix-master keepalived]# chmod +x check.sh
Zabbix.sh脚本(主备机相同):
#!/bin/bash case $1 in start) systemctl start zabbix-server ;; stop) systemctl stop zabbix-server ;; Esac
注:该脚本作用为当主备发生切换或者回切时始终保持有VIP的机器有zabbix服务而另一台无zabbix服务,保证对外提供服务的只有一台机器。(若两台服务器都提供zabbix服务则每一次事件都会触发两次告警)
主备机分别重启keepalived服务并加入启动服务
[root@zabbix-master ~]# systemctl restart keepalived [root@zabbix-master ~]# systemctl enable keepalived
检查所有相关服务,接下来就测试:
高可用测试
Zabbix-master查看VIP信息:
模拟zabbix-master的zabbix或者mariadb服务出现故障:
此时再Zabbix-slave查看网卡信息:
Zabbix-web页面也是可以正常访问的:
接下来我们模拟zabbix-master故障恢复,测试VIP是否回切:
注:到此zabbix高可用就已经实现了。
注:如果不想VIP不必要的主备切换,导致zabbix-master恢复后再次抢占VIP问题,自行了解"解决VIP抢占问题"。
来源:https://www.cnblogs.com/l-hh/p/12530882.html