7.8 Keepalived 部署文档

image0

参考文档:keepalived搭建zabbix server双机高可用

# 安装
yum install keepalived -y
yum install psmisc -y

# 启动
/usr/sbin/keepalived -D
# 关闭
pgrep keepalived |xargs kill -15

# 启动
systemctl start keepalived.service
# 停止
systemctl stop keepalived.service

/etc/keepalived 下新增脚本 check.sh

#!/bin/bash
workers=`ps -C $1 --no-header | wc -l`
if [ $workers -gt 0 ];then
    exit 0
else
    exit 1
fi

并添加执行权限 chmod +x /etc/keepalived/check.sh

zabbix-01 (主)中添加配置文件/etc/keepalived/keepalived.conf,千万记得根据实际情况修改vip,和网卡名

! Configuration File for keepalived
global_defs {
   router_id zabbix-01   #router_id 机器标识,通常为hostname,但不一定非得是hostname。故障发生时,邮件通知会用到。
}


vrrp_script chk_zabbix {
  script "/etc/keepalived/chk_zabbix.sh"
  interval 2
  weight -10
  fall 2        #尝试两次都成功才成功
  rise 2        #尝试两次都失败才失败
}


vrrp_instance VI_1 {              #vrrp实例定义部分
    state MASTER                  #设置lvs的状态,MASTER和BACKUP两种,必须大写
    interface eth1                #设置对外服务的接口
    virtual_router_id 88          #设置虚拟路由标示,这个标示是一个数字,同一个vrrp实例使用唯一标示
    priority 100                  #定义优先级,数字越大优先级越高,在一个vrrp——instance下,master的优先级必须大于backup
    nopreempt
    advert_int 1                  #设定master与backup负载均衡器之间同步检查的时间间隔,单位是秒
    authentication {              #设置验证类型和密码
        auth_type PASS            #主要有PASS和AH两种
        auth_pass 2345            #验证密码,同一个vrrp_instance下MASTER和BACKUP密码必须相同
    }
    virtual_ipaddress {         #设置虚拟ip地址,可以设置多个,每行一个
        219.157.114.206/24 dev eth1 label eth1:0
    }
    track_interface {
        eth1
    }

    track_script {
        chk_zabbix
    }
notify_master "service zabbix-server start"         #指定当切换到master时,执行的脚本
notify_backup "service zabbix-server stop"          #指定当切换到backup时,执行的脚本
}

zabbix-02 (备)中添加配置文件/etc/keepalived/keepalived.conf`

! Configuration File for keepalived
global_defs {
   router_id zabbix-02     #router_id 机器标识,通常为hostname,但不一定非得是hostname。故障发生时,邮件通知会用到。
}


vrrp_script chk_zabbix {
  script "/etc/keepalived/chk_zabbix.sh"
  interval 2
  weight -10
  fall 2        #尝试两次都成功才成功
  rise 2        #尝试两次都失败才失败
}

vrrp_instance VI_1 {           #vrrp实例定义部分
    state BACKUP               #设置lvs的状态,MASTER和BACKUP两种,必须大写
    interface eth1             #设置对外服务的接口
    virtual_router_id 88      #设置虚拟路由标示,这个标示是一个数字,同一个vrrp实例使用唯一标示
    priority 95                #定义优先级,数字越大优先级越高,在一个vrrp——instance下,master的优先级必须大于backup
    advert_int 1               #设定master与backup负载均衡器之间同步检查的时间间隔,单位是秒
    authentication {           #设置验证类型和密码
        auth_type PASS         #主要有PASS和AH两种
        auth_pass 2345          #验证密码,同一个vrrp_instance下MASTER和BACKUP密码必须相同
    }
    virtual_ipaddress {         #设置虚拟ip地址,可以设置多个,每行一个
        219.157.114.206/24 dev eth1 label eth1:0
    }
    track_script {
        chk_zabbix
    }
notify_master "service zabbix-server start"         #指定当切换到master时,执行的脚本
notify_backup "service zabbix-server stop"          #指定当切换到backup时,执行的脚本
}

设置日志输出文件

keepalived 默认是没有输出日志的,需要配置一下。

修改keepalived配置文件 /etc/sysconfig/keepalived,如下

KEEPALIVED_OPTIONS="-D -d -S 0"

修改rsyslog 配置文件 /etc/rsyslog.conf

# keepalived -S 0
local0.*                                                /var/log/keepalived.log

重启服务

systemctl restart rsyslog
systemctl restart keepalived

脚本文件

chk_zabbix.sh

放置于 /etc/keepalived,注意脚本里vip的网卡名要正确填写。

#!/bin/bash
workers=`ps -C zabbix_server --no-header | wc -l`
is_vip=`ifconfig eth0:0 | grep inet | wc -l`
if [ $workers == 0 -a $is_vip == 1 ];then
    /bin/systemctl restart zabbix-server.service
    sleep 1
    workers=`ps -C zabbix_server --no-header | wc -l`
    if [ $workers == 0 -a $is_vip == 1 ];then
        exit 1
    fi
    exit 0
else
    exit 0
fi

这个脚本保证了,两个节点上,始终只会有一个节点运行zabbix-server。防止zabbix的数据库脑裂。

主要有以下两种情况

  • 单台节点宕机(可以关闭keepalived服务模拟,也可以关机)

  • 双台节点宕机(不管是哪一台先启)


image1