keepalived 配置示例
本示例配置keepalived默认了抢占式配置,通过权重配置进行切换,生产配置示例,可以在VRRP实例中state 配置区分master和backup。交易网关的多网卡VIP设置只需在 vrrp_instance 中分别配置网卡即可。
Keepalived.conf 配置示例
# cat keepalived.conf
global_defs { #全局定义块 router_id LVS_DEVEL # 虚拟路由标识,定义路由器的唯一标识;可以根据主机IP作为标识 顺便区分master和backup vrrp_skip_check_adv_addr # 跳过数据检查报文 vrrp_strict # 严格遵守VRRP协议,可关闭这个配置 vrrp_garp_interval 0 # ARP发送报文延迟时间 vrrp_gna_interval 0 # 信息发送延迟时间 vrrp_garp_interval 0.001 # 设置在接口上发送的两个连续免费 ARP 之间的时间间隔 # 单位为秒,这里是 1 毫秒,这意味着每 1 毫秒,Keepalived 就会在该接口上发送一个新的免费 ARP,以通告其虚拟 IP 地址 vrrp_garp_master_delay 10 # 当 Keepalived 成为 MASTER 后,延迟多少秒发送第二组 Gratuitous ARP vrrp_garp_master_repeat 2 # 当 Keepalived 成为 MASTER 后,每次刷新会发送多少个 Gratuitous ARP } vrrp_instance VI_1 { # VRRP实例定义 state MASTER # 实例的初始状态,主机设置MASTER,备机设置BACKUP。 interface eth0 # 用于VRRP通信的网络接口名称 virtual_router_id 51 # 虚拟路由器标识符,同一VRRP组中的实例必须相同 priority 100 # 优先级值,用于决定哪个节点将成为MASTER。 advert_int 1 # VRRP通告的间隔时间,单位是秒 authentication { # 认证块,用于确保VRRP通信的安全性 auth_type PASS auth_pass 1111 } #nopreempt # 非抢占模式,默认不配置 virtual_ipaddress { # 虚拟IP地址,该地址将在MASTER节点上绑定,配置也可以指定网卡 10.10.10.1 } track_script { # 引用vrrp_script定义的脚本,用于监视特定条件 check_nginx # 引用脚本模块 } notify_master /path/to/notify_master.sh # 分别是在状态改变为 MASTER 时执行的脚本,生产我没配置,如果有需求可以配置。 notify_backup /path/to/notify_backup.sh # 分别是在状态改变为 BACKUP 时执行的脚本。 notify_fault /path/to/notify_fault.sh # 分别是在状态改变为 FAULT 时执行的脚本。 } ### 双网卡VIP配置 只需添加 vrrp_instance 即可。 ###vrrp_instance VI_2{ # 配置参考VI_1 配置不同的网卡信息、路由id 和VIP地址 ... ###} vrrp_script check_nginx { # VRRP脚本定义块 check_nginx script "/path/to/check_nginx.sh" # 当脚本执行成功时权重不会变,如果失败就会对应的增加或减少; interval 2 # 脚本执行间隔 weight -20 # 当脚本失败时,权重减少的值 ,正数会增加优先级,负数会减少优先级; }
脚本执行与权重调整:
/path/to/check_nginx.sh 如果 check_nginx.sh 脚本返回 0(exit 0成功),那么 VRRP 实例的优先级不会改变。 如果 check_nginx.sh 脚本返回非 0(exit 1失败),并且 weight 设置为 -20,那么 VRRP 实例的优先级将减少 20。
vrrp_strict 配置问题
Keepalived 配置默认开启了 vrrp_script,但是会导致配置的vip无法访问。所以避免问题可以直接注释这一行;如果想开启可以在vrrp_script 后添加版本信息 vrrp_version 3,同时在vrrp_instance 中添加 accept;然后vrrp 的优先级配置为255。默认配置100。
脚本示例
vrrp_script check_nginx
Keepalived中使用 vrrp_script 模块添加检查脚本时,交易网关的检查脚本是通过检查交易网关的进程存活情况和网卡情况进行判断的,因为对服务异常的第一处理是重启,所以当master监测脚本异常时,vip不会进行自动切换,只有网络异常时,脚本才判断为异常输出,此时才进行VIP切换。而nginx的keepalived配置中,当nginx进程不存在时,keepalived就配置VIP自动切换。
Check_nginx脚本示例 # cat check_nginx.sh #!/bin/bash if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then sleep 2 if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then #systemctl stop keepalived exit 1 # 判断 nginx进程不存在时,程序异常退出 fi else exit 0 # 当nginx进程在时,程序正常退出 fi