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.rhkb.cn/news/273473.html

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

相关文章

IDEA管理Git + Gitee 常用操作

文章目录 IDEA管理Git Gitee 常用操作1.Gitee创建代码仓库1.创建仓库1.点击新建仓库2.完成仓库信息填写3.创建成功4.管理菜单可以修改这个项目的设置 2.设置SSH公钥免密登录基本介绍1.找到.ssh目录2.执行指令 ssh-keygen3.将公钥信息添加到码云账户1.点击设置2.ssh公钥3.复制.…

软件开发服务合同套用模板

一、合作方式 二、合同标的 三、开发进度及软件成果交付 四、开发费用 五、付款结算方式 六、知识产权条款 七、双方的权利和义务 八、验收 九、售后服务支持 十、培训 十一、保密责任 十二、不可抗力 十三、争议的解决 十四、其它事项 软件开发全套资料获取下载…

python之海龟绘图

海龟绘图&#xff08;turtle&#xff09;是一个Python内置的绘图库&#xff0c;也被称为“Turtle Graphics”或简称“Turtles”。它采用了一种有趣的绘图方式&#xff0c;模拟一只小海龟在屏幕上爬行&#xff0c;而小海龟爬行的路径就形成了绘制的图形。这种绘图方式最初源自20…

elasticsearch篇:RestClient操作

1. RestClient ES官方提供了各种不同语言的客户端&#xff0c;用来操作ES。这些客户端的本质就是组装DSL语句&#xff0c;通过http请求发送给ES。官方文档地址&#xff1a;Elasticsearch Clients | Elastic 其中的Java Rest Client又包括两种&#xff1a; Java Low Level Res…

Microsoft SQL Server 编写汉字转拼音函数

目录 应用场景 举例 函数实现 小结 应用场景 在搜索应用中&#xff0c;我们一般会提供一个搜索框&#xff0c;输入关健字&#xff0c;点击查询按钮以获取结果数据。大部分情况我们会提供模糊查询的形式以在一个或多个字段进行搜索以获取结果。这样可以简化用户的操作&…

jvm八股

文章目录 运行时数据区域Java堆对象创建对象的内存布局对象的访问定位句柄直接指针 GC判断对象是否已死引用计数算法可达性分析算法 引用的类别垃圾收集算法分代收集理论标记清除算法标记复制算法标记整理算法 实现细节并发的可达性分析 垃圾收集器serial收集器ParNew收集器Par…

【PyTorch实战演练】深入剖析MTCNN(多任务级联卷积神经网络)并使用30行代码实现人脸识别

文章目录 0. 前言1. 级联神经网络介绍2. MTCNN介绍2.1 MTCNN提出背景2.2 MTCNN结构 3. MTCNN PyTorch实战3.1 facenet_pytorch库中的MTCNN3.2 识别图像数据3.3 人脸识别3.4 关键点定位 0. 前言 按照国际惯例&#xff0c;首先声明&#xff1a;本文只是我自己学习的理解&#xff…

【小黑送书—第十二期】>>一本书讲透Elasticsearch:原理、进阶与工程实践(文末送书)

Elasticsearch 是一种强大的搜索和分析引擎&#xff0c;被广泛用于各种应用中&#xff0c;以其强大的全文搜索能力而著称。 不过&#xff0c;在日常管理 Elasticsearch 时&#xff0c;我们经常需要对索引进行保护&#xff0c;以防止数据被意外修改或删除&#xff0c;特别是在进…

【Mining Data】收集数据(使用 Python 挖掘 Twitter 数据)

@[TOC](【Mining Data】收集数据(使用 Python 挖掘 Twitter 数据)) 具体步骤 第一步是注册您的应用程序。特别是,您需要将浏览器指向 http://apps.twitter.com,登录 Twitter(如果您尚未登录)并注册新应用程序。您现在可以为您的应用程序选择名称和描述(例如“Mining Demo”…

3.6研究代码(2)

