HAVIP+Keepalived高可用搭建

2021-08-04 00:32:19 浏览数 (1)

通过vrrp协议定时广播请求,只要vip所在节点断了就飘移vip,实现业务高可用,这种场景和CLB有什么区别?

  • CLB更适合负载分担场景,功能更全面
  • HAVIP更适合主备冗余场景,中间不需要任何设备转发请求,链路更短
  • CLB和HAVIP都不提供主动出去能力,都是被动提供服务

本文将使用主流高可用软件keepalived配置havip

一、创建havip

位置:私有网络控制台 -> IP与网卡 -> 高可用虚拟IP

选择对应私有网络和子网,IP地址自动或者手动,这里手动填写为10.0.1.100,将用这个IP作为VIP

创建好的状态:未绑定服务器

不要误解,这里并不是在控制台手动绑定,需要在实例机器上创建keepalived并配置好该VIP,配置成功后这里的状态会自动转为成功。

二、安装keepalived

用了CentosDebian两台测试机,从软件源安装keepalived即可,如果你想编译安装也可以,但确保keepalived版本在1.2.24以上,别问为什么,官方推荐。

以下是Debianpopcon统计的keepalived包在Debian系中流行度趋势,可见从04年以来一直坚挺,到目前仍然为主流高可用软件。

软件源直接装,redhat系列则使用yum:

代码语言:txt复制
apt install keepalived -y #Debian系
yum install keepalived -y #Redhat系

编译安装,各个版本地址: http://www.keepalived.org/download.html

代码语言:txt复制
wget https://www.keepalived.org/software/keepalived-2.2.2.tar.gz #目前官方最新stable版本
tar xf keepalived-2.2.2.tar.gz  #解压
./configure #不指定--prefix路径默认装在/usr/local
make && make install

编译安装和从软件源安装的主要区别是安装路径不一样,版本不一样,前者更灵活,后者更便捷,当然如果你想用dpkg打包deb也不是不可以,或者自己搭建私有软件源,keepalived版本和配置你都可以高度自定义,这里不一一赘述,主要讲从软件源安装的方式来做配置。

三、配置MASTER和BACKUP

测试环境如下:

服务器节点

内网IP

VIP(漂移)

MASTER

node1

10.0.1.4

10.0.1.100

BACKUP

node2

10.0.1.2

10.0.1.100

master和backup都配置下/etc/hosts,确保node对应ip:

代码语言:txt复制
$ grep node /etc/hosts
10.0.1.4 node1
10.0.1.2 node2
$

同时确保iptables/selinux等不会成为阻碍

代码语言:txt复制
$ iptables -F 
$ iptables -X
$ vim /etc/selinux/config
SELINUX=disabled #修改此参数,重启后生效
$ setenforce 0 #临时生效,不需要重启

1.配置MASTER

首先确保网卡是否支持多播:

代码语言:txt复制
$ ifconfig eth0  
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.1.4  netmask 255.255.255.0  broadcast 10.0.1.255
        inet6 fe80::5054:ff:fe51:1628  prefixlen 64  scopeid 0x20<link>
        ether 52:54:00:51:16:28  txqueuelen 1000  (Ethernet)
        RX packets 7042  bytes 5398491 (5.1 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 3789  bytes 229307 (223.9 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

$ 

flags有MULTICAST说明支持多播,开启/关闭多播方法:

代码语言:txt复制
$ ip link set multicast on dev eth0  #开启多播
$ ip link set multicast off dev eth0 #关闭多播

从软件源安装的,keepalived配置文件默认路径:/etc/keepalived/keepalived.conf

同时Debian系下的/etc/keepalived/没有keepalived.conf文件,可以从/usr/share/doc/keepalived/samples/keepalived.conf.sample复制一份示例配置过来:

代码语言:txt复制
root@node1:~$ cd /etc/keepalived/
root@node1:/etc/keepalived$ cp /usr/share/doc/keepalived/samples/keepalived.conf.sample ./keepalived.conf 
#去掉后缀让它成为主配置文件
root@node1:/etc/keepalived$

编辑配置文件如下:

代码语言:txt复制
$ vim keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {
        root@localhost
   }
   notification_email_from keepalived@localhost
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id node1
   vrrp_mcast_group4 224.1.101.33   ! 组播地址,只要是224开头即可
}

vrrp_instance VI_1 {
    state MASTER      !主节点
    priority 100      !优先级
    interface eth0    !指定网卡
    virtual_router_id 33
    nopreempt         !非抢占模式,当vip漂移到backup后,即使master正常恢复业务,vip也不漂移到master
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass Rokasvip  ! 随机字符串即可
}
    virtual_ipaddress {
        10.0.1.100/24 dev eth0 label eth0:0   ! 指定申请的havip地址,用网卡别名配置即可
    }
}
$

2.配置BACKUP

同理确认多播是否开启,配置BACKUPkeepalived文件:

代码语言:txt复制
$ vim keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {
        root@localhost
   }
   notification_email_from keepalived@localhost
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id node1
   vrrp_mcast_group4 224.1.101.33   ! 组播地址,只要是224开头即可
}

vrrp_instance VI_1 {
    state BACKUP     !备节点
    priority 96      !优先级
    interface eth0   !指定网卡
    virtual_router_id 33
    nopreempt         !非抢占模式,当vip漂移到backup后,即使master正常恢复业务,vip也不漂移到master
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass Rokasvip  ! 随机字符串即可
}
    virtual_ipaddress {
        10.0.1.100/24 dev eth0 label eth0:0   ! 指定申请的havip地址,用网卡别名配置即可
    }
}
$

3.启动服务并测试验证

代码语言:txt复制
$ systemctl start keepalived
$ ip addr show eth0

可以看到vip已经在主节点node1上了,并持续发ARP探测IP是否正常,同时腾讯云控制台显示的HAVIP状态自动转成了正常状态:

抓包可以看到,主备节点每秒像广播地址发送一次自己的VRRP状态,通过此交互来协商漂移VIP

4.HAVIP绑定EIP提供公网能力

可选项,如果有公网需求,给HAVIP绑定一个EIP即可。

0 人点赞