欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > LVS+Keepalived高可用群集

LVS+Keepalived高可用群集

2025/6/24 2:49:23 来源:https://blog.csdn.net/2501_91351480/article/details/148743019  浏览:    关键词:LVS+Keepalived高可用群集

目录

一:Keepalived 双机热备基础知识提取

1:Keepalived概述

2:Keepalived 的安装与服务控制

(1)安装Keepalived

(2)控制Keepalived 服务

3:使用 Keepalived 实现双机热备

(1)主服务器的配置

(2)备用服务器配置

(3)测试双机热备功能

二:使用 Keepalived 实现双机热备

1:基础环境配置

2:配置主调度器

(1)全局配置、热备配置

(2)Web 服务器池配置

(3)重新启动 Keepalived 服务

3:配置从调度器

4:配置Web节点服务器

5:测试 LVS+Keepalived 高可用群集


一:Keepalived 双机热备基础知识提取

1:Keepalived概述

  • 最初是LVS的辅助工具,提供故障切换(Failover)和健康检查(Health Checking)功能

  • 能判断LVS负载调度器和节点服务器的可用性

  • 实现master主机故障时切换到backup节点,恢复后切回master

安装与使用

  • 官方网站:Keepalived for Linux

  • 可通过YUM方式安装

  • 也可作为非LVS环境的热备软件使用

热备方式

采用VRRP(虚拟路由冗余协议)实现多机热备

VRRP特点:

  • 多台路由器组成热备组

  • 共用虚拟IP(VIP)对外服务

  • 同一时刻只有一台主路由器工作

  • 主路由器失效时,其他路由器按优先级接替VIP

VIP特点:

  • 可在热备组内路由器间转移

  • 称为"漂移IP地址"

  • 由Keepalived自动管理,无需手动配置虚接口

操作系统配置IP地址服务
OpenEuler242C4G192.168.10.101Keepalived + Nginx
OpenEuler242C4G192.168.10.102Keepalived + Nginx

2:Keepalived 的安装与服务控制

(1)安装Keepalived

  • 系统环境:OpenEuler24

  • 安装方式:使用 dnf 或 yum 安装

  • 核心软件包

    • keepalived.x86_64(版本 2.2.8-1.oe2403sp1)

    • 可选依赖:ipvsadm(LVS 群集管理工具)、nginx(示例服务)

安装命令

yum install -y keepalived ipvsadm nginx

(2)控制Keepalived 服务

DNF 安装 keepalived 后,执行以下命令将 keepalived 服务设置为开机启动。

systemctl enable keepalived

输出提示:创建符号链接至 /usr/lib/systemd/system/keepalived.service

3:使用 Keepalived 实现双机热备

    基于 VRRP 的热备方式,Keepalived 可以用作服务器的故障切换,每个热备组可以有 多台服务器--当然,最常用的就是双机热备了。在这种双机热备方案中,故障切换主要针对虚拟IP地址的漂移来实现,因此能够适用于各种应用服务器(不管是 web、FTP、Mail,还是 SSH、DNS……)。

(1)主服务器的配置

    Keepalived 服务的配置目录位于/etc/keepalived/。其中keepalived.conf 是主配置文件。另外包括一个子目录 samples/,提供了许多配置样例作为参考。

    在 Keepalived 的配置文件中,使用“global defs {…}”区段指定全局参数,使用“vrrp_instance 实例名称 {…}”区段指定 VRRP 热备参数,注释文字以“!”符号开头。

[root@localhost ~]# systemctl stop firewalld   // 关闭防火墙
[root@localhost ~]# setenforce 0              // 关闭SELinux
[root@localhost ~]# cd /etc/keepalived/       // 进入配置目录
[root@localhost keepalived]# cp keepalived.conf.sample keepalived.conf  // 复制配置文件模板
[root@localhost keepalived]# vi keepalived.conf  // 编辑配置文件
global_defs {router_id HA_TEST_R1    // 本路由器(服务器)的名称
}vrrp_instance VI_1 {        // 定义VRRP热备实例state MASTER            // 热备状态,MASTER表示主服务器interface ens33         // 承载VIP地址的物理接口virtual_router_id 1     // 虚拟路由器的ID号,每个热备组需保持一致priority 100            // 优先级,数值越大优先级越高advert_int 1            // 通告间隔秒数(心跳频率)authentication {        // 认证信息,每个热备组保持一致auth_type PASS      // 认证类型auth_pass 123456    // 密码字串}virtual_ipaddress {     // 指定漂移地址(VIP),可以有多个192.168.10.100}
}

    确认上述配置无误,然后启动Keepalived 服务。实际状态为 MASTER 的主服务器将为 ens33 接口自动添加 VIP 地址,通过 ip 命令可以査看。注意:ifconfig 命令看不到。

