通过vrrp协议定时广播请求,只要vip所在节点断了就飘移vip,实现业务高可用,这种场景和CLB有什么区别?
- CLB更适合负载分担场景,功能更全面
- HAVIP更适合主备冗余场景,中间不需要任何设备转发请求,链路更短
- CLB和HAVIP都不提供主动出去能力,都是被动提供服务
本文将使用主流高可用软件keepalived
配置havip
一、创建havip
位置:私有网络控制台
-> IP与网卡
-> 高可用虚拟IP
选择对应私有网络和子网,IP地址自动或者手动,这里手动填写为10.0.1.100
,将用这个IP作为VIP
创建好的状态:未绑定服务器
不要误解,这里并不是在控制台手动绑定,需要在实例机器上创建keepalived并配置好该VIP,配置成功后这里的状态会自动转为成功。
二、安装keepalived
用了Centos
和Debian
两台测试机,从软件源安装keepalived
即可,如果你想编译安装也可以,但确保keepalived
版本在1.2.24以上,别问为什么,官方推荐。
以下是Debian
的popcon
统计的keepalived
包在Debian
系中流行度趋势,可见从04年以来一直坚挺,到目前仍然为主流高可用软件。
软件源直接装,redhat系列则使用yum:
apt install keepalived -y #Debian系
yum install keepalived -y #Redhat系
编译安装,各个版本地址: http://www.keepalived.org/download.html
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:
$ grep node /etc/hosts
10.0.1.4 node1
10.0.1.2 node2
$
同时确保iptables
、selinux
等不会成为阻碍
$ iptables -F
$ iptables -X
$ vim /etc/selinux/config
SELINUX=disabled #修改此参数,重启后生效
$ setenforce 0 #临时生效,不需要重启
1.配置MASTER
首先确保网卡是否支持多播:
$ 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
说明支持多播,开启/关闭多播方法:
$ 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
复制一份示例配置过来:
root@node1:~$ cd /etc/keepalived/
root@node1:/etc/keepalived$ cp /usr/share/doc/keepalived/samples/keepalived.conf.sample ./keepalived.conf
#去掉后缀让它成为主配置文件
root@node1:/etc/keepalived$
编辑配置文件如下:
$ 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
同理确认多播是否开启,配置BACKUP
的keepalived
文件:
$ 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.启动服务并测试验证
$ systemctl start keepalived
$ ip addr show eth0
可以看到vip已经在主节点node1上了,并持续发ARP探测IP是否正常,同时腾讯云控制台显示的HAVIP
状态自动转成了正常状态:
抓包可以看到,主备节点每秒像广播地址发送一次自己的VRRP状态,通过此交互来协商漂移VIP
4.HAVIP绑定EIP提供公网能力
可选项,如果有公网需求,给HAVIP绑定一个EIP即可。