2023-04-28 15:09:41 27阅读
Keepalived是一种流行的开源软件包,为Linux系统提供高可用性。它旨在通过提供自动故障转移和负载平衡功能来确保关键网络服务的连续可用性。在本文中,我们将详细讨论Keepalived及其特点,包括其架构、组件和配置,通过具体项目使用场景的介绍,进一步说明其功能特性;
Keepalived使用虚拟路由冗余协议(VRRP)来提供故障转移和负载平衡功能。VRRP是一种协议,允许多个路由器共同工作,以呈现单个虚拟路由器的外观。Keepalived在群集中的每个节点上运行,并监视其配置的服务的可用性。如果某个节点无法提供服务,则Keepalived会自动将该服务转移到另一个节点。
主要功能组件:
虚拟路由冗余协议,避免路由器出现单点故障的一种容错协议,多个运行着VRRP协议的路由器抽象成一个虚拟路由器(从外边来看,就像只有一个真实的路由器在工作),这个虚拟路由器通过虚拟IP(一个或多个)对外提供服务,组成虚拟路由器的一组路由器会有一个会成为Master路由器,其余的会成为Backup路由器。正常情况下,会由Master完成该虚拟路由器的工作。Master一旦出现故障,从Backup中选出一个成为Master继续工作,从而避免路由器单点问题,VRRP可以在网络发生故障时透明的进行设备切换而不影响主机之间的数据通信;
VRRP基于vip(虚拟IP),也叫IP别名或者辅助IP,是一个不与特定计算机或网络接口卡(NIC)相连的IP地址;Linux系统给网卡配置VIP的方法常见的有两种,即别名IP(alias ip)以及辅助IP(secondary ip address)
ifconfig eth0:1 192.168.40.20 netmask 255.255.255.0 up
ip addr add 192.168.40.20/24 dev eth0
创建VRRP实例时,会自动注册vip并绑定到Master实例上
VRRP有三种工作状态,分别是:Initialize,Master,Backup;当VRRP设备处于Master状态时,它将会承担虚拟路由设备的所有转发工作,并定期向整个虚拟内发送VRRP通告报文。
当Master状态节点故障时,通过选举机制选举新的Master;每个路由器都拥有一个优先级,抢占模式下,一旦有优先级高的路由器加入,立即成为Master;非抢占模式下,只要Master存活,优先级高的路由器只能等待;
如图所示为wireshark抓取的VRRP协议报文,集群节点通过广播或者单播VRRP协议报文到其他集群节点进行选举或者信息同步,其中Priority报文字段描述当前节点的优先级
上图展示了客户端通过192.168.1.43这个vip来访问集群,keepalived通过vrrp来实现负载均衡功能,每次vip只会注册到一台后端服务器上,如果该节点宕机,keepalived会重新注册vip到另一个可用节点上。
了解了VRRP协议的功能后,我们可以更进一步熟悉Keepalived的工作原理。它工作在TCP/IP参考模型的第三、四和第五层,也就是网络层、传输层和应用层。
一个功能比较完整的keepalived配置文件,其配置文件keepalived.conf可以包含三个文本块:全局定义块、VRRP实例定义块及虚拟服务器定义块。全局定义块和虚拟服务器定义块是必须的,虚拟服务器定义块主要服务于LVS相关功能,本文未使用到,略去不谈。
global_defs {
notification_email
notification_email_from用于设置邮件的发送地址,即报警邮件发送者
smtp_server用于设置邮件的SMTP Server地址
smtp_connect_timeout smtp连接超时时间
router_id 全局路由id
vrrp_skip_check_adv_addr:设置此命令的意思是,如果通告与接收的上一个通告来自相同的master路由器,则不执行检查(跳过检查)。
vrrp_strict:严格遵守VRRP协议。下列情况将会阻止启动Keepalived:1. 没有VIP地址。2. 单播邻居。3. 在VRRP版本2中有IPv6地址。会让防火墙对vip产生drop
vrrp_iptables #此项和vrrp_strict同时开启时,则不会添加防火墙规则,如果无配置vrrp_strict项,则无需启用此项配置
vrrp_garp_interval 0 #gratuitous ARP messages 报文发送延迟,0表示不延迟
vrrp_gna_interval 0 #unsolicited NA messages (不请自来)消息发送延迟
}
vrrp_instance {
state MASTER #指定实例初始状态,实际的MASTER和BACKUP是选举决定的。
interface eth0 #指定实例绑定的网卡
virtual_router_id 51 #设置VRID标记,多个集群不能重复(0..255)
priority 100 #设置优先级,优先级高的会被竞选为Master,Master要高于BACKUP至少50
advert_int 1 #检查的时间间隔,默认1s
nopreempt #设置为不抢占,说明:这个配置只能在BACKUP主机上面设置
preempt_delay #抢占延迟,默认5分钟
debug #debug级别
authentication { #设置认证
auth_type PASS #认证方式,支持PASS和AH,官方建议使用PASS
auth_pass 1111 #认证的密码
}
virtual_ipaddress { #设置VIP,可多个,用于切换时的地址绑定
192.168.1.43/24 dev eth0 label eth0:1
}
}
由于项目部署环境中上层路由器不支持广播,因此选择单播模式,集群内节点地址必须明确,进行点对点协议发送
unicast_src_ip 192.168.1.44:指定发送单播数据包的源IP地址。默认是绑定VRRP实例的接口的主IP地址。
unicast_peer { 采用单播的方式发送VRRP通告,指定单播邻居的IP地址
192.168.1.45
192.168.1.46
}
同时为了有效监测后端Nacos服务的可用性,也添加了应用层探活脚本
#!/bin/bash
result=`echo -e "\n" | telnet 127.0.0.1 47588 2>/dev/null | grep Connected | wc -l`
if [ $result -eq 1 ]; then
exit 0
else
exit 1
fi
并在VRRP实例配置中添加引用
track_script {
nacos_check
}
总结:
因为Nacos集群本身具有选举机制,follower节点会转发请求到主节点进行处理,所以客户端的请求可以打到任意一个节点都能有效处理。为了防止客户端指定ip访问到异常节点,集群需要绑定vip,解析到集群内任意一个节点即可,客户端通过访问vip,进而做到有效的故障转移。而通过在集群中每一个节点上部署一个keepalived组件,并应用前述配置,可以很好地实现这一目标。
2023-04-28 15:09:41 27阅读
Keepalived是一种流行的开源软件包,为Linux系统提供高可用性。它旨在通过提供自动故障转移和负载平衡功能来确保关键网络服务的连续可用性。在本文中,我们将详细讨论Keepalived及其特点,包括其架构、组件和配置,通过具体项目使用场景的介绍,进一步说明其功能特性;
Keepalived使用虚拟路由冗余协议(VRRP)来提供故障转移和负载平衡功能。VRRP是一种协议,允许多个路由器共同工作,以呈现单个虚拟路由器的外观。Keepalived在群集中的每个节点上运行,并监视其配置的服务的可用性。如果某个节点无法提供服务,则Keepalived会自动将该服务转移到另一个节点。
主要功能组件:
虚拟路由冗余协议,避免路由器出现单点故障的一种容错协议,多个运行着VRRP协议的路由器抽象成一个虚拟路由器(从外边来看,就像只有一个真实的路由器在工作),这个虚拟路由器通过虚拟IP(一个或多个)对外提供服务,组成虚拟路由器的一组路由器会有一个会成为Master路由器,其余的会成为Backup路由器。正常情况下,会由Master完成该虚拟路由器的工作。Master一旦出现故障,从Backup中选出一个成为Master继续工作,从而避免路由器单点问题,VRRP可以在网络发生故障时透明的进行设备切换而不影响主机之间的数据通信;
VRRP基于vip(虚拟IP),也叫IP别名或者辅助IP,是一个不与特定计算机或网络接口卡(NIC)相连的IP地址;Linux系统给网卡配置VIP的方法常见的有两种,即别名IP(alias ip)以及辅助IP(secondary ip address)
ifconfig eth0:1 192.168.40.20 netmask 255.255.255.0 up
ip addr add 192.168.40.20/24 dev eth0
创建VRRP实例时,会自动注册vip并绑定到Master实例上
VRRP有三种工作状态,分别是:Initialize,Master,Backup;当VRRP设备处于Master状态时,它将会承担虚拟路由设备的所有转发工作,并定期向整个虚拟内发送VRRP通告报文。
当Master状态节点故障时,通过选举机制选举新的Master;每个路由器都拥有一个优先级,抢占模式下,一旦有优先级高的路由器加入,立即成为Master;非抢占模式下,只要Master存活,优先级高的路由器只能等待;
如图所示为wireshark抓取的VRRP协议报文,集群节点通过广播或者单播VRRP协议报文到其他集群节点进行选举或者信息同步,其中Priority报文字段描述当前节点的优先级
上图展示了客户端通过192.168.1.43这个vip来访问集群,keepalived通过vrrp来实现负载均衡功能,每次vip只会注册到一台后端服务器上,如果该节点宕机,keepalived会重新注册vip到另一个可用节点上。
了解了VRRP协议的功能后,我们可以更进一步熟悉Keepalived的工作原理。它工作在TCP/IP参考模型的第三、四和第五层,也就是网络层、传输层和应用层。
一个功能比较完整的keepalived配置文件,其配置文件keepalived.conf可以包含三个文本块:全局定义块、VRRP实例定义块及虚拟服务器定义块。全局定义块和虚拟服务器定义块是必须的,虚拟服务器定义块主要服务于LVS相关功能,本文未使用到,略去不谈。
global_defs {
notification_email
notification_email_from用于设置邮件的发送地址,即报警邮件发送者
smtp_server用于设置邮件的SMTP Server地址
smtp_connect_timeout smtp连接超时时间
router_id 全局路由id
vrrp_skip_check_adv_addr:设置此命令的意思是,如果通告与接收的上一个通告来自相同的master路由器,则不执行检查(跳过检查)。
vrrp_strict:严格遵守VRRP协议。下列情况将会阻止启动Keepalived:1. 没有VIP地址。2. 单播邻居。3. 在VRRP版本2中有IPv6地址。会让防火墙对vip产生drop
vrrp_iptables #此项和vrrp_strict同时开启时,则不会添加防火墙规则,如果无配置vrrp_strict项,则无需启用此项配置
vrrp_garp_interval 0 #gratuitous ARP messages 报文发送延迟,0表示不延迟
vrrp_gna_interval 0 #unsolicited NA messages (不请自来)消息发送延迟
}
vrrp_instance {
state MASTER #指定实例初始状态,实际的MASTER和BACKUP是选举决定的。
interface eth0 #指定实例绑定的网卡
virtual_router_id 51 #设置VRID标记,多个集群不能重复(0..255)
priority 100 #设置优先级,优先级高的会被竞选为Master,Master要高于BACKUP至少50
advert_int 1 #检查的时间间隔,默认1s
nopreempt #设置为不抢占,说明:这个配置只能在BACKUP主机上面设置
preempt_delay #抢占延迟,默认5分钟
debug #debug级别
authentication { #设置认证
auth_type PASS #认证方式,支持PASS和AH,官方建议使用PASS
auth_pass 1111 #认证的密码
}
virtual_ipaddress { #设置VIP,可多个,用于切换时的地址绑定
192.168.1.43/24 dev eth0 label eth0:1
}
}
由于项目部署环境中上层路由器不支持广播,因此选择单播模式,集群内节点地址必须明确,进行点对点协议发送
unicast_src_ip 192.168.1.44:指定发送单播数据包的源IP地址。默认是绑定VRRP实例的接口的主IP地址。
unicast_peer { 采用单播的方式发送VRRP通告,指定单播邻居的IP地址
192.168.1.45
192.168.1.46
}
同时为了有效监测后端Nacos服务的可用性,也添加了应用层探活脚本
#!/bin/bash
result=`echo -e "\n" | telnet 127.0.0.1 47588 2>/dev/null | grep Connected | wc -l`
if [ $result -eq 1 ]; then
exit 0
else
exit 1
fi
并在VRRP实例配置中添加引用
track_script {
nacos_check
}
总结:
因为Nacos集群本身具有选举机制,follower节点会转发请求到主节点进行处理,所以客户端的请求可以打到任意一个节点都能有效处理。为了防止客户端指定ip访问到异常节点,集群需要绑定vip,解析到集群内任意一个节点即可,客户端通过访问vip,进而做到有效的故障转移。而通过在集群中每一个节点上部署一个keepalived组件,并应用前述配置,可以很好地实现这一目标。