2.【详细到哭系列】keepalived配置,实现zabbix主备的切换

部署阶段及问题笔记: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时,执行的脚本
} 

如下图:

image

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" 
} 

如下图:

image

注:主备中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

image

在服务器执行:

[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

image

注:该脚本作用为当主备发生切换或者回切时始终保持有VIP的机器有zabbix服务而另一台无zabbix服务,保证对外提供服务的只有一台机器。(若两台服务器都提供zabbix服务则每一次事件都会触发两次告警)

主备机分别重启keepalived服务并加入启动服务

[root@zabbix-master ~]# systemctl restart keepalived
[root@zabbix-master ~]# systemctl enable keepalived 

检查所有相关服务,接下来就测试:

image

高可用测试

Zabbix-master查看VIP信息:

image

模拟zabbix-master的zabbix或者mariadb服务出现故障:

image

此时再Zabbix-slave查看网卡信息:

image

Zabbix-web页面也是可以正常访问的:

image

接下来我们模拟zabbix-master故障恢复,测试VIP是否回切:

image

image

注:到此zabbix高可用就已经实现了。

注:如果不想VIP不必要的主备切换,导致zabbix-master恢复后再次抢占VIP问题,自行了解"解决VIP抢占问题"。

2.【详细到哭系列】keepalived配置,实现zabbix主备的切换

全文结束