keepalived主备高可用

keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议

keepalived适合为没有状态变化的服务提供主备功能,例如:LVS、Nginx、Mycat、各种代理等。有状态变化的服务需要做主从同步。保证backup上线时与master状态基本相同。

基本工作流程:VIP漂移

将N台提供相同功能/服务的PC/服务器组成一个路由器组(vrrp_instance),这个组里面有一个master和多个backup,全部配置相同的VIP(虚拟IP),keepalived启动后VIP会加入master的网卡,master通过VIP对外提供服务。master会主动发VRRP广播,当backup一定时间收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master,新master在网卡中加入配置的VIP接受外部请求。当master重新启动后backup自动下线进入待机状态(亦可配置成不自动替换)。这样的话就可以保证路由器组的高可用了。

基本配置说明

安装:CentOS 6.4以上使用yum安装

 yum install keepalived -y
keepalived.conf 
global_defs 全局配置
vrrpd
    1. vrrp_script添加一个周期性执行的脚本。脚本的退出状态码会被调用它的所有的VRRP Instance记录。
    2. vrrp_sync_group将所有相关的VRRP实例定义在一起,作为一个VRRP Group,如果组内的任意一个实例出现问题,都可以实现Failover
    3. garp_group
    4. vrrp_instance
vim /etc/keepalived/keepalived.conf

#主机配置:(从机主要不同点:router_id、state、priority)
global_defs {
   notification_email {
     linux@linux.com   #报警接收邮箱
     failover@firewall.loc
   }
   notification_email_from root@linux.com    #报警发送邮箱
   smtp_server 127.0.0.1                     #指定smtp邮件服务器地址
   smtp_connect_timeout 30                   #指定smtp连接超时时间
   router_id LVS_1                           #负载均衡唯一标识,在局域网内应该是唯一的。故障发生时,邮件通知会用到     
}

vrrp_instance VI_1 {                                     #VRRP实例名称 主备一致
          state MASTER                                   #初始状态,备用服务器上为BACKUP 
          interface eth0                                 #监听本机的是eth0网卡端口,用来发VRRP包做心跳检测(ifconfig查看本机网卡接口、要开放广播)
          virtual_router_id 51                           #虚拟路由ID,取值在0-255之间,用来区分多个instance的VRRP组播,同一网段内ID不能重复;主备一致
          advert_int 1                                   #检查间隔默认为1秒,即1秒进行一次master选举(可以认为是健康查检时间间隔)
          priority 100                                   #优先级,备用服务器上为90
          nopreempt                                      #设置为不抢占(旧主机重新上线后,不替换当前主机)。默认是抢占
          authentication {                               #通讯秘钥 主备一致    
            auth_type PASS                               #默认是PASS类认证
            auth_pass 1111                               #密码只识别前8位
          }

          virtual_ipaddress {                            #虚拟ip地址,可以有多个地址每个地址占一行,不需要子网掩码,主备一致
            192.168.1.217                                #VIP地址(对外暴露),IP添加到eth0网卡          
            192.168.1.218/24                             #24位掩码
            192.168.1.219 dev eth0
          }
          #virtual_ipaddress 中的ip需要通过ip add指令查看绑定状态(ipconfig看不到)。
          #相当于linux指令 ip addr add 192.168.1.217 dev eth0
          #正常情况只有MASTER的网卡中会有VIP,从机没有。当出现多机网卡存在VIP时,可能出现了脑裂问题
}

启动

systemctl start keepalived(在yum安装时直接使用此命令启动服务)

Shell脚本

正常情况下当master的keepalived停止运行时,backup收不到master的心跳会触发优先级最高的backup变成新master,VIP漂移到新master。

但如果希望keepalived监控本机的某个应用,应用挂掉后本机keepalived也停止运行主动触发VIP漂移。

此时需要keepalived执行sh脚本,检查目标功能/服务是否正常,若异常主动停止本机keepalived触发VIP漂移。

sh可以检查Nginx、Mysql、Http服务等等...

脑裂

比如两台keepalived一主一备,中间通信中断了,但是两台机器都正常运转。此时主机还正常可用,从机检测不到主机升级为主机。出现了一个集群双主的情况。

1、添加冗余的心跳线(网线/串口等),增加网络可高度,例如:双心跳线(心跳线也HA),,尽量减少“裂脑”发生几率;

2、监控keepalived从机出现ping不通主机IP时,无论主机是否真的挂了,从机可能会变成主机,已经出现脑裂风险了。此时发送报警人工检查,或是通过程序尝试强制终止主机上的keepalived进程。

      注意监控从机比较保险。如果监控主机,主机ping不通从机,并不能确定从机是已经切换为主机了还是真的挂了。不确定是否真的存在脑裂风险。

 

上一篇:2021-10-11


下一篇:LVS负载均衡-------DR模式部署&keepalived健康检测的部署