指的是微电网运行参数。 在MATLAB中&#xff0c;randi([0,1],1,48) 会生成一个包含1*48个0或1的随机整数数组。这意味着数组中的每个元素都将是0或1。 MATLAB帮助中心&#xff1a;均匀分布的伪随机整数 - MATLAB randi - MathWorks 中国https://ww2.mathworks.cn/help/matlab/r…

java SSM流浪宠物救助与领养myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM流浪宠物救助与领养管理系统是一套完善的web设计系统&#xff08;系统采用SSM框架进行设计开发&#xff0c;springspringMVCmybatis&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系…

【自然语言处理】NLP入门(五):1、正则表达式与Python中的实现(5):字符串常用方法:对齐方式、大小写转换详解

文章目录 一、前言二、正则表达式与Python中的实现1.字符串构造2. 字符串截取3. 字符串格式化输出4.字符转义符5. 字符串常用函数函数与方法之比较 6. 字符串常用方法1. 对齐方式center()ljust()rjust() 2. 大小写转换lower()upper()capitalize()title()swapcase() 一、前言 本…

深入浅出计算机网络 day.1 概论② 因特网概述

当你回头看的时候&#xff0c;你会发现自己走了一段&#xff0c;自己都没想到的路 —— 24.3.9 内容概述 01.网络、互连&#xff08;联&#xff09;网与因特网的区别与联系 02.因特网简介 一、网络、互连&#xff08;联&#xff09;网与因特网的区别与联系 1.若干节点和链路互连…

[Java安全入门]三.URLDNS链

一.前言 在初步学习java的序列化和反序列化之后&#xff0c;这里学习java反序列化漏洞的一个利用链&#xff0c;也是比较基础的一条链。 由于URLDNS不需要依赖第三方的包&#xff0c;同时不限制jdk的版本&#xff0c;所以通常用于检测反序列化的点。 二.代码展开分析 构造链 …

STM32day2

1.思维导图 个人暂时的学后感&#xff0c;不一定对&#xff0c;没什么东西&#xff0c;为做项目奔波中。。。1.使用ADC采样光敏电阻数值&#xff0c;如何根据这个数值调节LED灯亮度。 while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */adc_val HAL_ADC_GetValue(&a…

微信小程序(五十三)修改用户头像与昵称

注释很详细&#xff0c;直接上代码 上一篇 新增内容&#xff1a; 1.外界面个人资料基本模块 2.资料修改界面同步问题实现&#xff08;细节挺多&#xff0c;考虑了后期转服务器端的方便之处&#xff09; 源码&#xff1a; app.json {"window": {},"usingCompone…

从零搭建React18.2+ReactRoute6.22+TS5+RTK2.2搭配antd5+antd-style书写All in Js完整体验项目规范

1. 使用CRA创建项目 全局设置npm淘宝镜像源 npm config set registry https://registry.npmmirror.com -g使用最新版create-react-app初始化项目结构 npx create-react-app custom-template --template typescript初始化项目之后在package.json文件中配置使用node>18.0.0…

【linux】02 :Linux基础命令

1.掌握linux系统的目录结构 linux只有一个顶级目录&#xff0c;称之为&#xff1a;根目录。 windows系统有多个顶级目录&#xff0c;即各个盘符。 2.linux路径的描述方式 /在Linux中的表示&#xff1a;出现在开头表示根目录&#xff0c;出现在后面表示层级关系。 3.什么是命…

【数据库系统概论】第2章:关系数据库

文章目录 0. 前言2.1 关系数据结构及形式化定义2.1.1关系2.1.2 关系模式 2.2 关系操作2.3 关系的完整性2.4 关系代数 0. 前言 关系数据库系统是支持关系模型的数据库系统。第一章初步介绍了关系模型及其基本术语。本章将深入介绍关系模型。 按照数据模型的三个要素&#xff0c;…

考研经验|如何从考研失败中走出来?

对我来说&#xff0c;太丢人了 其实我在本科的时候在同学眼中&#xff0c;一直很优秀&#xff0c;每年奖学金必有我的&#xff0c;国家励志奖学金&#xff0c;国家奖学金&#xff0c;这种非常难拿的奖学金&#xff0c;我也拿过&#xff0c;本科期间学校有一个公费去新西兰留学的…