深入理解与应用Keepalive机制

一、VRRP协议

(一)VRRP概述

1.诞生背景

终端设备访问不同网段设备的时候,必须经过网关。如果只有1个网关,那么网络就存在 单点故障,所以为了避免单点故障导致网络的通信中断, 所以,我们建议在一个网段中,可以同时添加多个网关,从而增加网关的冗余性和网络的可靠性; 但是,多网关的部署会带来其他的问题:

1.网关IP地址冲突

2.终端用户需要频繁的切换网关IP地址

针对上述两个问题,提出了:

在同网段的多个网关之间运行VRRP,形成1个虚拟网关,终端用户都配置和使用虚拟网关就可以了。

其作用为

在同一个网段的多个真实网关之间配置和运用,形成层一个虚拟路由器, 从而实现网关的冗余和负载均衡

2.基本理论

VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议)是一种网络层的容错协议。它的主要目的是在多个物理路由器之间提供一个虚拟路由器服务,以实现默认网关的高可用性。在传统的网络环境中,如果静态配置的默认网关出现故障,则会导致网络中的所有主机失去对外通信的能力。VRRP通过将多台路由器联合起来形成一个虚拟路由器,并选举出一台主路由器来处理所有的流量转发,而其他的备份路由器则随时待命,一旦主路由器出现故障,备份路由器能够迅速接替工作,从而确保网络连通性的持续性和可靠性。

(二)VRRP工作原理

(1) 虚拟路由器中的路由器根据优先级(priority)选举出Master。Master路由器通过发送免费ARP报文,将自己的虚拟MAC地址通知给与它连接的设备或者主机,从而承担报文转发任务;

(2) Master路由器周期性发送VRRP报文(心跳线),以公布其配置信息(优先级等)和工作状况;

(3) 如果Master路由器出现故障,虚拟路由器中的Backup路由器将根据优先级重新选举新的Master;

(4) 虚拟路由器状态切换时,Master路由器由一台设备切换为另外一台设备,新的Master路由器只是简单地发送一个携带虚拟路由器的MAC地址和虚拟IP地址信息的免费ARP报文,这样就可以更新与它连接的主机或设备中的ARP相关信息。网络中的主机感知不到Master路由器已经切换为另外一台设备。

(5) Backup路由器的优先级高于Master路由器时,由Backup路由器的工作方式(抢占方式和非抢占方式以及延时抢占)决定是否重新选举Master。

(三)VRRP相关术语

虚拟路由器:Virtual Router 不是真实存在 ,虚构出来的

虚拟路由器标识:VRID(0-255),唯一标识虚拟路由器

VIP:Virtual IP 192.168.91.100 路由1 路由2

VMAC:Virutal MAC (00-00-5e-00-01-VRID)

物理路由器:

master:主设备

backup:备用设备

priority:优先级

二、keepalive基本理论

Keepalive机制是网络通信中一种重要的保持连接健康状态的方法,有助于优化网络资源使用,提高服务稳定性和响应速度

常见的keepalive版本

VRRP Keepalive:虚拟路由冗余协议(VRRP)中的心跳检测机制,用于选举和维护路由器的主备状态,确保网络高可用性。

TCP Keepalive:是一种内置于TCP协议中的功能,用于检测并维持连接的活跃状态。当两个端点间存在一个已建立的TCP连接,但在一段时间内没有数据传输时,启用Keepalive的一方会周期性地发送特殊的探测报文(通常是一个空TCP段)给对方。如果接收方没有回应足够数量的Keepalive探测报文,发送方就会认为连接已经断开,并关闭该连接。

HTTP Keepalive:允许HTTP客户端与服务器之间复用同一TCP连接来发送多个请求和响应,以减少TCP连接建立和销毁带来的开销。

应用程序级Keepalive:许多应用程序和服务也有自己的Keepalive机制,比如MySQL数据库的连接保活、WebSocket的ping/pong消息等。

主要学习VRRP Keepalive

(一)基本性能

keepalive是专门为LVS与HA设计的一款健康检查软件

支持故障自动切换(Failover)

支持节点健康状态检查(Health Checking)判断 LVS 负载调度器、节点服务器的可用性,当 master 主机出现故障及时切换到backup 节点保证业务正常,当 master故障主机恢复后将其重新加入群集并且业务重新切换回 master 节点。

官方网站:Keepalived for Linux

(二)实现原理

实现原理与虚拟路由一致

1.首先根据优先级选出Master提供服务

