LVS+Keepalived高可用群集

发布于:2025-06-20 ⋅ 阅读:(18) ⋅ 点赞:(0)

一、Keepalived 双机热备基础知识

Keepalived 起初是专门针对 LVS 设计的一款强大的辅助工具,主要用来提供故障切换(Failover)和健康检查(Health Checking)功能 —— 判断 LVS 负载调度器、节点服务器的可用性,当 master 主机出现故障及时切换到 backup 节点保证业务正常,当 master 故障主机恢复后将其重新加入群集并且业务重新切换回 master 节点。

二、使用 Keepalived 实现双机热备

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

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

资源列表
操作系统 配置 IP 服务
OpenEuler24 2C4G 192.168.10.101 Keepalived/ipvsadm
OpenEuler24 2C4G 192.168.10.102 Keepalived/ipvsadm
OpenEuler24 2C4G 192.168.10.103 httpd
OpenEuler24 2C4G 192.168.10.104 httpd
OpenEuler24 2C4G 192.168.10.105 nfs-utils/rpcbind

1、基础配置

关闭各节点防火墙及内核保护

systemctl stop firewalld
setenforce 0

2、安装服务

101与102节点:

3、配置调度器

101:

! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_01
   vrrp_skip_check_adv_addr
   
   关闭严格模式
   #vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

# 定义 VRRP 实例,用于实现虚拟路由冗余(主备切换)
vrrp_instance VI_1 {
    # 实例状态,MASTER 表示主设备,BACKUP 为备设备,主备通过优先级选举
    state MASTER
    # 绑定的物理网卡(根据实际环境调整,如 ens33 等),用于发送 VRRP 报文
    interface ens160
    # 虚拟路由标识,同一 VRRP 组要一致,区分不同组
    virtual_router_id 51
    # 优先级,数值越大优先级越高,主设备优先级应高于备设备
    priority 100
    # VRRP 通告间隔(秒),主备间定时发送心跳,确认状态
    advert_int 1
    # 认证配置,保证 VRRP 报文安全,避免非法设备干扰
    authentication {
        # 认证类型,PASS 为简单密码认证(也可用 AH 等更安全方式)
        auth_type PASS
        # 认证密码,主备需一致
        auth_pass 1111
    }
    # 虚拟 IP(VIP),对外提供服务的统一 IP,主备切换时自动漂移
    virtual_ipaddress {
        192.168.10.200
    }
}

# 定义 LVS 虚拟服务,VIP + 端口 ,这里是 192.168.10.200:80 的 HTTP 服务
virtual_server 192.168.10.200 80 {
    # 健康检查间隔(秒),定期检查真实服务器状态
    delay_loop 6
    # 负载均衡算法,wrr(加权轮询),按权重分配请求
    lb_algo wrr
    # LVS 工作模式,DR(直接路由),集群内通过 MAC 地址转发,效率高
    lb_kind DR
    # 会话保持时间(秒),注释后不启用,启用时相同客户端请求会固定到同一服务器
    #persistence_timeout 50
    # 协议类型,TCP(对应 HTTP 等基于 TCP 的应用)
    protocol TCP

    # 定义真实服务器(RS),192.168.10.103:80 ,承载实际业务
    real_server 192.168.10.103 80 {
        # 服务器权重,数值越大,被分配的请求越多
        weight 2
        # TCP 健康检查配置,探测服务器 80 端口是否存活
        TCP_CHECK {
            # 检查的目标端口(与服务端口一致)
            connect_port 80
            # 连接超时时间(秒),超时则认为服务器异常
            connect_timeout 3
            # 重试次数,失败后重试几次才标记为down
            retry 3
            # 重试前延迟时间(秒),避免频繁重试干扰
            delay_before_retry 3
        }
    }

    # 另一台真实服务器(RS),192.168.10.104:80 
    real_server 192.168.10.104 80 {
        # 权重 1,相比 10.103 会分配更少请求
        weight 1
        # 同样的 TCP 健康检查逻辑
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
}

启动服务:

systemctl start keepalived

查看VIP:

102:

! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_02
   vrrp_skip_check_adv_addr
   
   关闭严格模式
   #vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

# 定义 VRRP 实例,用于实现虚拟路由冗余(主备切换)
vrrp_instance VI_1 {
    # 实例状态,MASTER 表示主设备,BACKUP 为备设备,主备通过优先级选举
    state BACKUP
    # 绑定的物理网卡(根据实际环境调整,如 ens33 等),用于发送 VRRP 报文
    interface ens160
    # 虚拟路由标识,同一 VRRP 组要一致,区分不同组
    virtual_router_id 51
    # 优先级,数值越大优先级越高,主设备优先级应高于备设备
    priority 90
    # VRRP 通告间隔(秒),主备间定时发送心跳,确认状态
    advert_int 1
    # 认证配置,保证 VRRP 报文安全,避免非法设备干扰
    authentication {
        # 认证类型,PASS 为简单密码认证(也可用 AH 等更安全方式)
        auth_type PASS
        # 认证密码,主备需一致
        auth_pass 1111
    }
    # 虚拟 IP(VIP),对外提供服务的统一 IP,主备切换时自动漂移
    virtual_ipaddress {
        192.168.10.200
    }
}

# 定义 LVS 虚拟服务,VIP + 端口 ,这里是 192.168.10.200:80 的 HTTP 服务
virtual_server 192.168.10.200 80 {
    # 健康检查间隔(秒),定期检查真实服务器状态
    delay_loop 6
    # 负载均衡算法,wrr(加权轮询),按权重分配请求
    lb_algo wrr
    # LVS 工作模式,DR(直接路由),集群内通过 MAC 地址转发,效率高
    lb_kind DR
    # 会话保持时间(秒),注释后不启用,启用时相同客户端请求会固定到同一服务器
    #persistence_timeout 50
    # 协议类型,TCP(对应 HTTP 等基于 TCP 的应用)
    protocol TCP

    # 定义真实服务器(RS),192.168.10.103:80 ,承载实际业务
    real_server 192.168.10.103 80 {
        # 服务器权重,数值越大,被分配的请求越多
        weight 1
        # TCP 健康检查配置,探测服务器 80 端口是否存活
        TCP_CHECK {
            # 检查的目标端口(与服务端口一致)
            connect_port 80
            # 连接超时时间(秒),超时则认为服务器异常
            connect_timeout 3
            # 重试次数,失败后重试几次才标记为down
            retry 3
            # 重试前延迟时间(秒),避免频繁重试干扰
            delay_before_retry 3
        }
    }

    # 另一台真实服务器(RS),192.168.10.104:80 
    real_server 192.168.10.104 80 {
        # 权重 1,相比 10.103 会分配更少请求
        weight 1
        # 同样的 TCP 健康检查逻辑
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
}

 查看VIP:

4、配置后端服务

安装服务:

dnf -y install httpd

systemctl start httpd

编写网页:

echo "192.168.10.103web">/var/www/html/index.html

echo "192.168.10.104web">/var/www/html/index.html

配置LVS(DR)VIP:

ip addr add 192.168.10.200/32 dev lo label lo:0

配置内核文件:

vim /etc/sysctl.conf

##添加内容##
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

客户端访问:

5、高可用测试

关闭一个LVS测试:

关闭master主机101后,VIP漂移到102主机

访问不受影响

关闭一个后端服务:

访问测试时,只能访问103主机

查看策略:

自动剔除一个后端服务

重启后端服务并查看策略:

访问测试:


网站公告

今日签到

点亮在社区的每一天
去签到