keepalived配置文件详情
一、 配置文件组成
keepalived配置文件有三部分组成,分别为:
- 全局配置(GLOBAL CONFIGURATION)
包含配置文件中的global_defs、static_ipaddress、static_route区域,负责定义邮件的相关配置、route_id、vrrp配置、多播地址、节点的ip和路由信息等 - VRRP配置(VRRP CONFIGURATION)
包含配置文件中的vrrp_script、vrrp_instance、vrrp_sync_group区域,负责定义每个vrrp虚拟路由器 - LVS配置(LVS CONFIGURATION)
包含配置文件中的virtual_server_group、virtual_server区域,负责lvs集群配置
二、 配置文件详情
- 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(需要该用户存在)
}
- 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 # 执行成功指定次数,就认为节点恢复正常
}
- 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
}
}
- 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 # 是否开启邮件通知
}
- 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指令在主配置文件中引入子配置文件