Keepalived+LVS构建高可用集群

目录

一、Keepalive基础介绍

1. Keepalive与VRRP

2. VRRP相关技术

3. 工作原理 

4. 模块

5. 架构

6. 安装

7. Keepalived 相关文件

7.1 配置组成

7.2 全局配置

7.3 VRRP实例配置(lvs调度器)

7.4 虚拟服务器与真实服务器配置 

二、Keepalived结合LVS负载均衡

1. 环境准备

2. 实际操作

三、Keepalived优化 

1. 非抢占与延时抢占

2. 单播与多播 

3. 通知脚本

4. 日志功能

5. 模拟脑裂

6. 实现其它应用的高可用性 VRRP Script

6.1 VRRP Script 配置

6.2 定义 VRRP script


一、Keepalive基础介绍

1. Keepalive与VRRP

Keepalive 是一种用于监视系统或服务是否处于活动状态的机制。在网络环境中,它通常指定一个周期性的信号或数据包,用于检测设备、服务或连接是否仍然处于活动状态。如果设备或服务停止响应,相应的监视器将触发警报或采取预定义的操作。

VRRP 是一种用于提供冗余路由器功能的协议,通过允许多个路由器共享同一个虚拟 IP 地址来提供冗余。这样,即使其中一个路由器失效,网络流量仍然可以被另一个路由器接管,从而保证了网络的连通性和可用性。

这两种技术通常结合使用,因为 Keepalive 可以用于监视 VRRP 路由器的活动状态。如果 VRRP 主要路由器失效,备份路由器可以通过接收不再有主要路由器发送的 keepalive 信号来检测到这一事件,并迅速接管虚拟 IP 地址,从而确保网络的连通性。

2. VRRP相关技术

通告:心跳,优先级等;周期性

工作方式:抢占式,非抢占式,延迟抢占模式

安全认证:如没有安全认证,不在集群中的keeplive服务器设置超高的优先级,会造成事故