[root@localhost keepalived]# systemctl start keepalived
[root@localhost keepalived]# ip addr show dev ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000link/ether 00:0c:29:93:80:fb brd ff:ff:ff:ff:ff:ffinet 192.168.10.101/24 brd 172.16.16.255 scope global ens33valid_lft forever preferred_lft foreverinet 192.168.10.100/32 scope global ens33  # Keepalived自动设置的VIP地址valid_lft forever preferred_lft foreverinet6 fe80::56be:f27:2b9b:823e/64 scope link valid_lft forever preferred_lft forever

(2)备用服务器配置

    在同一个 Keepalived 热备组内,所有服务器的 Keepalived 配置文件基本相同,包括虚拟路由器的 ID 号、认证信息、漂移地址、心跳频率等。不同之处主要在于路由器名称、热备状态、优先级。

配置项说明
路由器名称(router_id)建议为每个参与热备的服务器指定不同的名称。
热备状态(state)至少应有一台主服务器,将状态设为 MASTER;可以有多台备用的服务器,将状态设为 BACKUP。
优先级(priority)数值越大则取得 VIP 控制权的优先级越高。主服务器的优先级应为最高;备用服务器优先级依次递减,且避免相同以避免冲突。

    配置备用服务器(可以有多台)时,可以参考主服务器的keepalived.conf配置文件内容,只需修改路由器名称、热备状态、优先级。

[root@localhost ~]# systemctl stop firewalld  # 关闭防火墙
[root@localhost ~]# setenforce 0            # 关闭SELinux
[root@localhost ~]# cd /etc/keepalived/     # 进入配置目录
[root@localhost keepalived]# cp keepalived.conf.sample keepalived.conf  # 复制配置模板
[root@localhost keepalived]# vi keepalived.conf  # 编辑配置文件
global_defs {router_id HA_TEST_R2    # 本服务器唯一标识(备用节点)
}vrrp_instance VI_1 {state BACKUP           # 热备状态:BACKUP(备用)priority 99            # 优先级(需低于主服务器的100)# 以下参数必须与主服务器保持一致:interface ens33        # 网卡名称virtual_router_id 1    # 虚拟路由IDadvert_int 1           # 心跳间隔(秒)authentication {       # 认证配置auth_type PASSauth_pass 123456}virtual_ipaddress {    # 漂移VIP192.168.10.100}
}

    确认配置无误,一样需要启动 Keepalived 服务。此时主服务器仍然在线,VIP 地址实际上仍然由主服务器控制,其他服务器处于备用状态。因此,在备用服务器中将不会为 ens33 接口添加 VIP 地址。

[root@localhost keepalived]# systemctl start keepalived  # 启动keepalived服务
[root@localhost keepalived]# ip addr show dev ens33     # 查看ens33网卡信息
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000link/ether 00:0c:29:dl:f0:b5 brd ff:ff:ff:ff:ff:ffinet 192.168.10.102/24 brd 172.16.16.255 scope global ens33valid_lft forever preferred_lft foreverinet6 fe80::lf08:ab66:736f:72eb/64 scope link valid_lft forever preferred_lft forever

(3)测试双机热备功能

    Keepalived 的日志消息保存在/var/log/messages 文件中,在测试主、备故障自动切换功能时,可以跟踪此日志文件来观察热备状态的变化。以针对连通性和Web 服务的测试为例,主要操作如下。

连通性测试

    在客户机中执行“ping -t 192.168.10.100”命令,能够正常、持续 ping 通,根据以下操作继续观察测试结果。

  • 停止启用主服务器的 Keepalived 服务,发现 ping 测试只中断了 1 或 2个包即恢复正常,说明已有其他服务器接替 VIP 地址,并及时响应客户机请求。
  • 重新启用主服务器的 Keepalived 服务,发现 ping 测试再次中断 1 或 2 个包即恢复正常,说明主服务器已恢复正常,并夺回 VIP 地址的控制权。

Web 访问测试

在 keepalived 运行的主机上启动 nginx 服务并写入不通的测试页面内容

