01 高可用keepalived入门
文章目录
1、高可用基本概述
1.1 什么是高可用
- 简单理解:两台机器启动着相同的业务系统,当有一台机器宕机,另外一台服务器能快速的接管,对于访问的用户是无感知的。
- 专业理解:高可用是分布式系统架构设计中必要的一环,主要目的, 减少系统不能对外提供服务的时间。假设系统一直能够提供服务,我们说系统的可用性是100%。如果系统每运行100个时间单位,会有1个时间单位无法提供服务,我们说系统的可用性是99%。高可用参考URL
1.2 高可用使用什么工具
- 通常服务的高可用采用
keepalived
软件实现;
1.3 高可用是如何实现的
keepalived
软件,是基于VRRP
协议实现的。VRRP
虚拟路由冗余协议,主要用于解决单点故障问题(所谓的单点故障,指的是当一个对外的业务系统发生故障,会直接造成整个集群瘫痪)。
1.4 VRRP诞生背景
例如:公司的网络是通过网关转换进行上网的(如下图所示),那如果该路由器故障了,网关将无法转发报文,此时所有人都将无法上网,这么时候怎么办呢?
解决方案1:增加一个 Backup
路由,然后修改用户PC
的网关指向为Backup
,但这里有两个问题
- 1、如果需要修改的PC数量特别多会非常麻烦。
- 2、一旦用户将指向都修改为
Backup
,那Master
如果恢复了该如何处理,是改回来还是继续使用?
解决方案2:直接将 Backup
网关的IP地址与Master
网关的IP地址配置为一样的不就可以了吗? (如下图所示)
其实这种方式也不行:
因为PC
在第一次通信时,是通过ARP广播的方式获取到Master
网关的Mac
地址和IP
地址,同时PC
还会将Master
网关对应IP
与MAC
地址存储至ARP
缓存表中;
所以当PC
与网关进行通信时,会直接读取ARP
缓存表中的MAC
地址与IP
地址,进行数据包转发,这也就意味着当Master
网关故障,就算我们将Backup
网关的IP
地址修改为与Master
一样的IP
,最终PC
的数据包还是会转发给Master
,不会转发给 Backup
。(除非PC
的ARP
缓存表过期,在次发起ARP
广播的时候才能正确获取Bakcup
的Mac
地址与对应的IP
地址。或者手动清理ARP缓存表)
1.5 VRRP实现原理
那如何才能做到出现故障自动转移,此时VRRP就应运而生;
VRRP
其实是通过软件或硬件的形式在Master
和Backup
外层增加一个虚拟MAC
地址(简称VMAC
)、以及虚拟IP地址(简称VIP
);
那么在这种情况下,当PC
请求VIP
的时候,无论是Master
处理还是Backup
处理,PC
仅会在ARP
缓存表中记录VMAC
与VIP
的对应关系。
VRRP初始状态:假定VIP和VMAC目前绑定在MASTER的节点上
- 1、当用户访问这个 VIP 时,会获取对应IP的MAC,而后请求会被送往Master节点;
- 2、因此,用户的所有请求都会送往Master节点;
- 3、而后由Master节点路由给互联网;
VRRP故障切换:如果Master节点发生故障,VRRP会进行如下操作:
- 1、将移出Master节点上的VIP地址;
- 2、将VIP重新绑定到可用的Backup节点上;
- 3、通知客户端VIP的VMAC发生了变化,确保所有未来的数据包都能正确送达新的主节点;
2、高可用Keepalived
2.1 Keeplaived基本介绍
Keepalived
基于 vrrp
协议实现,原生设计是为了实现ipvs
服务的高可用,也就是LVS;
- 通过
vrrp
协议,可以完成地址漂移技术; - 为
vip
地址所在的节点生成ipvs
规则(需要在Keepalived配置文件中定义); - 为
ipvs
集群的RS
节点做健康状态检测;
2.2 Keepalived核心组件
vrrp stack
:用来实现vrrp
协议重要组件之一;Netlink
接口:设置和删除网络接口上的虚拟IP
地址;ipvs wrapper
:使用getsock
和setsock
来建立IPVS
规则;checkers
:监测RS
节点的方式,支持tcp、http、ssl
等;system call
:支持启动额外系统脚本的功能;SMTP
:为当发生角色状态转换时,发送事件通知邮件;WatchDog
:监控进程- 控制组件:配置文件分析器
- 内存管理组件
1、首先VRRP会通过NetLink创建VIP,
2、然后使用ipvs wrapper
为对应的VIP建立LVS负载均衡转发规则,建立后通过Checkes对其进行健康检查;
3、如果自带的检查规则无法满足,可以使用system call
自行定义检查脚本;
4、WatchDog实时监测着Checkers和VRRPStack的状态,如果keepalived出现了故障,发生了切换,可以通过SMTP通知给管理人员。
2.3 Keepalived核心概念
-
虚拟路由器:由一个
Master
路由器和多个Backup
路由器组成; -
Master
路由器:虚拟路由器中承担报文转发任务的路由器; -
Backup
路由器:Master
路由器出现故障时,能够代替Master
路由器工作的路由器; -
VRID
:虚拟路由器的标识,由相同VRID
的一组路由器构成一个虚拟路由器; -
组播:组播是有特定的成员,是一种可控的广播,组播成员需要加入“组播组”才能收到该组播的信息。
-
虚拟
IP
地址:虚拟路由器的IP
地址,一个虚拟路由器可以拥有一个或多个IP
地址; -
虚拟
MAC
地址:一个虚拟路由器拥有一个虚拟MAC
地址; -
优先级:
VRRP
根据优先级来确定虚拟路由器中每台路由器的地位; -
抢占式:如果
Master
故障,Backup
自动接管,当Master
恢复了会将VIP
地址抢回来; -
非抢占式:如果
Master
故障,Backup
自动接管,当Master
恢复则自动转为Backup
,不会抢占VIP
;
2.3 Keeplaived应用场景
之所以需要使用 Keepalived
,通常是因为我们的业务系统需要保证 7x24
小时不DOWN机;
- 比如公司内部
OA
系统,每天公司人员都需要使用,则不允许Down
机; - 比如公司对外发布的业务系统(哈啰单车),每天有大量的用户使用,是不可以出现故障的;
也就是说作为企业的业务系统,要保证随时随地都可以使用,不可以中断
注意:同地域实现高可用,如何该地域出现了断电,任然是会造成整体不可用。
3、Keeplaived安装配置
3.1 环境准备
系统环境 | 角色 | 主机名称 | eth0 | eth1 |
---|---|---|---|---|
RockyLinux9 | Master | proxy01.newy.net | 10.0.0.5 | 172.16.1.5 |
RockyLinux9 | Backup | proxy02.newy.net | 10.0.0.6 | 172.16.1.6 |
RockyLinux9 | VIP地址 | 10.0.0.10 |
3.2 安装Keepalived
在 Master
以及 Backup
节点分别安装 Keepalived
[root@lb01 ~]# yum install keepalived -y
[root@lb02 ~]# yum install keepalived -y
3.3 配置Master
1、编辑Master角色的Keepalived配置文件
[root@lb01 ~]# cat /etc/keepalived/keepalived.conf
global_defs {
router_id lb01 # 当前物理设备的标识名称
vrrp_mcast_group4 224.0.0.18 # 组播地址,default 224.0.0.18
}
vrrp_instance VI_1 {
state MASTER # 角色状态;
interface eth0 # 绑定当前虚拟路由使用的物理接口;
virtual_router_id 50 # 当前虚拟路由标识,VRID;
priority 200 # 当前物理节点在虚拟路由中的优先级;
advert_int 1 # vrrp通告时间间隔,默认1s;
authentication {
auth_type PASS # 密码类型,简单密码;
auth_pass 1111 # 密码不超过8位字符;
}
virtual_ipaddress {
10.0.0.10 dev eth0 # VIP地址
}
}
2、启动Keepalived
[root@lb01 ~]# systemctl start keepalived
3.4 配置Backup
1、编辑Backup角色的Keepalived配置文件
[root@lb02 ~]# cat /etc/keepalived/keepalived.conf
global_defs {
router_id lb02
vrrp_mcast_group4 224.0.0.18
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 50
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.10
}
}
2、启动Keepalived
[root@lb02 ~]# systemctl start keepalived
3.5 地址漂移测试
检查 keepalived
的 VIP
地址能否在两个节点间实现漂移;
1、在 Master
上检查是否有VIP,如果有,则停止Keepalived
[root@lb01 ~]# ip addr |grep 10.0.0.10
inet 10.0.0.10/32 scope global eth0
[root@lb01 ~]# systemctl stop keepalived
2、检查Backup节点是否有VIP地址
[root@lb02 ~]# ip addr |grep 10.0.0.10
inet 10.0.0.10/32 scope global eth0
3、此时启动 Master
上的 Keepalived
,会发现 VIP
被强行抢占;
[root@lb01 ~]# systemctl start keepalived
[root@lb01 ~]# ip addr |grep 10.0.0.10
inet 10.0.0.10/32 scope global eth0
3.6 客户端验证
1、验证发生故障时,是否会自动更新客户端的ARP信息
# 默认VIP的MAC是MAster节点
[root@node02 ~]# arp -a
? (10.0.0.10) at 52:54:00:65:4c:5d [ether] on eth0
# 关闭Master后会发现MAC地址切换到Backup节点
[root@node02 ~]# arp -a
? (10.0.0.10) at 52:54:00:ea:ea:bb [ether] on eth0
2、使用tcpdump抓包,查看Keepalived地址切换过程
[root@node02 ~]# tcpdump -i eth0 -nn host 224.0.0.18
# 正常情况下Master会发送组播信息
18:55:55.639965 IP 10.0.0.3 > 224.0.0.18: VRRPv2, Advertisement, vrid 50, prio 200, authtype simple, intvl 1s, length 20
18:55:56.723410 IP 10.0.0.3 > 224.0.0.18: VRRPv2, Advertisement, vrid 50, prio 200, authtype simple, intvl 1s, length 20
18:56:02.140594 IP 10.0.0.3 > 224.0.0.18: VRRPv2, Advertisement, vrid 50, prio 200, authtype simple, intvl 1s, length 20
# 当Master故障会组播通知其优先级为0
18:56:04.968775 IP 10.0.0.3 > 224.0.0.18: VRRPv2, Advertisement, vrid 50, prio 0, authtype simple, intvl 1s, length 20
# 此时Backup优先级高于Master,因此地址会被Backup接管
18:56:05.629475 IP 10.0.0.4 > 224.0.0.18: VRRPv2, Advertisement, vrid 50, prio 100, authtype simple, intvl 1s, length 20
18:56:06.713036 IP 10.0.0.4 > 224.0.0.18: VRRPv2, Advertisement, vrid 50, prio 100, authtype simple, intvl 1s, length 20
18:56:07.796505 IP 10.0.0.4 > 224.0.0.18: VRRPv2, Advertisement, vrid 50, prio 100, authtype simple, intvl 1s, length 20
18:56:08.879985 IP 10.0.0.4 > 224.0.0.18: VRRPv2, Advertisement, vrid 50, prio 100, authtype simple, intvl 1s, length 20