文章目录
- 高可用
- 介绍
- keepalived
- 安装、使用
- vip漂移
- 抓包
- 脑裂
- 脑裂有没有危害?如果有危害对业务有什么影响?
- keepalived架构
- 双vip架构
- Healthcheck
- 实现
- notify
- VRRP
- 选举
- 格式
高可用
介绍
高可用性(High Availability)是指系统或服务能够在大部分时间内保持可用状态的能力。高可用性的设计目标是确保系统在面对硬件故障、软件错误、网络问题或其他意外情况时,能够持续提供服务而不中断或降低性能。
实现高可用性通常需要以下几个关键方面的考虑:
-
冗余:冗余是指在系统的各个层面引入备份组件或资源,以确保在某个组件或资源发生故障时,能够无缝切换到备份组件或资源上。例如,使用冗余服务器、存储设备、网络连接等。
-
负载均衡:负载均衡是指将系统的负载分散到多个节点或服务器上,以确保每个节点的负载相对均衡。这有助于避免单点故障,并提高整个系统的容量和性能。
-
故障检测与恢复:系统需要能够及时检测到故障并采取相应的恢复措施。这可能包括自动监测组件的健康状态、故障检测算法、自动故障转移或恢复机制等。
-
容错设计:容错设计是指在系统设计和实施中考虑到可能的故障情况,并采取相应的措施来减少或避免故障对系统可用性的影响。例如,使用错误检测和纠正机制、数据备份和恢复策略等。
-
持续监控:高可用系统需要进行实时监控和性能度量,以便及时发现问题并采取措施解决。这包括监测系统组件的状态、负载情况、响应时间等指标,并及时发出警报或自动触发恢复机制。
-
容量规划:合理的容量规划是确保系统能够应对不断增长的负载和需求的关键因素。通过预测和评估系统的负载情况,以及合理的扩展策略和资源配置,可以保证系统在高负载时仍然保持高可用性。
高可用性的实现需要在系统设计和实施的各个方面进行考虑,并综合利用冗余、负载均衡、故障检测与恢复、容错设计、持续监控和容量规划等策略和技术来保证系统的稳定性和可用性。
三个经典的HA软件:
- heartbeat
- keepalive
- HAproxy
keepalived
Keepalived是一个用于负载均衡和高可用性的开源软件,旨在为Linux系统和基于Linux的基础架构提供简单而强大的解决方案。它通过实现负载均衡和VRRP协议来提供高可用性。
下面是Keepalived的一些重要特性和功能的详细介绍:
-
负载均衡:Keepalived使用Linux Virtual Server (IPVS)内核模块提供第四层负载均衡。它可以将传入的请求分发到一组服务器(称为服务器池),以平衡负载和提高性能。Keepalived实现了一组健康检查器,以监测服务器的可用性,并根据服务器的健康状况调整请求的分发。
-
高可用性:Keepalived使用虚拟路由冗余协议(Virtual Router Redundancy Protocol,VRRP)来实现高可用性。VRRP允许多个路由器(或防火墙)组成一个虚拟路由器,共享一个虚拟IP地址。当主要路由器发生故障时,其他备份路由器可以接管虚拟IP地址,以确保网络的连通性和可用性。
-
VRRP有限状态机:Keepalived实现了一组钩子函数,用于VRRP有限状态机。这些钩子函数提供了低级别和高速的与VRRP协议交互的能力。通过钩子函数,Keepalived可以在不同的状态转换时执行自定义操作,以适应特定的网络环境和需求。
-
快速故障检测:为了提供快速的网络故障检测和切换,Keepalived实现了双向转发检测(Bidirectional Forwarding Detection,BFD)协议。BFD协议可以在网络路径上进行快速的故障检测,并提供提示给VRRP状态转换,以实现快速的主备切换。
-
灵活的配置:Keepalived提供了一个灵活的配置文件,允许管理员定义负载均衡、高可用性和监控的策略和行为。管理员可以配置负载均衡算法、健康检查的类型和参数、故障转移的设置等。
通过使用Keepalived,管理员可以轻松地配置和管理负载均衡和高可用性解决方案,提高系统的可用性和性能。Keepalived可以应用于各种场景,包括网站负载均衡、数据库集群、应用服务的高可用性等。
安装、使用
安装
[root@ydh ~]# yum install keepalived -y
修改配置文件/etc/keepalived/keepalived.conf
[root@ydh keepalived]# cat keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 58
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.2.188
}
}
这是一个VRRP实例的配置示例,称为"VI_1"。下面对每个配置项进行详细解释:
state MASTER:指定当前路由器在VRRP组中的状态为"MASTER",即主路由器。这意味着该路由器将成为虚拟IP地址的所有者,并负责处理来自其他设备的数据包。
interface ens33:指定VRRP组使用的网络接口为"ens33"。这是与VRRP相关的物理接口或虚拟接口。
virtual_router_id 58:指定VRRP组的虚拟路由器ID为"58"。这个ID用于标识属于同一个VRRP组的路由器。
priority 100:设置当前路由器的优先级为"100"。优先级值越高,成为主路由器的机会就越大。
advert_int 1:设置VRRP Advertisement(通告)消息的发送间隔为"1"秒。这是路由器发送VRRP消息的频率,用于通知其他设备该路由器的存在和状态。
authentication:设置VRRP的认证信息,用于确保只有经过认证的路由器才能参与VRRP组。
auth_type PASS:指定认证类型为"PASS",表示使用密码进行认证。
auth_pass 1111:设置密码为"1111",用于进行认证。
- virtual_ipaddress:指定VRRP组的虚拟IP地址。在这个例子中,虚拟IP地址为"192.168.2.188"。这个IP地址将被路由器拥有,用于接收和处理来自其他设备的数据包。
通过以上配置,该VRRP实例将在"ens33"接口上创建一个VRRP组,使用虚拟路由器ID为"58",并将路由器配置为主路由器(MASTER)并拥有虚拟IP地址"192.168.2.188"。优先级为"100",发送VRRP通告消息的间隔为"1"秒,并使用密码"1111"进行认证。
启动
[root@ydh keepalived]# systemctl start keepalived
查看是否启动
[root@ydh keepalived]# ps aux|grep keepalived
root 5164 0.0 0.0 123012 1404 ? Ss 21:18 0:00 /usr/sbin/keepalived -D
root 5165 0.0 0.1 133984 3404 ? S 21:18 0:00 /usr/sbin/keepalived -D
root 5166 0.0 0.1 138152 2964 ? S 21:18 0:00 /usr/sbin/keepalived -D
root 5183 0.0 0.0 112824 992 pts/0 S+ 21:18 0:00 grep --color=auto keepalived
在Keepalived启动后,通常会有三个关键的进程在运行,它们的作用如下:
Keepalived进程(keepalived):这是Keepalived的主要进程,负责管理整个Keepalived的运行。它读取配置文件,启动和停止其他子进程,并处理来自其他进程的通信和控制信息。
VRRP子进程(vrrp):VRRP子进程是Keepalived的关键组件之一。它负责实现VRRP协议,与其他设备进行通信,并执行VRRP的状态转换和路由器间的选举过程。该进程监控主机的状态,包括主机的可用性和健康状况,并根据配置的规则决定主备路由器的切换。
路由检测子进程(checkers):路由检测子进程是Keepalived的另一个重要组件。它负责进行网络健康检查,以确定各个后端服务器的可用性。检测器可以使用各种协议,如ICMP、TCP、HTTP等,来监测后端服务器的状态。如果检测到服务器故障或不可用,它将通知VRRP子进程进行状态转换。
这三个进程之间相互协作,形成了Keepalived的完整功能。Keepalived进程负责协调和管理这些子进程的工作,确保VRRP协议的正确运行和故障切换的顺利进行。VRRP子进程负责实现VRRP协议,维护虚拟IP地址的所有权和主备状态的切换。路由检测子进程负责监测后端服务器的可用性,提供健康检查和故障检测的功能。
配置是否成功
[root@ydh keepalived]# ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:10:22:3d brd ff:ff:ff:ff:ff:ff
inet 192.168.2.24/24 brd 192.168.2.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet 192.168.2.188/32 scope global ens33
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe10:223d/64 scope link
valid_lft forever preferred_lft forever
inet 192.168.2.188/32 scope global ens33
出现这个就显示成功了
vip漂移
VIP(Virtual IP)漂移是指在高可用性环境中,将虚拟IP地址(VIP)从一个节点(主节点)快速切换到另一个节点(备份节点)的过程。这种切换通常发生在主节点发生故障或无法提供服务时,为了确保服务的连续性和可用性。
VIP漂移的详细过程如下:
-
主节点失效检测:系统会监测主节点的状态,例如网络连通性、服务器运行状态等。一旦检测到主节点发生故障或无法提供服务,触发VIP漂移的条件将被满足。
-
触发漂移事件:一旦触发条件满足,系统会通知备份节点执行VIP漂移。这可以通过一种心跳检测机制、集群管理软件或网络设备的协作实现。
-
VIP切换:备份节点接收到漂移事件后,会接管虚拟IP地址。它会在自己的网络接口上添加VIP,并通过更新路由表或通知相关网络设备来确保数据包正确地传输到备份节点。
-
通告其他节点:一旦备份节点成功接管VIP,它会向其他节点发送通告,以便更新它们的路由表或配置,确保数据包正确地路由到新的VIP所在的节点。
-
服务恢复:一旦VIP成功漂移到备份节点,备份节点将开始处理来自客户端的请求,并提供服务。这样,故障期间的服务中断将被最小化,用户将继续获得可用的服务。
VIP漂移通常是在高可用性环境中使用的一种机制,例如负载均衡集群、高可用数据库集群等。它可以确保服务在主节点故障时能够快速地恢复到备份节点,从而保证了系统的连续性和可用性。
问题:
master挂了吗,vip漂移到backup服务器上,如果master好了,vip会漂移回master上吗?
在 Keepalived 中,默认情况下,一旦 VIP 漂移到备份服务器上,即使主服务器恢复正常,VIP 不会自动漂移回主服务器。这是为了避免频繁的 VIP 切换和可能的服务中断。
如果你希望在主服务器恢复后,VIP 能够自动漂移回主服务器上,你可以使用
track_script
配置项。track_script
允许你指定一个脚本,用于监测主服务器的可用性。当主服务器恢复时,脚本返回成功状态,Keepalived 将会触发 VIP 漂移回主服务器。以下是一个示例的 Keepalived 配置,演示了如何使用
track_script
配置项来实现 VIP 漂移回主服务器:vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 58 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.2.188 } track_script { script "/path/to/monitor_script.sh" fall 2 rise 2 weight -1 } }
在上面的配置中,
/path/to/monitor_script.sh
是一个自定义的脚本,用于监测主服务器的可用性。你需要编写一个脚本来检测主服务器是否已经恢复正常。脚本返回成功状态时,Keepalived 将会触发 VIP 漂移回主服务器。在脚本中,你可以使用各种方法和命令来检测主服务器的可用性,例如 ping 命令、HTTP 请求等。根据你的具体需求和环境,自定义脚本来实现主服务器的可用性监测。
需要注意的是,使用
track_script
配置项需要在 Keepalived 配置中启用vrrp_strict
选项。可以将vrrp_strict
设置为 “on” 来启用严格模式。配置完成后,当主服务器恢复正常并
track_script
返回成功状态时,Keepalived 将自动触发 VIP 漂移回主服务器。这样,主服务器将重新成为服务的主要提供者。
抓包
下载抓包工具
[root@ydh ~]# yum install tcpdump -y
查看信息
[root@ydh ~]# tcpdump -i ens33 vrrp -vv
tcpdump: listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
10:50:02.296290 IP (tos 0xc0, ttl 255, id 7901, offset 0, flags [none], proto VRRP (112), length 40)
192.168.2.24 > vrrp.mcast.net: vrrp 192.168.2.24 > vrrp.mcast.net: VRRPv2, Advertisement, vrid 58, prio 120, authtype simple, intvl 1s, length 20, addrs: 192.168.2.188 auth "1111^@^@^@^@"
10:50:03.303095 IP (tos 0xc0, ttl 255, id 7902, offset 0, flags [none], proto VRRP (112), length 40)
192.168.2.24 > vrrp.mcast.net: vrrp 192.168.2.24 > vrrp.mcast.net: VRRPv2, Advertisement, vrid 58, prio 120, authtype simple, intvl 1s, length 20, addrs: 192.168.2.188 auth "1111^@^@^@^@"
10:50:04.306855 IP (tos 0xc0, ttl 255, id 7903, offset 0, flags [none], proto VRRP (112), length 40)
192.168.2.24 > vrrp.mcast.net:
该命令是使用tcpdump工具进行网络数据包分析的命令。下面是对命令的解析:
tcpdump
: 这是一个网络数据包分析工具,用于捕获和分析经过特定网络接口的数据包。-i ens33
: 这是tcpdump命令的选项之一,指定要捕获数据包的网络接口。在这个例子中,它指定了接口ens33
,也可以是其他网络接口的名称。vrrp
: 这是tcpdump的过滤器之一,用于只捕获VRRP(Virtual Router Redundancy Protocol)数据包。VRRP是一种网络协议,用于提供冗余的默认网关功能。-vv
: 这是tcpdump命令的选项之一,用于增加详细的输出。通过使用两个-v
选项,可以显示更多关于捕获的数据包的信息。
脑裂
在分布式系统中,Keepalive(保活)机制用于检测节点或服务器的可用性,并确保节点之间的正常通信。通常,节点之间通过发送周期性的Keepalive消息来维持连接的活动状态。然而,Keepalive的脑裂(Keepalive Brain Split)是指在一些特定情况下,Keepalive机制无法有效地检测到节点或服务器的故障,导致节点之间的通信被中断,即使节点实际上已经失去了正常的连接。
脑裂可能在以下情况下发生:
-
vrid(虚拟路由id)不一样
-
网络通信有问题,中间有防火墙阻止了网络之间的选举的过程,vrrp报文的通信
-
认证密码不一样也会出现脑裂
脑裂可能导致数据一致性问题、服务中断以及系统的不稳定性。为了解决脑裂问题,通常采用以下策略:
-
心跳超时机制:合理设置心跳超时时间,确保故障节点能够及时被检测到,并进行相应的处理。
-
多重故障检测机制:使用多种独立的故障检测机制,例如基于网络层和应用层的检测,以提高故障检测的可靠性和准确性。
-
多数派决策机制:在集群中采用多数派决策机制来解决节点状态的冲突。通过确保大多数节点的一致性,可以避免脑裂问题。
综上所述,Keepalive的脑裂是指在Keepalive机制下,由于网络分区、故障检测问题或超时设置不当等原因,节点无法正确地检测到故障,导致节点之间的通信中断,从而产生的一种问题。
如何出现脑裂现象:
- 对防火墙进行设置:
[root@ydh ~]# iptables -I INPUT -p tcp --dport 22 -j ACCEPT
iptables
: 这是一个用于管理Linux内核网络数据包过滤的工具,它可以用来配置和控制防火墙规则。
-I INPUT
: 这是iptables命令的选项之一,表示在"INPUT"链(即入站数据包)中插入规则。
-p tcp
: 这是iptables命令的选项之一,用于指定匹配的传输层协议。在这个例子中,它指定要匹配TCP协议的数据包。
--dport 22
: 这是iptables命令的选项之一,用于指定目标端口。在这个例子中,它指定要匹配目标端口号为22的数据包。端口22通常用于SSH(Secure Shell)服务,用于远程登录和管理Linux系统。
-j ACCEPT
: 这是iptables命令的选项之一,用于指定匹配规则后的动作。在这个例子中,它指定如果数据包与规则匹配,则接受该数据包。该命令的作用是在防火墙的"INPUT"链中插入一条规则,允许进入的TCP数据包,目标端口为22(即SSH服务)。这样配置后,防火墙将接受并允许通过22端口的SSH连接请求。
[root@ydh ~]# iptables -L
-L
: 这是iptables命令的选项之一,用于列出当前的防火墙规则。它会显示"filter"表中的规则,这是iptables默认使用的表,用于过滤数据包。
[root@ydh ~]# iptables -P INPUT DROP
-P INPUT DROP
: 这是iptables命令的选项之一,用于设置"INPUT"链(即入站数据包)的默认策略为"DROP"。"DROP"策略表示拒绝所有未明确允许的入站数据包,即默认情况下将丢弃这些数据包。
192.168.2.23
oup default qlen 1000
link/ether 00:0c:29:03:b2:81 brd ff:ff:ff:ff:ff:ff
inet 192.168.2.23/24 brd 192.168.2.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet 192.168.2.188/32 scope global ens33
192.168.2.24
inet 192.168.2.24/24 brd 192.168.2.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet 192.168.2.188/32 scope global ens33
firewalld恢复正常。
[root@ydh ~]# iptables -P INPUT ACCEPT
-P INPUT ACCEPT
: 这是iptables命令的选项之一,用于设置"INPUT"链(即入站数据包)的默认策略为"ACCEPT"。"ACCEPT"策略表示接受所有未明确拒绝的入站数据包,即默认情况下允许这些数据包通过。
- 不同的虚拟路由id
192.168.2.23
这是keepalive.conf
的设置
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 59
oup default qlen 1000
link/ether 00:0c:29:03:b2:81 brd ff:ff:ff:ff:ff:ff
inet 192.168.2.23/24 brd 192.168.2.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet 192.168.2.188/32 scope global ens33
192.168.2.24
这是keepalive.conf
的设置
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 58
inet 192.168.2.24/24 brd 192.168.2.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet 192.168.2.188/32 scope global ens33
- 认证密码不一样
192.168.2.24
keepalive.conf
的设置
authentication {
auth_type PASS
auth_pass 111122
}
inet 192.168.2.24/24 brd 192.168.2.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet 192.168.2.188/32 scope global ens33
192.168.2.23
keepalive.conf
的设置
authentication {
auth_type PASS
auth_pass 11112
}
oup default qlen 1000
link/ether 00:0c:29:03:b2:81 brd ff:ff:ff:ff:ff:ff
inet 192.168.2.23/24 brd 192.168.2.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet 192.168.2.188/32 scope global ens33
脑裂有没有危害?如果有危害对业务有什么影响?
没有危害,能正常访问,反而还有负载均衡的作用
脑裂恢复的时候,还是有影响的,会短暂的中断,影响业务的。
keepalived架构
Keepalived可以使用单VIP(Virtual IP)或双VIP架构来实现高可用性。
-
单VIP架构:
- 在单VIP架构中,只有一个虚拟IP地址(VIP)被配置,用于将客户端的请求导向到主节点。
- 主备节点通过Keepalived进行状态同步和心跳检测。主节点持有VIP,而备节点监视主节点的状态。
- 如果主节点发生故障或不可用,备节点将接管VIP,并开始提供服务,以确保服务的高可用性。
- 当主节点恢复时,它会重新获得VIP,并继续提供服务。
-
双VIP架构:
- 在双VIP架构中,有两个虚拟IP地址(VIP1和VIP2),分别用于主节点和备节点。
- 主VIP(VIP1)用于将客户端的请求导向到主节点,而备VIP(VIP2)用于将客户端的请求导向到备节点。
- 主备节点之间进行状态同步和心跳检测。主节点持有主VIP,备节点持有备VIP。
- 如果主节点发生故障或不可用,备节点将接管主VIP,并开始提供服务。备节点的备VIP保持不变。
- 当主节点恢复时,它会重新获得主VIP,并继续提供服务。备节点仍然持有备VIP,但不提供服务。
双VIP架构相对于单VIP架构提供了更高的冗余性和故障切换的灵活性。它允许同时在主备节点上提供服务,并且客户端可以选择性地连接到主节点或备节点,从而在故障发生时可以更快地切换到备节点。然而,双VIP架构也需要更多的IP地址和网络资源。
选择单VIP架构还是双VIP架构取决于具体的需求和应用场景。对于大多数常见的情况,单VIP架构已经足够实现高可用性和故障切换。双VIP架构通常用于更复杂的环境,需要更高级的灵活性和可扩展性。
双vip架构
192.168.2.24
的配置文件代码
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 58
priority 120
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.2.188
}
}
vrrp_instance VI_2 {
state BACKUP
interface ens33
virtual_router_id 59
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.2.199
}
}
查看ip
[root@ydh ~]# ip add
inet 192.168.2.24/24 brd 192.168.2.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet 192.168.2.188/32 scope global ens33
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe10:223d/64 scope link
valid_lft forever preferred_lft forever
192.168.2.23
的配置文件设置
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 58
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.2.188
}
}
vrrp_instance VI_2 {
state MASTER
interface ens33
virtual_router_id 59
priority 120
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.2.199
}
}
查看ip
[root@ydh ~]# ip add
inet 192.168.2.23/24 brd 192.168.2.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet 192.168.2.199/32 scope global ens33
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe03:b281/64 scope link
valid_lft forever preferred_lft forever
Healthcheck
如果负载均衡器上的nginx出现了问题,keepalived还有没有价值?
keepalived的价值是建立在nginx能正常工作的情况下,如果nginx异常,这台机器就不是负载均衡器了,需要停止它的master身份了,将优先级降低,让为给其他的机器,背后有健康检测功能。
Keepalived的Healthcheck(健康检查)是一种用于监测服务器或服务状态的功能。在Keepalived中,Healthcheck用于定期检查服务器的可用性,以确保主备节点的状态以及它们提供的服务的正常运行。
健康检查的目的是在故障或服务不可用时及时检测并采取相应的措施,比如切换到备用节点,以保持服务的高可用性。Healthcheck的工作方式是定期发送请求或监测服务器状态,然后根据响应结果来判断服务器是否处于健康状态。通常,主备节点会相互监测对方的健康状态,以便在发现故障时自动进行故障转移。
在Keepalived中,可以配置多种类型的Healthcheck,其中两个常见的类型是:
-
TCP连接检查:这种类型的Healthcheck会定期尝试建立到服务器端口的TCP连接。如果连接成功建立,表示服务器健康。如果连接失败,表示服务器不可用,需要进行故障转移。
-
HTTP健康检查:这种类型的Healthcheck会发送HTTP请求到服务器,并根据服务器的响应状态码来判断服务器是否健康。例如,如果服务器返回200 OK状态码,表示服务器正常运行;如果返回其他状态码,可能表示服务器出现故障或服务不可用。
Healthcheck的频率和超时时间可以根据需要进行配置。通常,健康检查的频率较高,以便及时发现服务器故障,并且超时时间要足够短,以避免等待过长时间才判定为故障。如果连续多次健康检查失败,则会触发故障转移操作,将服务从故障节点切换到备用节点。
Keepalived中的Healthcheck是用于监测服务器或服务状态的功能,以确保主备节点的状态和服务的正常运行,并在发现故障时自动触发故障转移操作,从而实现服务的高可用性。
实现
实例:监控本机的nginx进程是否运行,如果nginx进程不运行就立马将优先级降低30
-
编写监控nginx的脚本
-
如何判断nginx是否运行,方法很多?
-
pidof nginx killall -0 nginx #如果返回的是0代表是正常运行,否则nginx没有正常运行。
-
-
[root@ydh nginx]# cat check_nginx.sh #!/bin/bash if /usr/sbin/pidof nginx &>/dev/null;then exit 0 else exit 1 fi
-
-
在keepalived里定义监控脚本
-
#定义监控脚本chk_nginx vrrp_script chk_nginx { script "/nginx/check_nginx.sh" intervel 1 weight -30 }
-
vrrp_script chk_nginx
:这是定义监控脚本的起始行,chk_nginx
是脚本的名称。script "/nginx/check_nginx.sh"
:这是脚本文件的路径和名称。根据路径,脚本文件位于/nginx/check_nginx.sh
。脚本文件可能包含一些逻辑和命令,用于检测Nginx服务的健康状态。interval 1
:这是监控脚本的执行间隔,表示每隔1秒运行一次脚本。根据需求,您可以根据自己的要求进行调整。weight -30
:这是脚本的权重,用于决定主备节点之间进行故障转移时的优先级。较低的权重值表示脚本优先级较高,当监控脚本执行失败时,会影响节点的优先级,从而可能导致故障转移。
-
-
在keepalived里调用监控脚本
-
keepalived 会通过看脚本执行的返回看脚本是否成功执行
- 返回0代表成功,否则失败
-
vrrp_instance VI_1 { state MASTER interface ens33 virtual_router_id 58 priority 120 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.2.188 } #调用监控脚本 track_script { chk_nginx } }
-
注意:
- 监控nginx的脚本主要设置在master里面,实现master不灵的时候,实现vip漂移到backup上
weight -30
需要实现master和backup的优先级大小调换才有效果,否则不会是实现vip漂移
notify
当本节点服务器成为某个角色的时候,我们去执行某个脚本
notify_master:当当前节点成为master时,通知脚本执行任务(一般用于启动某服务)
notify_backup:当当前节点成为backup时,通知脚本执行任务(一般用于关闭某服务
notify_fault:当当前节点出现故障,执行的任务;
如果检测到nginx进程关闭了,里面关闭keepalived的软件
定义脚本
[root@ydh nginx]# cat halt_keepalived.sh
#!/bin/bash
service keepalived stop
配置文件中使用
notify_backup "nginx/halt_keepalived.sh"
关闭nginx后,按照之前的配置,master会变为backup。随后可以看keepalived进程是否关闭了,关闭了就代表配置成功了.
VRRP
虚拟路由器冗余协议(Virtual Router Redundancy Protocol,VRRP)是一种网络协议,用于提供路由器的冗余和故障切换功能。它允许多个路由器(或防火墙)组成一个虚拟路由器,共享一个虚拟IP地址,以提供高可用性和故障恢复。
工作在网络层。
下面是VRRP的一些重要特性和功能的详细介绍:
-
虚拟路由器:VRRP允许多个路由器组成一个虚拟路由器组,这个组由一个虚拟IP地址标识。虚拟路由器组中的路由器互为备份,其中一个被选为主路由器(Master),负责接收和处理传入的数据包,而其他路由器则处于备份状态(Backup)。
-
主备切换:在VRRP组中,只有主路由器才会接收和处理传入的数据包,其他备份路由器会监听主路由器的状态。如果主路由器失效(例如发生故障或不可访问),备份路由器中的一个会自动接管虚拟IP地址,并成为新的主路由器。这样可以实现无缝的主备切换,确保网络的连通性和可用性。
-
优先级和选举:每个路由器在VRRP组中都有一个优先级值,用于确定主路由器的选举。具有较高优先级的路由器通常会被选为主路由器,而其他路由器则成为备份路由器。在主备切换时,备份路由器中的一个会根据优先级来接管虚拟IP地址。
-
路由器通信:VRRP组中的路由器通过周期性地发送VRRP通告消息来保持彼此之间的通信。这些消息包含了路由器的状态和优先级信息。备份路由器会定期检查主路由器的状态,以便在主路由器失效时接管虚拟IP地址。
-
虚拟IP地址:VRRP组中的虚拟IP地址是由主路由器使用的,用于接收和处理传入的数据包。当主路由器失效时,新的主路由器会接管虚拟IP地址,确保网络流量继续正常传输到虚拟路由器组。
通过使用VRRP,网络管理员可以实现路由器的冗余和故障切换,提供高可用性和可靠性的网络服务。VRRP广泛应用于企业网络、数据中心和云环境中,确保网络设备的故障不会影响网络的连通性和性能。
只要安装keepalive软件就可以运行vrrp协议,只要通过vrrp协议就可以选举出master和backup。
选举
VRRP(Virtual Router Redundancy Protocol)选举过程如下:
-
VRRP组创建:在一个网络中,多个路由器或防火墙被配置为参与同一个VRRP组。每个路由器都会配置一个虚拟路由器标识(VRID),用于识别属于同一个VRRP组的路由器。
-
优先级设置:每个路由器在VRRP组中都被配置一个优先级值。优先级值决定了路由器在选举中的地位,数值越高表示优先级越高。
-
Master选举:当VRRP组中的路由器启动或者检测到当前Master路由器失效时,会开始进行Master选举过程。选举过程中,路由器将发送VRRP Advertisement(通告)消息,包含自己的优先级和其他相关信息。
-
优先级比较:在Master选举过程中,各个路由器比较彼此的优先级。优先级较高的路由器将有更大的机会成为Master路由器。如果路由器的优先级相同,则根据路由器的IP地址进行比较,IP地址较大的路由器将成为Master。
-
Master路由器确定:经过优先级比较后,最高优先级的路由器将成为Master路由器。它将负责处理接收和处理来自网络中其他设备的数据包,并维护VRRP组的虚拟IP地址。
-
备份路由器:除了Master路由器外,其他路由器将成为备份(Backup)路由器。它们继续发送VRRP Advertisement消息,但不处理传入的数据包。备份路由器会监听Master路由器的状态,以便在Master失效时接管虚拟IP地址。
-
状态迁移:如果Master路由器失效,备份路由器中的一个将根据优先级和其他配置信息接管虚拟IP地址,并成为新的Master路由器。此过程通常很快,以确保网络的连通性和故障切换的快速完成。
需要注意的是,VRRP选举过程是根据优先级进行的,但也受到其他配置参数的影响,例如预先设定的权重值、IP地址等。此外,VRRP还支持预先设定的倾向值(preemption),用于指定在Master路由器恢复正常后是否重新成为Master。