# Keepalived01 节点配置
[root@localhost ~]# systemctl start nginx                  # 启动nginx服务
[root@localhost ~]# echo "web01" > /usr/share/nginx/html/index.html  # 设置节点标识# Keepalived02 节点配置  
[root@localhost ~]# systemctl start nginx                  # 启动nginx服务
[root@localhost ~]# echo "web02" > /usr/share/nginx/html/index.html  # 设置节点标识

在客户机中访问 http://192.168.10.100/,将看到由主服务器 192.168.10.101 提供的网页文档。

  • 停止启用主服务器的 Keepalived 服务,再次访问上述 Web 服务,将看到由备用服务器 192.168.10.102 提供的网页文档,说明 VIP 地址已切换至备用服务器。
  • 重新启用主服务器的 Keepalived 服务,再次访问上述 Web 服务,将看到重新由主服务器 192.168.10.101 提供的网页文档,说明主服务器已重新夺取 VIP 地址。

查看日志记录

    在执行主、备服务器故障切换的过程中,分别观察各自的/var/log/messages 日志文件,可以看到 MASTER、SLAVE 状态的迁移记录。

  • 主服务器中,Keepalived 服务状态先变为“stop”,移除 VIP 地址,恢复后重新变为 MASTER。
[root@localhost ~]# less /var/log/messages
...
Sep 11 13:32:24 localhost Keepalived[18259]: Stopping Keepalived v1.2.13 (11/05,2016)
Sep 11 13:32:24 localhost systemd: Stopping LVS and VRRP High Availability Monitor...
Sep 11 13:32:24 localhost Keepalived_vrrp[18261]: VRRP_Instance(VI_1) sending 0 priority
Sep 11 13:32:24 localhost Keepalived_vrrp[18261]: VRRP_Instance(VI_1) removing protocol VIPs.
...
Sep 11 13:36:42 localhost Keepalived_vrrp[18280]: VRRP_Instance(VI_1) Transition to MASTER STATE
Sep 11 13:36:42 localhost Keepalived_vrrp[18280]: VRRP_Instance(VI_1) Received lower prio advert, forcing new election
Sep 11 13:36:43 localhost Keepalived_vrrp[18280]: VRRP_Instance(VI_1) Entering MASTER STATE
Sep 11 13:36:43 localhost Keepalived_vrrp[18280]: VRRP_Instance(VI_1) setting protocol VIPs.
  • 备用服务器中,状态先切换为 MASTER,待主服务器恢复后再交回控制权。
[root@localhost ~]# less /var/log/messages
...
Sep 11 13:12:43 localhost Keepalived_vrrp[25338]: VRRP_Instance(VI_1) Transition to MASTER STATE
Sep 11 13:12:44 localhost Keepalived_vrrp[25338]: VRRP_Instance(VI_1) Entering MASTER STATE
Sep 11 13:12:44 localhost Keepalived_vrrp[25338]: VRRP_Instance(VI_1) setting protocol VIPs.
...
Sep 11 13:14:23 localhost Keepalived_vrrp[25338]: VRRP_Instance(VI_1) Received higher prio advert
Sep 11 13:14:23 localhost Keepalived_vrrp[25338]: VRRP_Instance(VI_1) Entering BACKUP STATE
Sep 11 13:14:23 localhost Keepalived_vrrp[25338]: VRRP_Instance(VI_1) removing protocol VIPs.

    通过上述测试过程,可以发现双机热备已经正常。客户机只要通过VIP地址就可以访问服务器所提供的 Web 等应用。其中,任何一台服务器失效,另一台服务器将会立即接替服务,从而实现高可用性。实际应用时,注意主、备服务器所提供的 Web 服务内容要保持一致。

二:使用 Keepalived 实现双机热备

    Keepalived 的设计目标是构建高可用的 LVS 负载均衡群集,可以调用ipvsadm 工具来创建虚拟服务器、管理服务器池,而不仅仅用作双机热备。使用Keepalived 构建 LVS 群集更加简便易用,主要优势体现在:对 LVS 负载调度器实现热备切换,提高可用性;对服务器池中的节点进行健康检查,自动移除失效节点,恢复后再重新加入。

    在基于 LVS+Keepalived 实现的 LVS 群集结构中,至少包括两台热备的负载调度器,三台以上的节点服务器。本节将以 DR 模式的 LVS 群集为基础,增加一台从负载调度器,使用Keepalived 来实现主、从调度器的热备,从而构建兼有负载均衡、高可用两种能力的 LVS 网站群集平台。

    使用 Keepalived 构建 LVS 群集时,也需要用到 ipvsadm 管理工具。但大部分工作会由Keepalived 自动完成,不需要手动执行 ipvsadm(除了查看和监控群集以外)。下面主要讲解Keepalived 的服务器池设置,关于 NFS 共享服务的配置、Keepalived 的热备配置等在此不再详细阐述。

