云计算百科
云计算领域专业知识百科平台

Day 7 - 高可用与负载均衡(上)

目录

  • 前言
  • 一、LVS负载均衡
  • 二、LVS-NAT 模式搭建
  • 三、keepalived高可用
  • 四、7层负载均衡
  • 总结

前言

在当今高并发的互联网服务架构中,单台服务器往往难以承受巨大的访问压力,且存在单点故障的风险。负载均衡技术应运而生,它通过将网络请求分发到多台后端服务器,不仅提升了系统的整体处理能力,也增强了服务的可用性和可靠性。

Linux Virtual Server (LVS) 作为一款成熟、高性能的四层(传输层)负载均衡解决方案,凭借其接近线性的扩展能力和极低的资源开销,在大型网站和关键业务系统中得到了广泛应用。它工作在 Linux 内核空间,通过 IPVS (IP Virtual Server) 模块实现,支持 NAT、DR、TUN 等多种工作模式,能够满足不同网络环境下的部署需求。

然而,仅靠 LVS 实现负载均衡还不够。在实际生产环境中,我们还需要考虑调度器自身的高可用性,避免其成为新的单点故障。Keepalived 正是解决这一问题的利器,它基于 VRRP 协议,可以实现主备调度器的自动故障切换,确保服务持续可用。

此外,对于需要基于 HTTP 头部、URL 路径等应用层信息进行更精细路由的场景,七层负载均衡器(如 HAProxy)则能提供 LVS 所不具备的灵活性和功能。

