LVS+Keepalived高可用群集

目录

[一:Keepalived 双机热备基础知识提取](#一:Keepalived 双机热备基础知识提取)

1:Keepalived概述

[2:Keepalived 的安装与服务控制](#2:Keepalived 的安装与服务控制)

(1)安装Keepalived

[(2)控制Keepalived 服务](#(2)控制Keepalived 服务)

[3:使用 Keepalived 实现双机热备](#3:使用 Keepalived 实现双机热备)

(1)主服务器的配置

(2)备用服务器配置

(3)测试双机热备功能

[二:使用 Keepalived 实现双机热备](#二:使用 Keepalived 实现双机热备)

1:基础环境配置

2:配置主调度器

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

[(2)Web 服务器池配置](#(2)Web 服务器池配置)

[(3)重新启动 Keepalived 服务](#(3)重新启动 Keepalived 服务)

3:配置从调度器

4:配置Web节点服务器

[5:测试 LVS+Keepalived 高可用群集](#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地址 服务
OpenEuler24 2C4G 192.168.10.101 Keepalived + Nginx
OpenEuler24 2C4G 192.168.10.102 Keepalived + Nginx

2:Keepalived 的安装与服务控制

(1)安装Keepalived

  • 系统环境:OpenEuler24

  • 安装方式 :使用 dnfyum 安装

  • 核心软件包

    • 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 1000
    link/ether 00:0c:29:93:80:fb brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.101/24 brd 172.16.16.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet 192.168.10.100/32 scope global ens33  # Keepalived自动设置的VIP地址
       valid_lft forever preferred_lft forever
    inet6 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    # 虚拟路由ID
    advert_int 1           # 心跳间隔(秒)
    authentication {       # 认证配置
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {    # 漂移VIP
        192.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 1000
    link/ether 00:0c:29:dl:f0:b5 brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.102/24 brd 172.16.16.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 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 服务
OpenEuler24 2C4G 1b01 192.168.10.101 Keepalived/ipvsadm
OpenEuler24 2C4G 1b01 192.168.10.102 Keepalived/ipvsadm
OpenEuler24 2C4G web01 192.168.10.103 Nginx
OpenEuler24 2C4G web02 192.168.10.104 Nginx
OpenEuler24 2C4G nfs-server 192.168.10.105 nfs-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 ens33
    virtual_router_id 1
    priority 100    //主调度器的优先级
    advert_int 1
    authentication {    //主、从热备认证信息
    auth_type PASS
    auth_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 一个为 BACKUP
    interface ens33    # 当前 IP 对应的网络接口,通过 ifconfig 查询
    virtual_router_id 62    # 虚拟路由 ID(0-255),在一个 VRRP 实例中主
    服务器 ID 必须一样
    priority 100    # 优先级值设定:MASTER 要比 BACKUP 的值大
    advert_int 1    # 通告时间间隔:单位秒,主备要一致
    authentication {
    auth_type PASS
    auth_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 TCP
    real_server 192.168.10.103 80 {
    weight 1
    TCP_CHECK {
    connect_timeout 10
    retry 3    # 旧版本为 nb_get_retry
    delay_before_retry 3    # 重试间隔 3 秒
    connect_port 80
    }
}

real_server 192.168.10.104 80 {
    weight 1
    TCP_CHECK {
    connect_timeout 10
    retry 3
    delay_before_retry 3
    connect_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" in
    start)
    # 设置 ARP 参数
    echo "1" > /proc/sys/net/jpv4/conf/all/arp_ignore
    echo "2" > /proc/sys/net/jpv4/conf/all/arp_announce
    echo "1" > /proc/sys/net/jpv4/conf/default/arp_ignore
    echo "2" > /proc/sys/net/jpv4/conf/default/arp_announce
    echo "1" > /proc/sys/net/jpv4/conf/lo/arp_ignore
    echo "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.local
    echo "ip route add local ${vip}/32 dev lo" | sudo tee -a /etc/rc.local
    sudo 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 高可用负载均衡群集的健壮性。

相关推荐
夏沫mds26 分钟前
Hyperledger Fabric食品溯源
运维·vue.js·go·vue·区块链·gin·fabric
却道天凉_好个秋32 分钟前
WebRTC(六):ICE协议
服务器·网络·webrtc
半桔1 小时前
【Linux手册】进程的状态:从创建到消亡的“生命百态”
linux·运维·服务器·汇编·深度学习·面试
小艺E2 小时前
裸金属服务器深度评测:云计算时代的性能与安全担当
服务器·安全·云计算
小阳人2 小时前
rockylinuxapache和Linux服务配置
linux·运维·服务器
嗷嗷哦润橘_3 小时前
如何用一台服务器用dify私有部署通用的大模型应用?
运维·服务器·人工智能·python·深度学习·计算机视觉
字节高级特工3 小时前
每日一篇博客:理解Linux动静态库
linux·运维·服务器·c语言·c++·windows·ubuntu
ldj20203 小时前
云计算-专有网络VPC
运维·服务器
学习编程的gas3 小时前
Linux软件管理包-yum和基础开发工具-vim
linux·运维·服务器
随心............4 小时前
linux虚拟机yum命令报错解决方案
linux·运维·服务器