操作系统配置主机名IP服务
OpenEuler242C4G1b01192.168.10.101Keepalived/ipvsadm
OpenEuler242C4G1b01192.168.10.102Keepalived/ipvsadm
OpenEuler242C4Gweb01192.168.10.103Nginx
OpenEuler242C4Gweb02192.168.10.104Nginx
OpenEuler242C4Gnfs-server192.168.10.105nfs-utils/rpcbind

1:基础环境配置

# 防火墙配置
systemctl stop firewalld
systemctl disable firewalld# SELinux配置
setenforce 0
sed -i "/SELINUX=.*/SELINUX=disabled/g" /etc/selinux/config# 主机名设置
hostnamectl set-hostname 1b01
hostnamectl set-hostname 1b02
hostnamectl set-hostname web01
hostnamectl set-hostname web02

安装 Keepalived 以及 ipvsadm

Keepalived 环境操作

# 加载ip_vs模块
modprobe ip_vs# 查看ip_vs版本信息
cat /proc/net/ip_vs# 安装服务并备份配置
yum install ipvsadm keepalived -y
cp /etc/keepalived/keepalived.conf{,.bak}

2:配置主调度器

(1)全局配置、热备配置

首先为主、从调度器实现热备功能,漂移地址使用LVS 群集的 VIP 地址。

[root@localhost ~]# vi /etc/keepalived/keepalived.conf
global_defs {router_id LVS_HA_R1    //主调度器的名称
}vrrp_instance VI_1 {state MASTER    //主调度器的热备状态interface ens33virtual_router_id 1priority 100    //主调度器的优先级advert_int 1authentication {    //主、从热备认证信息auth_type PASSauth_pass 123456
}
virtual_ipaddress {    //指定群集 VIP 地址
192.168.10.100
}

(2)Web 服务器池配置

    在 Keepalieved 的热备配置基础上添加“virtual server VIp 端口...}”区段来 配置虚拟服务器,主要包括对负载调度算法、群集工作模式、健康检查间隔、真实服务器地址等参数的设置。

[root@localhost ~]# vi /etc/keepalived/keepalived.conf
virtual_server 192.168.10.100 80 {    #虚拟服务器地址(VIP)、端口delay_loop 15    #健康检查的间隔时间(秒)lb_algo rr    #轮询(rr)调度算法lb_kind DR    #直接路由(DR)群集工作模式! persistence 60    #连接保持时间(秒),若启用请去掉!号protocol TCP    #应用服务采用的是 TCP 协议real_server 192.168.10.103 80 {    #第一个 Web 节点的地址、端口weight 1    #节点的权重TCP_CHECK {    #健康检查方式connect_port 80    #检查的目标端口connect_timeout 3    #连接超时(秒)nb_get_retry 3    #重试次数delay_before_retry 4    #重试间隔(秒)}}real_server 192.168.10.104 80 {    #第二个 Web 节点的地址、端口...    #省略部分信息}
}

    完整配置如下(该配置文件为 1b01 节点的配置,可复制到 1b02 节点但需要修改state 以及 priority,router id 建议为每个机器配置不同的名称cat /etc/keepalived/keepalived.conf)

! Configuration File for keepalived
global_defs {router_id LVS_DEVEL
}vrrp_instance VI_1 {state MASTER    # 两个 DS,一个为 MASTER 一个为 BACKUPinterface ens33    # 当前 IP 对应的网络接口,通过 ifconfig 查询virtual_router_id 62    # 虚拟路由 ID(0-255),在一个 VRRP 实例中主服务器 ID 必须一样priority 100    # 优先级值设定:MASTER 要比 BACKUP 的值大advert_int 1    # 通告时间间隔:单位秒,主备要一致authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.10.100    # VIP,可配置多个}
}# web 配置
virtual_server 192.168.10.100 80 {delay_loop 3    # 设置健康状态检查时间lb_algo rr    # 调度算法,这里用了 rr 轮询算法lb_kind DR    # 这里测试用了 Direct Route 模式persistence_timeout 50    # 持久连接超时时间,注意添加此项配置客户端连续请求时,请求到同一节点protocol TCPreal_server 192.168.10.103 80 {weight 1TCP_CHECK {connect_timeout 10retry 3    # 旧版本为 nb_get_retrydelay_before_retry 3    # 重试间隔 3 秒connect_port 80}
}real_server 192.168.10.104 80 {weight 1TCP_CHECK {connect_timeout 10retry 3delay_before_retry 3connect_port 80}
}