工作模式:

  • 主/备:单虚拟路径器

  • 主/主:主/备(虚拟路由器1),备/主(虚拟路由器2

3. 工作原理 

Keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议,保证集群高可用的一个服务软件,用来防止单点故障。将N台提供相同功能的服务器组成一个服务器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该服务器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。

IPV4总共三种通信方式:单播,组播,广播。组播是指以224.0.0.0地址作为通信地址的一种方式。

4. 模块

分别是core、check和vrrp。

  • core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。
  • check负责健康检查,包括常见的各种检查方式。
  • vrrp模块是来实现VRRP协议的。 

5. 架构

用户空间核心组件:

① vrrp stack:VIP消息通告,用来管理虚拟ip

② checkers:监测real server(简单来说 就是监控后端真实服务器的服务)是否存活

③ system call:实现 vrrp 协议状态转换时调用脚本的功能

④ SMTP:邮件组件(报警邮件)

⑤ IPVS wrapper:生成IPVS规则(直接生成ipvsadm)

⑥ Netlink Reflector:网络接口(将虚拟地址ip(vip)地址飘动)

⑦ WatchDog:监控进程(整个架构是否有问题)

⑧ 控制组件:提供keepalived.conf 的解析器,完成Keepalived配置

⑨ IO复用器:针对网络目的而优化的自己的线程抽象

⑩ 内存管理组件:为某些通用的内存管理功能(例如分配,重新分配,发布等)提供访问权限

6. 安装

① yum安装:yum install keepalived -y

② 官网下载安装包,编译安装:Keepalived for Linux

7. Keepalived 相关文件

  • 软件包名:keepalived
  • 主程序文件:/usr/sbin/keepalived
  • 主配置文件:/etc/keepalived/keepalived.conf
  • 配置文件示例:/usr/share/doc/keepalived/
  • Unit File单元文件:/lib/systemd/system/keepalived.service
  • Unit File的环境配置文件:/etc/sysconfig/keepalived CentOS

7.1 配置组成

/etc/keepalived/keepalived.conf 配置组成

① 全局配置:这部分包括全局参数的定义,例如进程 ID 文件、日志文件路径、通知邮箱地址等。全局配置通常用于指定整体行为和设置。

② 模块配置:Keepalived 配置文件中会包含关于 VRRP 或者 LVS 模块的配置。对于 VRRP 模块,需要定义虚拟路由器的标识符、优先级、虚拟 IP 地址以及监视其他路由器可用性所需的健康检查。对于 LVS 模块,需要定义负载均衡器的设置,包括虚拟服务器、后端服务器池、负载均衡算法等。

③ VRRP 实例配置:在 VRRP 模式下,配置文件中会包含一个或多个 VRRP 实例的配置。每个实例都会定义一个独立的虚拟路由器,包括其标识符、优先级、虚拟 IP 地址、健康检查设置等。

④ LVS 实例配置:在 Load Balancer 模式下,配置文件中会包含一个或多个 LVS 实例的配置。每个实例会定义一个独立的负载均衡服务,包括虚拟服务器、后端服务器池、负载均衡算法等设置。

⑤ 状态转换脚本:Keepalived 允许用户定义状态转换时执行的自定义脚本,这些脚本可以在主备切换时执行特定的操作,如通知管理员、启动或停止相关服务等。

7.2 全局配置

全局配置参数定义了邮件通知设置、路由器标识符以及 VRRP 的一些行为特性,确保在需要时可以进行状态通知,并控制 VRRP 协议的一些细节行为。

global_defs {notification_email {          #定义了接收通知邮件的邮箱地址列表acassen@firewall.loc failover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.loc  指定了发送通知邮件的邮箱地址smtp_server 192.168.200.1     #设置 SMTP 服务器的地址为 192.168.200.1smtp_connect_timeout 30       #SMTP 连接超时时间为 30 秒router_id LVS_DEVEL           #指定了路由器的标识符为 LVS_DEVELvrrp_skip_check_adv_addr      #表示在 VRRP 状态转换时跳过对广播地址的检查vrrp_strict                   #启用严格模式,要求 VRRP 实例只能在其配置的网络接口上工作vrrp_garp_interval 0          #设置 Gratuitous ARP(GARP)消息发送的间隔时间为 0,即禁用 GARPvrrp_gna_interval 0           #设置 Gratuitous Neighbor Advertisement(GNA)消息发送的间隔时间为 0,即禁用 GNA
#GARP 是指发送者在不请求的情况下主动发送 ARP 响应消息
#GNA 是 IPv6 网络中的类似协议,它也是主动发送者在不请求的情况下向网络上的其他设备发送邻居通告消息。类似于 GARPvrrp_mcast_group4 224.0.0.18 #指定组播IP地址范围:224.0.0.0到239.255.255.255,默认值:224.0.0.18;建议使用特有的组播地址或者改为单播vrrp_iptables        #此项和vrrp_strict同时开启时,则不会添加防火墙规则,如果无配置vrrp_strict项,则无需启用此项配置
}

7.3 VRRP实例配置(lvs调度器)

共同定义了一个 VRRP 实例的属性、身份验证设置以及与其关联的虚拟 IP 地址,使得 Keepalived 能够管理虚拟路由器的状态,并确保在故障时能够进行适当的状态转换。

vrrp_instance VI_1 {      #定义了一个名为 VI_1 的 VRRP 实例,用于创建一个虚拟路由器实体(lvs虚拟调度器)state MASTER          #指定该实例的初始状态为 MASTER,即主服务器状态。在 VRRP 中,可以将路由器配置为主服务器或备份服务器。interface eth0        #指定了 VRRP 实例所使用的网络接口,这里是 eth0virtual_router_id 51  #为 VRRP 实例指定了一个唯一的虚拟路由器 ID。该 ID 在同一广播域内必须是唯一的,范围:0-255priority 100          #设置了该实例的优先级为 100。在 VRRP 中,具有最高优先级的路由器将被选举为主服务器advert_int 1          #指定了 VRRP 报文的发送间隔为 1 秒。这决定了 VRRP 路由器之间交换状态信息的频率authentication {      #这个部分定义了 VRRP 实例的身份验证设置(认证机制)auth_type PASS    #指定了使用密码进行身份验证auth_pass 1111    #设置了用于身份验证的密码为 1111auth_type AH|PASS #AH为IPSEC认证(不推荐),PASS为简单密码(建议使用)auth_pass <PASSWORD> #预共享密钥,仅前8位有效,同一个虚拟路由器的多个keepalived节点必须一样}virtual_ipaddress {   #列出了该 VRRP 实例关联的虚拟 IP 地址列表。这些 IP 地址将会在主服务器和备份服务器之间切换,确保始终有一台服务器能够接收流量并处理数据包。生产环境可能指定上百个IP地址192.168.200.16              #指定VIP,不指定网卡,默认为eth0,注意:不指定/prefix,默认为/32192.168.200.17/24 dev eth1  #指定了一个带子网掩码的虚拟 IP 地址,并且明确地指定了它要绑定到的网络接口(eth1)192.168.200.18/24 dev eth2 label eth2:1  #指定VIP的网卡label,即将这个虚拟ip绑在eth2的虚拟网卡上}
}track_interface {     #配置监控网络接口,一旦出现故障,则转为FAULT(失败)状态实现地址转移eth0eth1…
}

注意:当生产环境中虚拟IP过多,可以在 virtual_ipaddress{ }前加入子配置文件声明,如:include /etc/keepalived/conf.d/*.conf,删除或注释主配置文件virtual_ipaddress{ }虚拟IP部分,最后每个项目生成一个子文件夹。

7.4 虚拟服务器与真实服务器配置 

定义虚拟服务器的行为,包括负载均衡算法、持久化会话设置以及用于检查真实服务器健康状态的参数。同时,您还可以为每个真实服务器定义权重和健康检查的详细规则,以确保负载均衡系统能够有效地分发流量并监控后端服务器的状态。

virtual_server 192.168.200.100 443 {  #定义了一个虚拟服务器,监听 IP 地址为 192.168.200.100,端口为 443delay_loop 6               #设置检测真实服务器状态的时间间隔为 6 秒lb_algo rr                 #指定了负载均衡算法为 Round Robin(轮询)方式lb_kind NAT                #指定了负载均衡的类型为 NAT。NAT 模式将客户端的请求通过 NAT 转换后发送到后端服务器persistence_timeout 50     #设置了持久化会话的超时时间为 50 秒protocol TCP               #指定了虚拟服务器所使用的协议为 TCPreal_server 192.168.201.100 443 {  #定义了一个真实服务器,其 IP 地址为 192.168.201.100,端口为 443weight 1               #设置了该真实服务器的权重为 1,用于负载均衡算法SSL_GET {              #这一部分定义了用于检查真实服务器健康状态的 SSL GET 请求的参数url {              #指定了要进行健康检查的 URL 路径,并提供了对应的摘要信息path /digest ff20ad2481f97b1754ef3e12ecd3a9cc}url {path /mrtg/digest 9b3a0c85a887a256d6939da88aabd8cd}TCP_CHECK {connect_port 443       #检查目标端口connect_timeout 3      #设置了连接超时时间为 3 秒nb_get_retry 3         #指定了在失败时尝试重新连接的次数为 3 次delay_before_retry 3   #设置了重试前的延迟时间为 3 秒}}}real_server 192.168.91.105 80 {  #定义第二台真实服务器weight 1TCP_CHECK {connect_port 80connect_timeout 3nb_get_retry 3delay_before_retry 3}}
}

二、Keepalived结合LVS负载均衡

Keepalived结合LVS构建的负载均衡系统不仅可以提高系统的可靠性和性能,还能简化管理并降低成本,是企业构建稳定、高效的网络架构的重要组成部分。

1. 环境准备

2. 实际操作

① 代理服务器7-0,7-1关闭防火墙,安装ipvsadm,keepalived

[root@localhost ~]# systemctl stop firewalld.service 
[root@localhost ~]# setenforce 0
[root@localhost ~]#yum install ipvsadm keepalived -y

② 修改代理服务器7-0keepalived服务配置

[root@localhost ~]#cd /etc/keepalived/
[root@localhost keepalived]#cp keepalived.conf keepalived.conf.bak #备份配置文件
[root@localhost keepalived]#vim keepalived.conf
10    smtp_server 127.0.0.1
12    router_id LVS_01
14    #vrrp_strict
21     interface ens33
27         auth_pass 123123
29     virtual_ipaddress {
30         192.168.190.188
31     }
34 virtual_server 192.168.190.188 80 {
37     lb_kind DR
38     persistence_timeout 0
删除43-51行,58行往后全部删除
后端真实服务器配置如下:real_server 192.168.190.102 80 {weight 1TCP_CHECK {connect_port 80connect_timeout 3nb_get_retry 3delay_before_retry 3}   }   real_server 192.168.190.103 80 {weight 1TCP_CHECK {connect_port 80connect_timeout 3nb_get_retry 3delay_before_retry 3}   }

③ 加载IPVS模块、保存当前的IPVS配置,并且查看当前系统上的IPVS配置信息

[root@localhost keepalived]# modprobe ip_vs  #加载 IP 虚拟服务器 (IPVS) 模块
[root@localhost keepalived]# ipvsadm-save > /etc/sysconfig/ipvsadm  #将当前 IPVS 的配置保存到 /etc/sysconfig/ipvsadm 文件中
[root@localhost keepalived]# systemctl start ipvsadm.service
[root@localhost keepalived]# systemctl restart keepalived.service 
[root@localhost keepalived]# ipvsadm -ln     #列出当前系统上的 IPVS 配置信息
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  127.0.0.1:80 rr
TCP  192.168.190.188:80 rr-> 192.168.190.102:80           Route   1      0          0         -> 192.168.190.103:80           Route   1      0          0  

④ 修改代理服务器7-1keepalived服务配置

192.168.190.101,7-1:
[root@localhost ~]# cd /etc/keepalived/
[root@localhost keepalived]# cp keepalived.conf  keepalived.conf.bak
[root@localhost keepalived]# ls192.168.190.100,7-0:
[root@localhost keepalived]# scp keepalived.conf 192.168.190.101:/etc/keepalived/
The authenticity of host '192.168.190.101 (192.168.190.101)' can't be established.
ECDSA key fingerprint is SHA256:aIqKteFz37bh8tOF7A07YElsVqfHgBSbxwkKXK9dfks.
ECDSA key fingerprint is MD5:9c:5a:7f:ec:d9:0c:2a:b2:9d:9e:03:77:f3:87:36:d4.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.190.101' (ECDSA) to the list of known hosts.
root@192.168.190.101's password: 
keepalived.conf  
#远程传输配置文件192.168.190.101,7-1:
[root@localhost keepalived]# vim keepalived.conf
12    router_id LVS_02
20     state BACKUP
23     priority 80
[root@localhost keepalived]# ipvsadm-save > /etc/sysconfig/ipvsadm
[root@localhost keepalived]# systemctl start ipvsadm.service
[root@localhost keepalived]# systemctl start keepalived.service 
[root@localhost keepalived]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.190.188:80 rr-> 192.168.190.102:80           Route   1      0          0         -> 192.168.190.103:80           Route   1      0          0  

⑤ 查看虚拟IP在代理服务器7-0还是7-1

⑥ web服务器7-2,7-3分别添加web文件,开启httpd服务,添加路由

192.168.190.102,7-2:
[root@localhost ~]# echo 7-2 > /var/www/html/index.html
[root@localhost ~]# systemctl start httpd
[root@localhost ~]# ifconfig lo:0 192.168.190.188 netmask 255.255.255.255
[root@localhost ~]# vim /etc/sysctl.conf
[root@localhost ~]# sysctl -p
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2192.168.190.103,7-3:
[root@localhost ~]# echo 7-2 > /var/www/html/index.html
[root@localhost ~]# systemctl start httpd
[root@localhost ~]# ifconfig lo:0 192.168.190.188 netmask 255.255.255.255
[root@localhost ~]# vim /etc/sysctl.conf
[root@localhost ~]# sysctl -p
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2

⑦ 客户端7-4访问代理服务器VIP

[root@localhost ~]# curl 192.168.190.188
7-2
[root@localhost ~]# curl 192.168.190.188
7-3
[root@localhost ~]# curl 192.168.190.188
7-2
[root@localhost ~]# curl 192.168.190.188
7-3

注意:如果PC端浏览器访问VIP,刷新没有变化需要关闭apache长连接设置

[root@localhost ~]# vim /etc/httpd/conf/httpd.conf
keepalive off

三、Keepalived优化 

1. 非抢占与延时抢占

默认配置为立即抢占,效果如下:

关闭7-0keepalived服务,观察客户端访问情况,并查看虚拟IP所处位置

7-0代理lvs1:
[root@localhost keepalived]# systemctl stop keepalived.service7-4客户端:
[root@localhost ~]# curl 192.168.190.188
7-3
[root@localhost ~]# curl 192.168.190.188
7-2

非抢占模式: 

① 两台LVS代理服务器均需要修改keepalived服务配置

[root@localhost keepalived]# vim keepalived.conf19 vrrp_instance VI_1 {20     state BACKUP        #均改为BACKUP21     nopreempt           #添加此行
[root@localhost keepalived]# systemctl restart keepalived.service

② 默认虚拟IP在LVS1上,修改完LVS1配置后,查看虚拟IP已转移到LVS2上

[root@localhost keepalived]# hostname -I
192.168.190.101 192.168.190.188 192.168.122.1

延迟抢占:

① 两台LVS代理服务器均需要修改keepalived服务配置

[root@localhost keepalived]# vim keepalived.conf 
19 vrrp_instance VI_1 {
20     state BACKUP
21     preempt_delay 10
[root@localhost keepalived]# systemctl restart keepalived.service

② 先前测试非抢占模式,目前虚拟IP位于LVS2上,修改LVS1实例配置,并查看延迟抢占

[root@localhost keepalived]# vim keepalived.conf
19 vrrp_instance VI_1 {
20     state BACKUP
21     preempt_delay 10    #抢占延迟模式,默认延迟300s
[root@localhost keepalived]# systemctl restart keepalived.service 
[root@localhost keepalived]# hostname -I
192.168.190.100 192.168.122.1 
[root@localhost keepalived]# hostname -I
192.168.190.100 192.168.122.1 
[root@localhost keepalived]# hostname -I
192.168.190.100 192.168.122.1 
[root@localhost keepalived]# hostname -I
192.168.190.100 192.168.190.188 192.168.122.1 
[root@localhost keepalived]# hostname -I
192.168.190.100 192.168.190.188 192.168.122.1 

2. 单播与多播 

  • 单播模式:在单播模式下,VRRP 报文是通过单播方式进行传输的。这意味着每个 VRRP 实例的主机都会向其他 VRRP 实例的主机发送单独的 VRRP 报文。这种方式需要占用更多的网络带宽,但可以提供更高的可靠性和安全性。
  • 多播模式:在多播模式下,VRRP 报文是通过多播方式进行传输的。这意味着每个 VRRP 实例的主机都会向一个多播地址发送 VRRP 报文。这种方式需要占用更少的网络带宽,但可能会受到网络中的其他设备的影响,从而导致可靠性和安全性下降。

因此,单播模式相对于多播模式来说,更加稳定和安全,但需要占用更多的网络带宽。多播模式则更加节省网络带宽,但可能会受到其他因素的影响,从而导致可靠性和安全性下降。在实际应用中,需要根据具体的网络环境和需求来选择适合的 VRRP 模式。

抓包查看vrrp报文:可见密码没什么意义

抓包查看单播地址:在 ens33 网卡上抓取源 IP 地址为 192.168.190.100 的网络流量

修改多播:

① 分别修改LVS1,LVS2 keepalived配置文件

[root@localhost keepalived]# vim keepalived.conf
global_defs {
vrrp_mcast_group4 234.6.6.6
[root@localhost keepalived]# systemctl restart keepalived.service

② 抓拍查看报文

修改单播:

① 分别修改LVS1,LVS2 keepalived配置文件

LVS1,192.168.190.100:
vrrp_instance VI_1 {
……unicast_src_ip 192.168.190.100  #本机IP,master100,backup101unicast_peer {192.168.190.101                 #指向对方主机IP 如果有多个keepalived,再下面加其它节点的IP}LVS2,192.168.190.101:
vrrp_instance VI_1 {
……unicast_src_ip 192.168.190.101unicast_peer {192.168.190.100}

② 抓包,在 ens33 网卡上抓取源 IP 地址为 192.168.190.100,目标 IP 地址为 192.168.190.101 的网络流量

3. 通知脚本

通知脚本(notification script)是用来在状态转换发生时通知管理员或执行特定操作的脚本。当Keepalived监测到故障或状态变化时,例如主服务器故障或切换到备用服务器,它会触发通知脚本。记录状态变化和事件日志,并发送电子邮件或短信通知给管理员或运维团队等操作。

① 编写脚本

[root@localhost opt]# vim keepalive.sh
#!/bin/bash
#
contact='num@qq.com'   #qq邮箱
notify() {mailsubject="$(hostname) to be $1, vip floating"mailbody="$(date +'%F %T'): vrrp transition, $(hostname) changed to be $1"echo "$mailbody" | mail -s "$mailsubject" $contact
}
case $1 in
master)notify master;;
backup)notify backup;;
fault)notify fault;;
*)echo "Usage: $(basename $0) {master|backup|fault}"exit 1;;
esac
[root@localhost opt]# chmod +x keepalived.sh 

② 修改LVS1keepalived配置文件

[root@localhost opt]# vim /etc/keepalived/keepalived.conf
vrrp_instance VI_1 {……notify_master "/opt/keepalive.sh master"notify_backup "/opt/keepalive.sh backup"notify_fault "/opt/keepalive.sh fault"
}
[root@localhost opt]# systemctl restart keepalived.service 

③ 配置邮箱

[root@localhost ~]# vim /etc/mail.rc
set from=num@qq.com
set smtp=smtp.qq.com
set smtp-auth-user=num5@qq.com
set smtp-auth-password=*******   #POP3/IMAP/SMTP/Exchange/CardDAV 授权码

④ 模拟master故障

[root@localhost opt]# systemctl restart keepalived.service 
[root@localhost opt]# killall keepalived

⑤ 查收邮件 

​​​​​​​

4. 日志功能

开启单独日志功能

① 设置日志输出的设施

[root@localhost opt]# vim /etc/sysconfig/keepalived
KEEPALIVED_OPTIONS="-D -S 6"

② 将local6设备的所有日志消息重定向到/data/keepalived.log文件中。

[root@localhost opt]# vim /etc/rsyslog.conf
local6.*                                                /data/keepalived.log
[root@localhost opt]# systemctl restart rsyslog.service
[root@localhost opt]# systemctl restart keepalived.service
[root@localhost opt]# ls /data
keepalived.log
#查看生成日志文件

5. 模拟脑裂

[root@localhost keepalived]#iptables -A INPUT -s 192.168.190.100 -j REJECT 
#在备份主机LVS1中加入此项
[root@localhost keepalived]#ip a
#可以在主备上都发现vip地址

都有哪些原因导致脑裂?

① 高可用服务器对之间心跳线链路发生故障,导致无法正常通信。

② 因心跳线坏了(包括断了,老化)。

③ 因网卡及相关驱动坏了,ip配置及冲突问题(网卡直连)

④ 因心跳线间连接的设备故障(网卡及交换机)

⑤ 高可用服务器上开启了 iptables防火墙阻挡了心跳消息传输。

⑥ 高可用服务器上心跳网卡地址等信息配置不正确,导致发送心跳失败

⑦ 其他服务配置不当等原因,如心跳方式不同,心跳广插冲突、软件Bug等。

⑧ 多组keepalive服务器造成   组播冲突    1.换组播地址   2.改成单播 

如何解决keepalived脑裂问题?

同时使用串行电缆和以太网电缆连接、同时使用两条心跳线路,这样一条线路断了,另外一条还是好的,依然能传送心跳消息。即多拉一条网线。

6. 实现其它应用的高可用性 VRRP Script

keepalived利用 VRRP Script 技术,可以调用外部的辅助脚本进行资源监控,并根据监控的结果实现优先动态调整,从而实现其它应用的高可用性功能。

6.1 VRRP Script 配置

① 定义脚本

vrrp_script:自定义资源监控脚本,vrrp实例根据脚本返回值,公共定义,可被多个实例调用,定义在vrrp实例之外的独立配置块,一般放在global_defs设置块之后。通常此脚本用于监控指定应用的状态。一旦发现应用的状态异常,则触发对MASTER节点的权重减至低于SLAVE节点,从而实现 VIP 切换到 SLAVE 节点

格式:

vrrp_script <SCRIPT_NAME> {script <STRING>|<QUOTED-STRING>   #此脚本返回值为非0时,会触发下面OPTIONS执行OPTIONS 
}

② 调用脚本

track_script:调用vrrp_script定义的脚本去监控资源,定义在VRRP实例之内,调用事先定义的vrrp_script

格式:

track_script {SCRIPT_NAME_1SCRIPT_NAME_2
}

6.2 定义 VRRP script

vrrp_script <SCRIPT_NAME> { 				#定义一个检测脚本,在global_defs 之外配置script <STRING>|<QUOTED-STRING> 		#shell命令或脚本路径(注意执行权限)interval <INTEGER> 					#间隔时间,单位为秒,默认1秒timeout <INTEGER> 						#超时时间weight  <INTEGER:-254..254> 			#默认为0,如果设置此值为负数,当上面脚本返回值为非0时,会将此值与本节点权重相加可以降低本节点权重,即表示fall. 如果是正数,当脚本返回值为0,会将此值与本节点权重相加可以提高本节点权重,即表示 rise.通常使用负值fall <INTEGER>       					#执行脚本连续几次都失败,则转换为失败,建议设为2以上rise <INTEGER>       					#执行脚本连续几次都成功,把服务器从失败标记为成功user USERNAME [GROUPNAME] 				#执行监测脚本的用户或组      init_fail         						#设置默认标记为失败状态,监测成功之后再转换为成功状态
}

操作:keepalived+nginx实现反向代理集群

① 两台代理服务器安装nginx,修改配置文件,配置反向代理

[root@localhost ~]# yum install epel-release.noarch -y
[root@localhost ~]# yum install nginx -y
[root@localhost ~]# vim /etc/nginx/nginx.conf23     upstream web {24     server 192.168.190.102;25     server 192.168.190.103;26     }48         location / {49         proxy_pass http://web;50         }
[root@localhost ~]# systemctl restart nginx
[root@localhost ~]# scp /etc/nginx/nginx.conf 192.168.190.101:/etc/nginx/nginx.conf

② 编写脚本

[root@localhost ~]# vim /etc/keepalived/ng.sh
killall -0 nginx
[root@localhost ~]# chmod +x /etc/keepalived/ng.sh

③ 编辑keepalived配置文件

[root@localhost ~]# vim /etc/keepalived/keepalived.conf
# 全局配置下配置,平级    
vrrp_script check_down {script  "/etc/keepalived/ng.sh"   interval 1weight -30fall  3rise 2timeout 2
}vrrp_instance VI_1 {……track_script {check_down}
}

④ 模拟故障,关闭代理服务器1nginx服务,访问页面需要多次刷新,同时观察VIP在哪台机器

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/728566.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HTML静态网页成品作业(HTML+CSS)——花主题介绍网页设计制作(1个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有1个页面。 二、作品演示 三、代…

C语言:基于单链表实现的泊车管理系统

一、需求 &#xff08;1&#xff09;管理员方账号登录&#xff1b; &#xff08;2&#xff09;车位管理显示&#xff1a;车位状态&#xff1b; &#xff08;3&#xff09;收费管理&#xff1a;小轿车 5元/小时&#xff0c;面包车6元/小时&#xff0c;大货车或客车7元/小时&a…

ChatGPT提示技巧——零,一和少量示例提示

ChatGPT提示技巧——零&#xff0c;一和少量示例提示 ​ 零样本(zero-shot)、少样本(few-shot)和单样本(one-shot)提示是用于在最少或没有示例的情况下从ChatGPT生成文本的技巧。这些技巧用于当某个具体任务有限定数据的时候或者任务是新的并且没有很好的定义的时候。 提示格…

设计模式之——简单工厂模式

上图为简单工厂模式的架构图。 1&#xff0c;产品&#xff08;Product&#xff09; 将会对接口进行声明。 2&#xff0c;具体产品&#xff08;Concrete Products&#xff09;是产品接口的不同实现。 3&#xff0c;创建者&#xff08;Concrete Creators&#xff09;将会重写基…

TCP传输收发

TCP通信: TCP发端: socket connect send recv close TCP收端: socket bind listen accept send recv close 1.connect int connect(int sockfd, const struct sockaddr *addr, socklen_t ad…

20个Python函数程序实例

前面介绍的函数太简单了&#xff1a; 以下是 20 个不同的 Python 函数实例 下面深入一点点&#xff1a; 以下是20个稍微深入一点的&#xff0c;使用Python语言定义并调用函数的示例程序&#xff1a; 20个函数实例 简单函数调用 def greet():print("Hello!")greet…

css-vxe-form-item中输入框加自定义按钮(校验位置错误)

1.浮动错误效果 提示内容不对 2.不使用浮动&#xff0c;使用行内块元素 代码如下 <vxe-form-item title"yoyo:" field"assembleWorkNo" span"8"><template #default><vxe-input style"width:70%;display:inline-block;&quo…

全天候购药系统(微信小程序+web后台管理)

PurchaseApplet 全天候购药系统&#xff08;微信小程序web后台管理&#xff09; 传统线下购药方式存在无法全天候向用户提供购药服务&#xff0c;无法随时提供诊疗服务等问题。为此&#xff0c;运用软件工程开发规范&#xff0c;充分调研建立需求模型&#xff0c;编写开发文档…

Java输入和输出处理

一、Java I/O 文件、内存、键盘--->程序--->文件、内存、控制台 二、文件 相关记录或放在一起的数据的集合 思考&#xff1a; Java程序如何访问文件属性&#xff1f; 解答&#xff1a; Java API:java.io.File类 三、File类 File类的常用方法 方法名称说明boole…

maven项目结构管理统一项目配置操作

一、maven分模块开发 Maven 分模块开发 1.先创建父工程&#xff0c;pom.xml文件中&#xff0c;打包方式为pom 2.然后里面有许多子工程 3.我要对父工程的maven对所有子工程进行操作 二、解读maven的结构 1.模块1 <groupId>org.TS</groupId><artifactId>TruthS…

黑马点评-分布式锁业务

分布式锁原理和实现 分布式系统部署了多个tomcat&#xff0c;每个tomcat都有一个属于自己的jvm&#xff0c;那么假设在服务器A的tomcat内部&#xff0c;有两个线程&#xff0c;这两个线程由于使用的是同一份代码&#xff0c;那么他们的锁对象是同一个&#xff0c;是可以实现互…

2024 PhpStorm激活,分享几个PhpStorm激活的方案

文章目录 PhpStorm 公司简介我这边使用PhpStorm的理由PhpStorm 2023.3 最新变化AI Assistant 预览阶段结束 正式版基于 LLM 的代码补全测试代码生成编辑器内代码生成控制台中基于 AI 的错误解释 Pest 更新PHP 8.3 支持#[\Override] 特性新的 json_validate() 函数类型化类常量弃…

142.环形链表II

142.环形链表II 力扣题目链接(opens new window) 题意&#xff1a; 给定一个链表&#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。 为了表示给定链表中的环&#xff0c;使用整数 pos 来表示链表尾连接到链表中的位置&#xff08;索引从 0…

Linux性能分析之CPU实战

本课程专注于教授学员如何利用各种工具和技术来分析Linux系统中的CPU性能问题。通过实际操作和案例研究&#xff0c;学员将深入了解CPU性能优化和故障排除&#xff0c;提升其在Linux环境下的技能水平。 课程大小&#xff1a;1.9G 课程下载&#xff1a;https://download.csdn.…

例行性工作(at,crontab)

目录 单一执行的例行性工作at 语法 选项 时间格式 at的工作文件存放目录 at工作的日志文件 实例 命令总结&#xff1a; 循环执行的例行性工作crond 语法 选项 crontab工作调度对应的系统服务 crontab工作的日志文件 用户定义计划任务的文件所在目录 动态查看 crontab文件格式 文…

尤雨溪:Vue 未来展望新的一轮

十年&#xff0c;一个既漫长又短暂的时光跨度&#xff0c;对于技术世界来说&#xff0c;更是沧海桑田的瞬间。在这十年里&#xff0c;Vue.js 从无到有&#xff0c;从默默无闻到蜚声全球&#xff0c;不仅改变了前端开发的面貌&#xff0c;更成为了无数开发者手中的得力工具。 在…

【RT-DETR有效改进】全新的SOATA轻量化下采样操作ADown(轻量又涨点,附手撕结构图)

一、本文介绍 本文给大家带来的改进机制是利用2024/02/21号最新发布的YOLOv9其中提出的ADown模块来改进我们的Conv模块,其中YOLOv9针对于这个模块并没有介绍,只是在其项目文件中用到了,我将其整理出来用于我们的RT-DETR的项目,经过实验我发现该卷积模块(作为下采样模块)…

多路归并总结

1.鱼塘钓鱼 1262. 鱼塘钓鱼 - AcWing题库 多路归并的模型。 对于每个鱼塘构成的等差数列&#xff0c;我们每次在数列最头部进行选择&#xff0c;选完后再顺延到下一个数即可。我们可以通过维护一个包含所有等差序列首元素的大根堆&#xff0c;使每次可以很容易地选出最大的数…

Vivado使用记录(未完待续)

一、Zynq开发流程 二、软件安装 三、软件使用 字体大小修改&#xff1a;Setting、Font 四、Vivado基本开发流程 1、创建工程 Quick Start 组包含有 Create Project&#xff08;创建工程&#xff09;、 Open Project&#xff08;打开工程&#xff09;、 Open Example Project&…

List之ArrayList、LinkedList深入分析

集合 Java 集合&#xff0c; 也叫作容器&#xff0c;主要是由两大接口派生而来&#xff1a;一个是 Collection接口&#xff0c;主要用于存放单一元素&#xff1b;另一个是 Map 接口&#xff0c;主要用于存放键值对。对于Collection 接口&#xff0c;下面又有三个主要的子接口&…