本文将带领大家从零开始,一步步搭建一个完整的负载均衡与高可用实验环境。我们将涵盖:

  • LVS-DR 模式搭建:体验高性能的直接路由模式。
  • LVS-NAT 模式搭建:理解网络地址转换模式及其适用场景。
  • 集成 Keepalived 实现高可用:为 LVS 调度器加上“保险”,构建主备集群。
  • HAProxy 七层负载均衡实践:探索应用层负载均衡的配置与效果。
  • 一、LVS负载均衡

    主机名IP地址VIP角色
    server1 192.168.48.132 192.168.48.100 调度器(VS)
    server2 192.168.48.144 192.168.48.100 真实服务器(RS)
    server3 192.168.48.142 192.168.48.100 真实服务器(RS)
    server4 192.168.48.143 测试机

    server2 安装网页服务

    yum install -y httpd

    在这里插入图片描述 server2 启动网页并写入内容

    systemctl start httpd
    echo server2 > /var/www/html/index.html
    systemctl enable httpd

    server2 添加VIP

    ip a a 192.168.48.100/24 dev eth0

    在这里插入图片描述 server2 安装arptables

    yum install -y arptables

    server2 添加arptables规则

    arptables -A INPUT -d 192.168.48.100 -j DROP
    arptables -A OUTPUT -s 192.168.48.100 -j mangle –mangle-ip-s 192.168.48.144

    server2 保存arptables规则

    arptables-save > /etc/sysconfig/arptables

    server2 设置arptables开机自启

    systemctl enable arptables

    在这里插入图片描述

    server3 安装网页服务

    yum install -y httpd

    server3 启动并写入网页内容

    systemctl enable –now httpd
    echo server3 > /var/www/html/index.html

    server3 添加VIP

    ip a a 192.168.48.100/24 dev eth0

    server3 安装arptables

    yum install -y arptables

    在这里插入图片描述 在这里插入图片描述 server3 添加arptables规则

    arptables -A INPUT -d 192.168.48.100 -j DROP
    arptables -A OUTPUT -s 192.168.48.100 -j mangle –mangle-ip-s 192.168.48.142

    server3 保存arptables规则

    arptables-save > /etc/sysconfig/arptables

    server3 设置arptables开机自启

    systemctl enable arptables

    在这里插入图片描述

    server1安装ipvsadm

    yum install -y ipvsadm

    在这里插入图片描述 server1 添加VIP

    ip addr add 192.168.48.100/24 dev eth0

    server1 添加虚拟服务

    ipvsadm -A -t 192.168.48.100:80 -s rr

    server1 添加真实服务器 server2、server3

    ipvsadm -a -t 192.168.48.100:80 -r 192.168.48.144:80 -g
    ipvsadm -a -t 192.168.48.100:80 -r 192.168.48.142:80 -g

    server1 查看LVS配置

    ipvsadm -ln

    server1 保存LVS配置

    ipvsadm-save > /etc/sysconfig/ipvsadm

    在这里插入图片描述 在server4执行命令

    for i in {1..10}; do curl 192.168.48.100; done

    在这里插入图片描述 也可以在 server1 上查看调度统计:

    ipvsadm -ln

    在这里插入图片描述

    二、LVS-NAT 模式搭建

    给server1的虚拟机添加一块网卡ens33 在这里插入图片描述

    在这里插入图片描述 新设置的网卡所属网段:192.168.159.0/24 在这里插入图片描述 将server4网络适配器修改为仅主机模式 在这里插入图片描述 在这里插入图片描述 修改为dhcp 在这里插入图片描述 保留192.168.159.0/24网段,保证测试机只能访问调度器的外部网卡 在这里插入图片描述在这里插入图片描述 打开server1路由功能

    vim /etc/sysctl.d/lvs.conf

    net.ipv4.ip_forward=1

    sysctl –system

    在这里插入图片描述

    在这里插入图片描述 在这里插入图片描述 将VIP192.168.48.100/24摘掉

    ip addr del 192.168.48.100/24 dev ens32

    在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

    在这里插入图片描述 修改网关,使网关指向192.168.48.132,确保RS的数据包正确回归到VS上

    ipvsadm -ln
    ipvsadm -C

    ipvsadm -A -t 192.168.159.128:80 -s rr

    在这里插入图片描述

    # 添加后端RealServer1 server2,-m代表NAT转发模式
    ipvsadm -a -t 192.168.159.128:80 -r 192.168.48.144:80 -m
    # 添加后端RealServer2 server3
    ipvsadm -a -t 192.168.159.128:80 -r 192.168.48.142:80 -m
    # 查看完整规则确认
    ipvsadm -ln

    在这里插入图片描述 删除旧网关

    ip r d default via 192.168.48.2

    添加调度器 IP 作为新的默认网关(LVS-NAT 核心)

    ip route add default via 192.168.48.132 dev ens32

    核对路由是否修改成功

    ip r

    在这里插入图片描述 server3 也要照抄这套操作

    # 删除旧网关
    ip r d default via 192.168.48.2
    # 指向调度器
    ip route add default via 192.168.48.132 dev ens32
    # 核对
    ip r

    在这里插入图片描述 在server4上测试配置 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

    三、keepalived高可用

    问题:

    • 某台RealServer down了,怎么办?
    • LVS本身down了,怎么办?

    将server4网络适配器还原NAT模式,移除server1的第二块网卡,回归原先DR模式 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 Q1: 在这里插入图片描述 在这里插入图片描述 添加健康检测

    Q2: 模拟调度器坏掉 在这里插入图片描述 在这里插入图片描述 现在使用server4做主备(一般不推荐,此处实验环境机器有限)

    整体规划

    • 主调度器:server1 192.168.48.132
    • 备调度器:server4 192.168.48.143(原本的客户端,现在兼任备 VS)
    • VIP:192.168.48.100
    • 后端 RS:server2 192.168.48.144、server3 192.168.48.142
    • 两台 RS 的 ARP 抑制、lo:0 绑定 VIP、网关192.168.48.2配置保持不变

    1.主 server1、备 server4 都安装 Keepalived、 ipvsadm

    yum install -y keepalived ipvsadm

    此处删掉server1的VIP,VIP 完全交给 Keepalived 自动管理: 1.两台调度器(server1、server4)安装 Keepalived,按之前给的配置文件编写eepalived.conf 2.启动 Keepalived 后,主节点会自动把 VIP 绑定到 ens32,备节点平时不生成 VIP 3.主节点故障时,备节点自动接管 VIP,不需要人工执行ip addr增减命令 在这里插入图片描述 安装邮件工具

    yum install -y mailx

    2.主节点 server1 配置

    编辑配置文件

    vim /etc/keepalived/keepalived.conf

    ! Configuration File for keepalived

    global_defs {
    notification_email {
    root@localhost
    }
    notification_email_from keepalived@localhost
    smtp_server 127.0.0.1
    smtp_connect_timeout 30
    router_id LVS_DEVEL
    vrrp_skip_check_adv_addr
    #vrrp_strict
    vrrp_garp_interval 0
    vrrp_gna_interval 0
    }

    vrrp_instance VI_1 {
    state MASTER
    interface ens32
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
    auth_type PASS
    auth_pass 1111
    }
    virtual_ipaddress {
    192.168.48.100
    }
    }

    virtual_server 192.168.48.100 80 {
    delay_loop 3
    lb_algo rr
    lb_kind DR
    protocol TCP

    real_server 192.168.48.144 80 {
    weight 1
    TCP_CHECK {
    connect_timeout 3
    retry 3
    delay_before_retry 3
    }
    }

    real_server 192.168.48.142 80 {
    weight 1
    TCP_CHECK {
    connect_timeout 3
    retry 3
    delay_before_retry 3
    }
    }
    }

    启动服务

    systemctl start keepalived

    在这里插入图片描述 执行下面命令文件会完整传到备机 server4,但复制完不能直接启动,要改配置。

    scp /etc/keepalived/keepalived.conf server4:/etc/keepalived/

    在这里插入图片描述

    修改 :state + priority

    ```bash
    # 主机是MASTER、优先级100
    state BACKUP
    priority 50

    备机重启加载配置

    systemctl restart keepalived

    在这里插入图片描述

    测试:

    在这里插入图片描述 Keepalived 由 核心组件 和 配置文件 两部分组成,配置决定其行为逻辑。 核心组件 ● vrrp_instance:VRRP 实例,是 Keepalived 配置的核心单元,一个实例对应一个 VIP 及一组主备节点(如 VI_1 实例管理 VIP 192.168.36.200)。 ● Global_defs:全局配置,定义集群标识(如 router_id)、邮件通知(故障时发告警邮件)等基础参数。 ● Track_script:健康检查脚本,用于检测主节点上 “核心业务服务”(如 Nginx、LVS)是否存活。若服务挂了,即使主节点本身存活,也会主动释放 VIP,触发切换(避免 “主节点存活但服务不可用” 的问题)。

    四、7层负载均衡

    停止 Keepalived(server1 和 server4)

    systemctl stop keepalived

    server1 安装 HAProxy

    yum install -y haproxy

    创建 HAProxy 配置文件

    vim /etc/haproxy/haproxy.cfg

    注释这些内容 在这里插入图片描述 在这里插入图片描述

    frontend main *:80
    mode http
    default_backend app

    backend app
    balance roundrobin
    server server2 192.168.48.144:80 check
    server server3 192.168.48.142:80 check

    在这里插入图片描述 启动 HAProxy

    systemctl start haproxy

    在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 HAProxy是单线程


    总结

    通过本篇教程的实践,我们系统地完成了从四层到七层、从基础负载均衡到高可用集群的完整搭建与验证。让我们回顾一下核心要点与收获:

    1. 技术栈演进与对比

    • LVS (DR/NAT 模式):作为四层负载均衡的标杆,其核心优势在于高性能与低延迟。DR 模式通过数据链路层改写 MAC 地址,让 Real Server 直接响应客户端,是追求极致性能场景的首选。NAT 模式则更灵活,支持 Real Server 与客户端在不同网段,但调度器会成为双向流量的瓶颈。
    • Keepalived:解决了 LVS 调度器自身的单点故障问题。它通过 VRRP 协议实现主备节点的 VIP 漂移和健康检查,当主节点故障时,备节点能在秒级内自动接管,保障服务不间断,是构建高可用集群的基石。
    • HAProxy:作为七层负载均衡的代表,它提供了应用层(HTTP)的智能路由能力。可以根据 URL、Cookie、Header 等信息进行精细化的流量分发,适用于需要会话保持、动静分离、SSL 卸载等复杂策略的场景。

    2. 关键配置与原理

    • ARP 抑制:在 LVS-DR 模式中,这是避免多台 Real Server 响应 VIP ARP 请求、导致 IP 冲突的关键配置。
    • 网关指向:在 LVS-NAT 模式中,Real Server 的默认网关必须指向调度器的 DIP,这是实现地址转换和回包路由的基础。
    • 健康检查:无论是 Keepalived 对 Real Server 的 TCP_CHECK,还是 HAProxy 后端的 check 参数,都实现了对后端服务可用性的自动感知,这是实现负载均衡“高可用”而非“高故障”的核心。

    3. 生产环境建议

    • 模式选择:内部服务、同机房且对性能要求极高,优先选择 LVS-DR + Keepalived。需要跨网段或 Real Server 无需暴露公网 IP 时,可考虑 LVS-NAT。对于 Web 应用,需要基于域名、路径做路由时,HAProxy 或 Nginx 是更合适的选择。
    • 监控与告警:搭建完成只是第一步,必须配套完善的监控(如监控 VIP 状态、连接数、后端节点健康状态)和告警机制。
    • 灰度与演练:任何配置变更都应先在测试环境验证。定期进行故障切换演练,确保高可用机制在真实故障时能如期生效。

    负载均衡与高可用是构建现代分布式系统的必备技能。希望本教程能成为您探索更广阔架构世界的一块坚实垫脚石。下一步,您可以尝试将这套体系与容器编排(如 Kubernetes)、服务网格(如 Istio)等云原生技术结合,构建更具弹性与韧性的下一代应用架构。

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » Day 7 - 高可用与负载均衡(上)
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!