2.Master默认每间隔1秒向Baskup发送一次VRRP报文,告知Baskup自己处于工作状态,并公布配置信息(优先级等)情况

  1. 如果Master路由器出现故障,Backup将根据优先级重新选举为新的Master

4.当原Master恢复工作时,将根据抢占模式(抢占方式和非抢占方式以及延时抢占)决定是否重新成为Master

(三)抢占模式

1.抢占式

主服务器宕机,过了一段时间修好了,直接把主权抢过来

2.非抢占式

主服务器宕机,过了一段时间修好了,原来的主就作为备了

3延迟抢占

主修好后,等待一定的时间后再次成为主

三、keepalive服务

keepalive服务可以使用yum安装、以及编译安装

本地yum源自带的版本比较旧

编译安装可以从官网下载较新的安装包进行安装

(一)安装keepalive

使用yum安装:yum install keepalived.x86_64 -y

默认的主配置文件有157行

(二)全局配置

首先看第一部分3-17行,为全局配置

global_defs

#全局配置

notification_email

#定义当VRRP实例状态发生变化时,系统将通过电子邮件发送通知给指定的收件人列表。

acassen@firewall.loc, failover@firewall.loc, sysadmin@firewall.loc

#邮件通知的接收者。

notification_email_from Alexandre.Cassen@firewall.loc

#设置发送邮件通知时显示的发件人地址,这里是 Alexandre.Cassen@firewall.loc。

smtp_server 192.168.200.1

#指定SMTP服务器地址,本例中为 192.168.200.1,该服务器用于发送邮件通知。

smtp_connect_timeout 30

#设置SMTP服务器连接超时时间,单位为秒,这里为30秒。

router_id LVS_DEVEL

#为当前运行的Keepalived实例设置一个唯一的标识符,用在日志和其他网络通信中

vrrp_skip_check_adv_addr

#跳过对通告地址(advertised address)的检查。如果启用此选项,在某些情况下

#可以避免错误,比如通告地址未在任何接口上配置。

vrrp_strict

#启用严格模式,要求配置必须符合RFC文档的标准规范,否则Keepalived服务可能不会启动。

#建议关闭

vrrp_garp_interval 0

#设置发送GARP(即无请求的ARP响应)消息的时间间隔,默认值通常为1秒。设为0表示禁用GARP功能。

vrrp_gna_interval 0

#设置发送GNA(即IPv6下的无请求邻居通告)消息的时间间隔。设为0表示禁用GNA功能

(三)VRRP实例

第二部分:VRRP实例配置(19-34)

vrrp_instance VI_1

'定义VRRP实例名称。'

state MASTER

'设置当前节点在VRRP组中的初始状态为MASTER。这意味着该节点将优先处理请求,

并拥有VIP(虚拟IP地址)的所有权'

'interface eth0'

'指定VRRP通告报文通过哪个网络接口发送,这里使用的是eth0接口。'

virtual_router_id 51

'每个VRRP实例需要一个唯一的标识符,这里用数字51表示。主备需要在同一个标识符内'

priority 100

'设置本节点在VRRP组中的优先级,数值越高代表优先级越高,优先级最高的节点将成为MASTER'

advert_int 1

'设置VRRP通告消息的时间间隔,单位为秒。此处设置为每秒发送一次心跳消息以确认其是否在线'

authentication:

auth_type PASS '设置认证类型为密码认证。'

auth_pass 1111 '设置用于身份验证的共享密码。'

virtual_ipaddress

'列出此VRRP实例要管理的一系列虚拟IP地址'

(四)服务器配置

第三部分为服务器配置(36-60)

'虚拟服务器'

virtual_server 192.168.200.100 443

#定义了一个虚拟服务器,对外提供服务的地址为192.168.200.100,监听端口为443(即HTTPS服务)。

delay_loop 6

#健康检查间隔,每隔6秒对后端服务器执行一次健康检查。

lb_algo rr

#负载均衡算法采用轮询(Round Robin)策略。

lb_kind NAT

#负载均衡方式采用NAT,客户端与真实服务器之间的通信通过NAT进行转发。

#persistence_timeout 50

#会话保持超时时间,同一个客户端在50秒内发起的新请求都会被转发到同一台后端服务器上。

protocol TCP

#明确指出虚拟服务器处理的是TCP流量。

'真实服务器配置'

real_server 192.168.201.100 443

#定义一个真实服务器,其IP地址为192.168.201.100,同样监听443端口

weight 1

#权重值为1,表示该服务器在负载均衡中分配请求的相对权重。

SSL_GET

