LVS+Keepalived高可用群集

一、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、基础配置

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

bash 复制代码
systemctl stop firewalld
setenforce 0

2、安装服务

101与102节点:

3、配置调度器

101:

bash 复制代码
! 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
        }
    }
}

启动服务:

bash 复制代码
systemctl start keepalived

查看VIP:

102:

bash 复制代码
! 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、配置后端服务

安装服务:

bash 复制代码
dnf -y install httpd

systemctl start httpd

编写网页:

bash 复制代码
echo "192.168.10.103web">/var/www/html/index.html

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

配置LVS(DR)VIP:

bash 复制代码
ip addr add 192.168.10.200/32 dev lo label lo:0

配置内核文件:

bash 复制代码
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主机

查看策略:

自动剔除一个后端服务

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

访问测试:

相关推荐
嵌入式郑工几秒前
RV1126平台(Buildroot Linux)+ SunplusIT SPCA2688 USB摄像头 RTSP推流全流程复盘与问题解决记录
网络
abc237358176317 分钟前
静态路由综合实验
网络
三体世界1 小时前
TCP传输控制层协议深入理解
linux·服务器·开发语言·网络·c++·网络协议·tcp/ip
泷羽Sec-静安1 小时前
OSCP官方靶场-Solstice WP
服务器·网络·数据库
华不完2 小时前
下一代防火墙混合模式部署
运维·服务器·网络
longze_72 小时前
frp内网穿透下创建FTP(解决FTP“服务器回应不可路由的地址。使用服务器地址替代”错误)
运维·服务器·网络
cui_win3 小时前
【网络】Linux 内核优化实战 - net.ipv4.tcp_keepalive_time
linux·网络·tcp/ip
令狐掌门3 小时前
tcp长连接与短连接
网络·网络协议·tcp/ip
zhysunny4 小时前
WebSocket实战:实现实时聊天应用 - 双向通信技术详解
网络·websocket·网络协议
hhh123987_4 小时前
以太网基础⑤UDP 协议原理与 FPGA 实现
网络·网络协议·udp