Keepalived高可用应用

一、软件安装配置

  1. 软件安装

yum install -y keepalived

  2. 服务配置

[root@lb01 ~]# cat /etc/keepalived/keepalived.conf 
! Configuration File for keepalived

global_defs {                  	--- 全局配置部分
   notification_email {			--- 设置发送邮件信息的收件人
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from southbay@163.com   --- 设置连接的邮件服务器信息
   smtp_server 163.smtp.xxx_
   smtp_connect_timeout 30 
   router_id LVS_DEVEL           --- 高可用集群主机身份标识(集群中主机身份标识名称不能重复)
}

vrrp_instance southbay {           --- Vrrp协议家族
    state MASTER                 --- 标识所在家族中的身份 (MASTER/BACKUP)
    interface eth0               --- 指定虚拟IP地址出现在什么网卡上
    virtual_router_id 51         --- 标识家族身份信息 多台高可用服务配置要一致 
    priority 100                 --- 设定优先级 优先级越高,就越有可能成为主
    advert_int 1                 --- 定义组播包发送的间隔时间(秒)  主和备配置一样  1
    authentication {             --- 实现通讯需要有认证过程
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {          --- 配置虚拟IP地址信息
        192.168.200.16
        192.168.200.17
        192.168.200.18
    }
}

二、高可用服务应用

  1. 高可用服务常见异常问题---脑裂问题

       由于某些原因,导致两台高可用服务器对在指定时间内无法检测到对方的心跳消息,各自取得资源及服务的所有权,而此时的两台高可用服务器对都还活着并在正常运行,这样就会导致同一个IP或服务在两端同时存在而发生冲突,最严重的是两台主机占用同一个VIP地址,当用户写入数据时可能会分别写入到两端,这可能会导致服务器两端的数据不一致或造成数据丢失,这种情况就被称为裂脑。

    一般来说,导致裂脑发生的原因有以下几种:
(1)高可用服务器对之间心跳线链路故障,导致无法正常通信。
       ロ心跳线坏了(包括断了、老化)。
       ロ网卡及相关驱动坏了,IP配置及冲突问题(网卡直连)。
       ロ心跳线间连接的设备故障(网卡及交换机)。
       ロ仲裁的机器出问题(采用仲裁的方案)。
(2)高可用服务器对上开启了 Iptables防火墙阻挡了心跳消息传输。
(3)高可用服务器对上心跳网卡地址等信息配置不正确,导致发送心跳失败。
(4)其他服务配置不当等原因,如心跳方式不同、心跳广播冲突、软件BUG等。
(5)Keepalived配置里同一VRRP实例如果 virtual_router_id参数两端配置不一致,也会导致裂脑问题发生。 

    在实际生产环境中,我们可以从以下几个方面来防止裂脑问题发生:
1)同时使用串行电缆和以太网电缆连接,同时用两条心跳线路,这样一条线路坏了另一个还是好的,依然能传送心跳消息。
2)当检测到裂脑时强行关闭一个心跳节点(这个功能需特殊设备支持,如 Stonith、fence)。相当于备节点接收不到心跳消息,发送关机命令通过单独的线路关闭主节点的电源。
3)做好对裂脑的监控报警(如邮件及手机短信等或值班),在问题发生时人为第时间介入仲裁,降低损失。倒如,百度的监控报警短信就有上行和下行的区别。报警信息报到管理员手机上,管理员可以通过手机回复对应数字或简单的字符串操作返回给服务器,让服务器根据指令自动处理相应故障,这样解决故障的时间更短。

    常见的解决 Keepalived裂脑的方案
       作为互联网应用服务器的高可用,特别是前端Web负载均衡器的高可用,裂脑的问题对普通业务的影响是可以忍受的,如果是数据库或者存储的业务,一且出现裂脑问题就非常严重了。因此,可以通过增加冗余心跳线路来避免裂脑问题的发生,同时加强对系统的监控,以便裂脑发生时人为快速介人解决问题。
ロ如果开启防火墙,一定要让心跳消息通过,一般通过允许IP段的形式解决
ロ可以拉一条以太网网线或者串口线作为主被节点心跳线路的冗余
ロ开发监测程序通过监控软件(如 Nagios)监测裂脑

    下面是生产场景下检测裂脑故障的一些思路:
(1)简单判断的思想:只要备节点出现VIP就报警,这个报警有两种情况,一是主机宕机了备机接管了;二是主机没宕,裂脑了。不管属于哪个情况都进行报警。然后由人工查看判断及解决。
(2)比较严的判断:备节点出现对应VIP。并且主节点及对应服务(如果能远程连接主节点查看是否有VIP就更好了)还活着,就说明发生裂脑了。

     脑裂报警脚本:

[root@lb02 scripts]# cat check_split_brain.sh
#!/bin/sh
lb01_vip=10.0.0.3
lb01_ip=10.0.0.5
while true
do
ping -c 2 -W 3 $lb01_ip &>/dev/null
    if [ $? -eq 0 -a 'ip add|grep "$lb01_vip"|wc -l' -eq 1]
      then
         echo "lb01 is split brain.warning"
else
         ehco "lb01 is ok"
fi
sleep 5
done

  2. 高可用集群双主配置

    a. 配置第一台服务器

[root@lb01 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
 global_defs {
   router_id lb01
}


vrrp_instance V1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 150
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
     10.0.0.3/24
    }
}
vrrp_instance V2 {
    state BACKUP
    interface eth0
    virtual_router_id 52
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
     10.0.0.4/24
    }
}

    b. 配置第二台服务器

[root@lb02 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
   router_id lb02
}

vrrp_instance V1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.0.0.3/24
    }
}
vrrp_instance V2 {
    state MASTER
    interface eth0
    virtual_router_id 52
    priority 150
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.0.0.4/24
    }
}

  3. 高可用服务安全配置

[root@lb01 ~]# cd /etc/nginx/conf.d/
[root@lb01 conf.d]# vim www.conf
upstream southbay {
   server 10.0.0.7:80;
   server 10.0.0.8:80;
   server 10.0.0.9:80;
}
server {
    listen       10.0.0.3:80;
    server_name  www.southbay.com;
    location / {
       proxy_pass http://southbay;
       proxy_set_header Host $host;
       proxy_set_header X-Forwarded-For $remote_addr;
       proxy_next_upstream error timeout http_404 http_502 http_403;
    }
}
server {
    listen       10.0.0.4:80;
    server_name  bbs.southbay.com;
    location / {
       proxy_pass http://southbay;
       proxy_set_header Host $host;
       proxy_set_header X-Forwarded-For $remote_addr;
    }
}

# 设置网卡上没有的地址
[root@lb01 ~]# echo 'net.ipv4.ip_nonlocal_bind = 1' >>/etc/sysctl.conf
[root@lb01 ~]# sysctl -p

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值