#使用SSL协议发送GET请求来进行健康检查。

url

#定义了两个需要检查的URL路径及其预期的HTTP响应摘要。一般不适用url,需要更改

connect_timeout 3 #设置连接到真实服务器的超时时间为3秒。

nb_get_retry 3 #如果首次请求未能得到正确的摘要,将重试3次。

delay_before_retry #每次重试前等待3秒。

四、实际操作

LVS + Keepalived 高可用群集

环境设备

|----------|----------------------------|
| LVS1 | 192.168.83.30 (MASTER) |
| LVS2 | 192.168.83.40 (BACKUP) |
| web1 | 192.168.83.50 |
| web2 | 192.168.83.60 |
| 客户端 | 192.168.83.100 |
| VIP | 192.168.83.200 |

(一)web服务器

首先配置web服务

1.下载安装web服务

yum install httpd -y

2.建立虚拟IP\

3.调整内核参数

net.ipv4.conf.all.arp_ignore 和 net.ipv4.conf.default.arp_ignore

'设置为1表示节点将更严格地处理ARP请求。在某些情况下,系统不会响应非本地IP地址的ARP请求

这有助于防止IP地址冲突,并且可以用于LVS DR模式下的Director节点,以避免对外直接响应ARP请求'

net.ipv4.conf.all.arp_announce 和 net.ipv4.conf.default.arp_announce

'设置为2表示节点在发送ARP应答时总是使用其主接口上的最具体的地址(即,优先级最高的源IP地址)

这同样对LVS DR模式很有用,确保Director节点在回应ARP请求时只使用VIP,而不是实际的物理接

口地址。'

调整完毕后开启web服务:systemctl start network

在站点目录下构建数据文件

3.调整内核参数


net.ipv4.conf.all.arp_ignore 和 net.ipv4.conf.default.arp_ignore

'设置为1表示节点将更严格地处理ARP请求。在某些情况下,系统不会响应非本地IP地址的ARP请求

这有助于防止IP地址冲突,并且可以用于LVS DR模式下的Director节点,以避免对外直接响应ARP请求'

net.ipv4.conf.all.arp_announce 和 net.ipv4.conf.default.arp_announce

'设置为2表示节点在发送ARP应答时总是使用其主接口上的最具体的地址(即,优先级最高的源IP地址)

这同样对LVS DR模式很有用,确保Director节点在回应ARP请求时只使用VIP,而不是实际的物理接

口地址。'

调整完毕后开启web服务:systemctl start httpd

在站点目录下构建数据文件

(二)LVS集群服务器
1.下载服务

yum install keepalived.x86_64 -y && yum install ipvsadm.x86_64 -y

先启动ipvsadm服务

ipvsadm-save >/etc/sysconfig/ipvsadm #生成配置信息文件
systemctl start ipvsadm.service #启动服务

2.配置文件

在配置文件之前,最好先进行备份

cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak

删除60行以下的内容

配置全局设置


配置VRRP热备实例

vrrp_instance VI_1 {

'定义实例名称,默认即可,也可以自定义'

state MASTER

'设置为MASTER表示为主'

interface ens33

'指定心跳报文从ens33网卡发送'

virtual_router_id 51

'实例表示符,默认即可,BACKUP与其一致'

priority 100

'设置优先级,其值需要比BACKUP高'

advert_int 1

'每间隔一秒发送一次VRRP报文'

authentication {

auth_type PASS

auth_pass 123123

'定义密码认证方式,并设置密码,BACKUP需要与其一致'

}

virtual_ipaddress {

192.168.83.200

'设置集群VIP地址'

}

}

配置虚拟路由

css 复制代码
 virtual_server 192.168.83.200 80 {
  #定义对外提供服务的IP地址,提供服务为80端口,即http服务
     delay_loop 6
     #每6秒对后端服务器进行健康检查
      lb_algo rr 
     #设置调度算法为rr(轮询)
     lb_kind DR
     #负载均衡方式采用DR
     persistence_timeout 0
     #长连接时间为0秒,为体现操作真实性,真实环境建议调高,默认为50秒
    protocol TCP
    #虚拟服务器监听TCP协议的流量
    real_server 192.168.83.50 80 {
    #定义真实服务器,其IP地址为192.168.83.50,监听80端口
        weight 1
      #轮询权重为1
         TCP_CHECK {
        #使用TCP_CHECK模块进行真实服务器的健康状态检测
       connect_port 80
      #通过TCP协议连接到真实服务器的80端口以确认其是否可用
      connect_timeout 3
      #访问超时时间,超过3秒认为该服务器宕机
       nb_get_retry 3
      #重复访问3次
       delay_before_retry 3
       #每次访问间隔3秒
          }   
    }   
     real_server 192.168.83.60 80 {
        weight 1
            TCP_CHECK {
             connect_port 80
              connect_timeout 3
              nb_get_retry 3
             delay_before_retry 3
#原理同上
       }
      }
 }

