Keepalived 配置文件说明

! Configuration File for keepalived

#全局定义模块
global_defs {
   notification_email {                         #报警邮件
     root@localhost
   }
   notification_email_from Alexandre.Cassen@firewall.loc          #通知邮件从哪个地址发出
   smtp_server 127.0.0.1                                          #通知邮件的smtp地址
   smtp_connect_timeout 30                                        #连接smtp服务器的超时时间
   router_id LVS_M                               #LVS负载均衡器标识(在一个网络内,它应该是唯一的)(#标识本节点的字条串,故障发生时,邮件通知会用到)
}

vrrp_script chk_haproxy {
   script "/usr/local/chk_haproxy.sh"           #在这里添加脚本链接
   #script "killall -0 haproxy"
   interval 3     #脚本执行间隔
   fall 2         #检测到失败的最大次数(也就是说如果请求失败两次,就认为此节点资源发生故障,将进行切换操作。)
   rise 1         #标示如果请求一次成功,就认为此节点资源恢复正常。
   #weight -2                                    #脚本结果导致的优先级变更
}

#VRRP定义块
vrrp_instance VI_1 {
    state MASTER                                 #可以是MASTER或BACKUP,不过当其他节点keepalived启动时会将priority比较大的节点选举为MASTER
    interface ens33                              #对外提供服务的网络接口,用来发VRRP包
    #lvs_sync_daemon_inteface eth0               #设置lvs监听的接口 lvs_sync_daemon_inteface。负载均衡器之间的监控接口,类似于HA HeartBeat的心跳线。但它的机制优于Heartbeat,因为它没有“裂脑”这个问题,它是以优先级这个机制来规避这个麻烦的。在DR模式中,lvs_sync_daemon_inteface 与服务接口interface 使用同一个网络接口。
    virtual_router_id 51                         #取值在0-255之间,用来区分多个instance的VRRP组播, 同一网段中该值不能重复,并且同一个vrrp实例使用唯一的标识
    priority 150                                 #用来选举master的,要成为master,那么这个选项的值最好高于其他机器50个点,该项取值范围是1-255(在此范围之外会被识别成默认值100)
    advert_int 1                                 #发VRRP包的时间间隔,即多久进行一次master选举,可以认为是健康查检时间间隔,单位为秒
    nopreempt //不抢占,即允许一个 priority 比较低的节点作为 master,即使有 priority 更高的节点启动
    authentication {
        auth_type PASS                           #认证类型有PASS和AH(IPSEC),通常使用的类型为PASS,同一vrrp实例MASTER与BACKUP 使用相同的密码才能正常通信
        auth_pass 1111
    }
    track_script {
        chk_haproxy                              #添加脚本执行
    }
    virtual_ipaddress {                          #可以有多个VIP地址,每个地址占一行,不需要指定子网掩码,必须与RealServer上设定的VIP相一致
        192.168.199.199/24 dev ens33 label ens33:0
    }
    notify_master "/etc/keepalived/master.sh "
    notify_backup "/etc/keepalived/backup.sh "
    notify_fault "/etc/keepalived/fault.sh "
}

virtual_server 192.168.199.199 80 {               #虚拟服务器Virtual_Server,定义RealServer对应的VIP及服务端口
    delay_loop 6                                  #健康检查时间间隔(单位秒)
    lb_algo rr                                    #负载均衡调度算法,互联网应用常使用wlc或者rr.
    lb_kind DR                                    #负载均衡转发规则NAT/DR/TUN
    nat_mask 255.255.255.0
    #persistence_timeout 50                       #会话保持时间(单位秒)
    protocol TCP                                  #转发协议protocol.一般有TCP和UDP两种
    #sorry_server                                 #当所有RealServer宕机时,sorry server顶替

    real_server 192.168.199.202 80 {              #RealServer的IP和端口号(真实服务器)
        weight 1                                  #设置权重
        notify_down /etc/keepalived/bin/nginx.sh //检测到 realserver 的 nginx 服务 down 后执行的

脚本
        TCP_CHECK {
            connect_timeout 3                     #超时时长
            nb_get_retry 3                        #重试次数
            delay_before_retry 3                  #下次重试的时间延迟
            connect_port 80                       #健康检查端口

        }
    }
}

vrrp_script区域主要用来做健康检查的,当时检查失败时会将vrrp_instance的priority减少相应的值。


/usr/local/chk_haproxy.sh脚本配置
A=`ps -C haproxy --no-header |wc -l`
if [ $A -eq 0 ];then
  /usr/bin/nohup /usr/sbin/haproxy-systemd-wrapper -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid &  #haproxy 启动命令
  sleep 3
  if [ `ps -C haproxy --no-header |wc -l` -eq 0 ];then
    killall keepalived
  fi
fi

notify调用的相关脚本:
/etc/keepalived/master.sh
#!/bin/bash
LOGFILE=/var/log/keepalived-haproxy-state.log
echo "[Master]" >> $LOGFILE
date >> $LOGFILE

/etc/keepalived/backup.sh
#!/bin/bash
LOGFILE=/var/log/keepalived-haproxy-state.log
echo "[Backup]" >> $LOGFILE
date >> $LOGFILE

/etc/keepalived/fault.sh
#!/bin/bash
LOGFILE=/var/log/keepalived-haproxy-state.log
echo "[Fault]" >> $LOGFILE
date >> $LOGFILE

同步vrrp组vrrp_sync_group。作用:确定失败切换(FailOver)包含的路由实例个数。即在有2个负载均衡器的场景,一旦某个负载均衡器失效,需要自动切换到另外一个负载均衡器的实例是哪些?
实例组group。至少包含一个vrrp实例。

 

独孤天血

文章作者信息...

留下你的评论

*评论支持代码高亮<pre class="prettyprint linenums">代码</pre>

相关推荐