通过vrrp协议定时广播请求,只要vip所在节点断了就飘移vip,实现业务高可用,这种场景和CLB有什么区别?
本文将使用主流高可用软件keepalived
配置havip
位置:私有网络控制台
-> IP与网卡
-> 高可用虚拟IP
选择对应私有网络和子网,IP地址自动或者手动,这里手动填写为10.0.1.100
,将用这个IP作为VIP
创建好的状态:未绑定服务器
不要误解,这里并不是在控制台手动绑定,需要在实例机器上创建keepalived并配置好该VIP,配置成功后这里的状态会自动转为成功。
用了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
版本和配置你都可以高度自定义,这里不一一赘述,主要讲从软件源安装的方式来做配置。
测试环境如下:
服务器节点 | 内网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 #临时生效,不需要重启
首先确保网卡是否支持多播:
$ 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地址,用网卡别名配置即可 } } $
同理确认多播是否开启,配置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地址,用网卡别名配置即可 } } $
$ systemctl start keepalived $ ip addr show eth0
可以看到vip已经在主节点node1上了,并持续发ARP探测IP是否正常,同时腾讯云控制台显示的HAVIP
状态自动转成了正常状态:
抓包可以看到,主备节点每秒像广播地址发送一次自己的VRRP状态,通过此交互来协商漂移VIP
可选项,如果有公网需求,给HAVIP绑定一个EIP即可。
一、前言 大家好,我是崔艳飞。工作中有时需要把A表中的经纬度点,从B表中匹配一...
在24小时不停运转的工厂里,突发的停机事件会造成不小的损失。随着智能技术的发...
软件开发可以描述为一个复杂的系统过程,需要在各个技术领域以及相关业务方面的...
作者 | 风卿 微服务引擎 MSE 专业版发布 支持 Nacos2.0 相比基础版 专业版具有更...
疫情过后,人工智能逐渐从具体应用进化成为企业的一种数字化能力。只有持续进化 ...
信息价值观是指人们在参与信息实践的过程中,对信息及其信息技术所形成的态度和...
TIOBE 公布了 2021 年 2 月的编程语言排行榜。 有人说,IT 行业在不断变化,每天...
本手册基于 云容器引擎 实践所编写,用于指导您已有应用的 容器化改造 。 什么是...
作者 | 彭南光(光南) 来源 | 阿里巴巴云原生公众号 千里之堤,溃于蚁穴。绪论 ...
“前端困境” 不论是中大型组织 还是小型初创公司 伴随业务版图的逐步拓张 大家...