keepalived实现高可用
目录:
- 1、keepalived和nginx区别
- 2、keepalived高可用实现
- 2.1 Keeplaived基本介绍
- 2.2 Keepalived核心组件
- 2.3 Keepalived核心概念
- 2.3 Keeplaived应用场景
- 2.4 VRRP实现原理
- 3、Keeplaived安装配置
- 3.1 环境准备
- 3.2 安装Keepalived
- 3.3 配置Master
- 3.4 配置Backup
- 3.5 地址漂移测试
- 3.6 客户端验证
1、keepalived和nginx区别
Keepalived和Nginx的主要区别在于它们的功能和用途不同。
- Keepalived:
Keepalived是一个免费开源的软件,主要用于提供负载均衡和高可用性服务。它通过VRRP协议实现多台机器之间的故障转移服务,确保服务的连续性。Keepalived的核心功能包括负载均衡和高可用性,通过Linux虚拟服务内核模块(ipvs)实现负载均衡,通过VRRP协议实现高可用性。它的配置主要通过keepalived.conf文件进行设置。
Keepalived的主要应用场景包括确保关键服务的连续运行,通过自动故障转移机制提高服务的可靠性和稳定性。
- Nginx:
Nginx是一款轻量级的WEB服务器、反向代理服务器以及电子邮件服务器。它支持高并发连接,处理大量请求时表现出色。Nginx的核心模块包括错误日志记录、配置文件解析、事件驱动机制等,扩展模块则包括HTTP、邮件服务和Stream服务等,支持各种高级功能如SSL、压缩等。
Nginx的主要应用场景包括作为Web服务器、反向代理服务器以及负载均衡器,广泛应用于各种互联网服务和应用中,提供高性能的网络服务。
总结:
综上所述,Keepalived和Nginx虽然都可以用于提高服务的可用性和性能,但它们的侧重点不同。Keepalived更侧重于高可用性解决方案,而Nginx则是一个功能丰富的Web服务器和反向代理服务器,适用于需要高性能处理和多种网络服务的场景。
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机;
- 比如公司对外发布的业务系统(哈啰单车),每天有大量的用户使用,是不可以出现故障的;
也就是说作为企业的业务系统,要保证随时随地都可以使用,不可以中断
注意:同地域实现高可用,如何该地域出现了断电,任然是会造成整体不可用。
2.4 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发生了变化,确保所有未来的数据包都能正确送达新的主节点;
3、Keeplaived安装配置
3.1 环境准备
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 lb02vrrp_mcast_group4 224.0.0.18
}vrrp_instance VI_1 {state BACKUPinterface eth0virtual_router_id 50priority 100advert_int 1authentication {auth_type PASSauth_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.10inet 10.0.0.10/32 scope global eth0[root@lb01 ~]# systemctl stop keepalived
2、检查Backup节点是否有VIP地址
[root@lb02 ~]# ip addr |grep 10.0.0.10inet 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.10inet 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