(3)重新启动 Keepalived 服务

重新启动 Keepalived 服务的命令如下:

[root@localhost ~]# systemctl restart keepalived

3:配置从调度器

    从调度器的配置与主调度器基本相同,也包括全局配置、热备配置、服务器池配置,只需要调整 router id、state、priority 参数即可,其余内容完全相同。配置完成以后重启 Keepalived 服务。

[root@localhost ~]# vi /etc/keepalived/keepalived.conf
global_defs {
router_id LVS_HA_R2
//从调度器的名称
}
vrrp_instance VI_1 {
state BACKUP    //从调度器的热备状态
priority 90    //从调度器的优先级
......//省略部分信息
}
virtual_server 192.168.10.100 80 {
......//省略部分信息
}
[root@localhost ~]# systemctl restart keepalived

4:配置Web节点服务器

    根据所选择的群集工作模式不同(DR或NAT),节点服务器的配置也有些差异。以 DR 模式为例,除了需要调整/proc 系统的 ARP 响应参数以外,还需要为虚拟接口 10∶0 配置 VIP 地址,并添加一条到 VIP 的本地路由。

DR 模式需要节点服务器也配置 vip

#!/bin/bash
# 修改为自己的 VIP
vip='192.168.207.200'
case "$1" instart)# 设置 ARP 参数echo "1" > /proc/sys/net/jpv4/conf/all/arp_ignoreecho "2" > /proc/sys/net/jpv4/conf/all/arp_announceecho "1" > /proc/sys/net/jpv4/conf/default/arp_ignoreecho "2" > /proc/sys/net/jpv4/conf/default/arp_announceecho "1" > /proc/sys/net/jpv4/conf/lo/arp_ignoreecho "2" > /proc/sys/net/jpv4/conf/lo/arp_announce# 临时添加 VIP(重启失效)
sudo ip addr add ${vip}/32 dev lo label lo:0
# 临时添加路由(重启失效)
sudo ip route add local ${vip}/32 dev lo# 永久生效(通过 rc.local 或 NetworkManager 脚本)
echo "ip addr add ${vip}/32 dev lo label lo:0" | sudo tee -a /etc/rc.localecho "ip route add local ${vip}/32 dev lo" | sudo tee -a /etc/rc.localsudo chmod +x /etc/rc.local;;
stop)# 恢复 ARP 参数
echo "0" > /proc/sys/net/jpv4/conf/all/arp_ignore
echo "0" > /proc/sys/net/jpv4/conf/all/arp_announce
echo "0" > /proc/sys/net/jpv4/conf/default/arp_ignore
echo "0" > /proc/sys/net/jpv4/conf/default/arp_announce
echo "0" > /proc/sys/net/jpv4/conf/lo/arp_ignore
echo "0" > /proc/sys/net/jpv4/conf/lo/arp_announce# 移除临时添加的 VIP
sudo ip addr del ${vip}/32 dev lo label lo:0
# 移除临时添加的路由
sudo ip route del local ${vip}/32 dev lo# 从 rc.local 中移除永久设置
sudo sed -i "/ip addr add ${vip}/32 dev lo label lo:0/d"/etc/rc.local
sudo sed -i "/ip route add local ${vip}/32 dev lo/d"/etc/rc.local
;;*
*echo "Usage: $0 {start|stop}"
exit 1
esac
exit 0

5:测试 LVS+Keepalived 高可用群集

    在客户机的浏览器中,能够通过LVS+Keepalived群集的 VIP 地址(192.168.10.100)正 常访问 Web 页面内容。当主、从调度器任何一个失效时,Web 站点仍然可以访问(可能需要 刷新或者重新打开浏览器);只要服务器池有两台及以上的真实服务器可用,就可以实现访问量的负载均衡。通过主、从调度器的/var/log/messages 日志文件,可以跟踪故障切换过程;若要查看负载分配情况,可以执行“ipvsadm -ln”“ipvsadm -lnc”等操作命令。最终可以验证 LVS+Keepalived 高可用负载均衡群集的健壮性。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词