配置完毕后启动服务:systemctl start keepalived.service

查看规则情况

另一台服务器与其基本一致

需要修改12,19,22行信息,其余配置与主服务一致

配置完毕后启动服务

ipvsadm-save >/etc/sysconfig/ipvsadm
systemctl start ipvsadm.service
systemctl start keepalived.service

使用客户端访问进行测试

五、keepalive管理

(一)主从更替

当MASTER关闭后,优先级最高BACKUP会立马变成MASTER继续工作

当主恢复后,立马会变为MASTER,即为抢占模式(默认)

可以通过添加nopreempt参数,设置为非抢占模式

在虚拟服务器段配置

也可以设置延迟抢占,同样在虚拟服务器段配置

(二)单播组播

在Keepalived中,VRRP实例通常通过组播方式来发送心跳和通告消息以实现高可用性和故障切换

组播地址范围为224.0.0.0-239.255.255.255

默认的组播地址为224.0.0.18。如果有多组keepalive服务器,所有的默认心跳线发送路径都为该地址,容易造成混乱,所以需要修改

通过添加vrrp_mcast_group4来指定特定的组播地址,或者改为单播

注意:如果指定组播地址,所有的服务器都要改

当前192.168.83.30为主。可以通过tcpdump抓包来进行查看

可以看到,MASTER发的VRRP包是发往指定的组播地址224.83.83.83

2.设置单播

'MASTER服务器'

unicast_src_ip 192.168.83.30

#该指令指定当前节点作为VRRP通告和心跳消息的发送源地址。

#这意味着所有从这个节点发出的VRRP报文都将使用 192.168.83.30 这个IP地址作为源地址

unicast_peer {

192.168.83.40

}

#这部分定义了单播对等体列表,即指定接收VRRP通告和心跳消息的目标地址。

#在这里,仅指定了一个对等体地址 192.168.83.40,表示此节点将直接向 192.168.83.40

#发送VRRP通信信息,而不是通过组播方式广播到整个网络。

'BACKUP服务器'

#同上

同样抓包查看验证一下

(三)日志功能

因为keepalive服务较为重要,其日志没有独立的文件存在,默认存放在**/var/log/messages**文件中

为便于分析,需要将它的日志位置,单独存放

在/etc/sysconfig/keepalived文件中第14行有一段信息为:KEEPALIVED_OPTIONS="-D"

这是一个环境变量或启动参数的设置,用于指定Keepalived服务在启动时使用的额外选项。

-D:表示Keepalived以守护进程(daemon)模式运行。这意味着Keepalived会在后台运行,并且 脱离终端控制台

添加-S选项设置日志

-S :代表设置syslog日志设备,它通常与一个数字参数(0-7)结合使用,用于指定syslog记录的 日志设施级别

修改日志管理配置文件/etc/rsyslog.conf

修改完毕后重启日志管理服务与keepalive服务

相关推荐
hope_wisdom1 分钟前
C++网络编程之SSL/TLS加密通信
网络·c++·ssl·tls·加密通信
hgdlip14 分钟前
家里电脑ip地址怎么设置?详细指导
网络·tcp/ip·智能路由器·家里电脑
安步当歌1 小时前
【WebRTC】视频发送链路中类的简单分析(下)
网络·音视频·webrtc·视频编解码·video-codec
米饭是菜qy2 小时前
TCP 三次握手意义及为什么是三次握手
服务器·网络·tcp/ip
yaoxin5211232 小时前
第十九章 TCP 客户端 服务器通信 - 数据包模式
服务器·网络·tcp/ip
鹿鸣天涯3 小时前
‌华为交换机在Spine-Leaf架构中的使用场景
运维·服务器·网络
星海幻影3 小时前
网络基础-超文本协议与内外网划分(超长版)
服务器·网络·安全
WeeJot嵌入式3 小时前
网络百问百答(一)
网络
湖南罗泽南3 小时前
p2p网络介绍
网络·网络协议·p2p
IPdodo全球网络4 小时前
解析“ChatGPT网络错误”:从网络专线到IP地址的根源与解决方案
网络·tcp/ip·chatgpt