keepalived配置文件详情

一、 配置文件组成

keepalived配置文件有三部分组成,分别为:

  1. 全局配置(GLOBAL CONFIGURATION)
    包含配置文件中的global_defs、static_ipaddress、static_route区域,负责定义邮件的相关配置、route_id、vrrp配置、多播地址、节点的ip和路由信息等
  2. VRRP配置(VRRP CONFIGURATION)
    包含配置文件中的vrrp_script、vrrp_instance、vrrp_sync_group区域,负责定义每个vrrp虚拟路由器
  3. LVS配置(LVS CONFIGURATION)
    包含配置文件中的virtual_server_group、virtual_server区域,负责lvs集群配置

二、 配置文件详情

  1. global_defs区域
global_defs {
   notification_email {    # 故障发生时,给谁发送邮件消息
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc    # 通知邮件从哪个地址发出
   smtp_server 192.168.200.1    # 通知邮件的smtp地址
   smtp_connect_timeout 30    # 连接smtp服务器的超时时间
   router_id LVS_DEVEL    # 标识本节点的字符串,故障发生时,邮件通知会用到
   vrrp_skip_check_adv_addr    # 检查收到vrrp通告中的所有地址会比较耗时,设置此属性,当通告与接收的上一个通告来自同一个master路由器,则跳过检查,默认不跳过检查
   vrrp_strict    # 严格遵守vrrp协议
   vrrp_garp_interval 0.1    # 一个接口发送的两个arp之间的延迟
   vrrp_gna_interval 0.1

   script_user root    # 设置运行脚本默认用户和组,如果不指定,则默认为keepalived_script(需要该用户存在)
}
  1. static_ipaddress、static_routes区域
static_ipaddress {
    x.x.x.x
}
static_routes {
    x.x.x.x
}

注:这两个区域配置的是本节点的ip和路由,一般情况下,机器都会存在ip地址和路由信息,因此这两个区域的配置可直接忽略
3. vrrp_script区域

vrrp_script nginx_check {
    script "/usr/local/nginx/sbin/nginx_check.sh"    # 监控执行脚本
    interval 2    # 每2秒执行一次脚本
    weight -20    # 优先级调整,失败一次,将自己的优先级-20
    fail 2    # 检测允许失败的最大次数,超过指定次数后则认为节点故障
    rise 1    # 执行成功指定次数,就认为节点恢复正常
}
  1. vrrp_instance区域
vrrp_instance VI_1 {
    state MASTER    # 指定keepalived节点的初始状态,MASTER/BACKUP
    interface ens33    # vrrp实例绑定的接口,用于发送vrrp包
    virtual_router_id 51    # 指定vrrp实例id
    priority 100    # 指定优先级,优先级高的伪MASTER
    advert_int 1    # 发送vrrp包的间隔,即多久进行一次master选举
    nopreempt    # 指定非抢占模式,默认为抢占模式
    preempt_delay 300    # master启动多久之后接管资源,前提是抢占模式下
    authentication {    # 认证区域,认证方式有PASS和HA,推荐使用PASS(密码只识别前8位)
        auth_type PASS    # 认证方式
        auth_pass 1111    # 认证密码
    }
    virtual_ipaddress {    # 设置虚拟ip
        192.168.132.16
    }
    track_script {    # 设置执行脚本函数
        nginx_check
    }
    garp_master_delay 15    # 当切换为master后多久更新ARP缓存,默认为5秒
    track_interface {    # 监控以下网卡,如果任意一个不通,则会切换为FAIL状态
        ens0
        ens33
    }
}
  1. vrrp_sync_group区域
vrrp_sync_group VG_1 {
    group {    # 设置vrrp_instance组
        VI_1
        VI_2
    }
    notify_master /usr/local/keepalived/sbin/to_master.sh    # 切换为master时执行的脚本
    notify_backup /usr/local/keepalived/sbin/to_backup.sh    # 切换为backup时执行的脚本
    notify_fault /usr/local/keepalived/sbin/fault.sh    # 出错时执行的脚本
    notify /usr/local/keepalived/sbin/notify.sh    # 任何状态切换时都会执行该脚本,且在以上三个脚本执行完成之后执行
    smtp_alert    # 是否开启邮件通知
}
  1. vrrp_server区域
virtual_server 192.168.200.100 443 {
    delay_loop 6    # 延迟轮询时间(单位秒)
    lb_algo rr|wrr|lc|wlc|lblc|sh|dh    # 后端调试算法
    lb_kind NAT|DR|TUN    # LVS调度类型
    persistence_timeout 50    # 会话保持时间
    persistence_granularity    # lvs会话保持粒度
    protocol TCP    # 使用的协议

	sorry_server    # 指定备用机,所有的realserver失败后启用

    real_server 192.168.201.100 443 {    # 真正提供服务的服务器
        weight 1    #默认为1,0为失败
        inhibit_on_failure    # 在服务器健康检查失效时,将其设为0,而不是直接从ipvs中删除
        notify_up /usr/local/keepalived/sbin/notify_up.sh    # 当服务器健康检查成功时执行的脚本
        notify_down /usr/local/keepalived/sbin/notify_down.sh    # 当服务器健康检查失败时执行的脚本
        SSL_GET|HTTP_GET {
            url {    # 检查url,可指定多个
              path /    # 请求realserver上的路径
              digest ff20ad2481f97b1754ef3e12ecd3a9cc    # 使用genhash计算出的摘要信息
              status_code    # 检查的http状态码
            }
            connect_port 80    # 健康检查,如果端口通,则认为服务器正常
            connect_timeout 3    # 超时时长
            retry 3    # 重试次数
            delay_before_retry 3    # 下次重试的时间延迟
        }
        TCP_CHECK {
			connect_timeout 3    # 超时时间
			retry 3    # 重试次数
			connect_port 80    # 健康检查端口
			delay_before_retry 3    # 下次重试的时间延迟 
		}
		SMTP_CHECK {
			host {
				connect_ip    # 连接ip
				connect_port    #连接端口
			}
			connect_timeout 3    # 超时时间
			retry 3    # 重试次数
			delay_before_retry 3    # 下次重试的时间延迟
		}
		MISC_CHECK {
			misc_path    # 外部脚本路径
			misc_timeout    # 脚本执行超时时间
			misc_dynamic    # 如果设置该项,则退出状态码会用来动态调整服务器的权重,返回0,则正常不修改,返回1,则权重改为0
		}
    }
}

注:当环境复杂时,会导致keepalived配置文件中内容繁多,不易进行管理,可以将不同集群的配置放在独立的子配置文件中,利用include指令在主配置文件中引入子配置文件