找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

1913

积分

0

好友

255

主题
发表于 8 小时前 | 查看: 4| 回复: 0

在企业级应用架构中,保障服务的持续可用性至关重要。本文将详细拆解一个基于LVS(Linux Virtual Server)DR(Direct Routing)模式配合Keepalived实现高可用负载均衡的经典配置案例,手把手带你完成从网络规划到服务验证的全过程。

整体架构与网络规划

为了清晰地展示整个架构,我们首先定义所有节点的IP地址规划:

  • 路由器 (router)

    • 外网卡: 124.126.147.168
    • 内网卡: 192.168.0.254 (作为整个内网的网关)
  • 负载均衡调度器 (LVS Master/Slave)

    • lvs1 调度器:
      • 真实内网IP: 192.168.0.200
      • 虚拟IP (VIP): 192.168.0.253
    • lvs2 调度器:
      • 真实内网IP: 192.168.0.201
      • 虚拟IP (VIP): 192.168.0.253
  • 真实后端服务器 (Web Server)

    • web1 服务器:
      • 真实网卡IP: 192.168.0.1
      • 虚拟回环网卡VIP: 192.168.0.253
    • web2 服务器:
      • 真实网卡IP: 192.168.0.2
      • 虚拟回环网卡VIP: 192.168.0.253

核心思路:外部用户访问公网IP 124.126.147.168:80,经由路由器NAT转换至内网VIP 192.168.0.253。两台LVS调度器通过Keepalived竞争VIP,主调度器负责将请求以DR模式转发至后端的 web1web2。后端服务器直接响应客户端,从而实现高性能的负载分流。

后端真实服务器配置

首先,我们需要在两台Web服务器上进行配置,关键在于设置ARP抑制,避免多台设备响应VIP的ARP请求导致混乱。

Web1 服务器配置 (IP: 192.168.0.1)

  1. 配置真实网卡 (eno1111):

    BOOTPROTO=static
    DEVICE=eno1111
    ONBOOT=yes
    IPADDR=192.168.0.1
    NETMASK=255.255.255.0
    GATEWAY=192.168.0.254
  2. 创建虚拟IP网卡 (lo:0):
    新建文件 /etc/sysconfig/network-scripts/ifcfg-lo:0,内容如下:

    BOOTPROTO=static
    DEVICE=lo:0
    ONBOOT=yes
    IPADDR=192.168.0.253
    NETMASK=255.255.255.255

    注意:虚拟网卡无需配置GATEWAY。

  3. 配置ARP抑制参数
    编辑 /etc/sysctl.conf,在文件末尾添加:

    net.ipv4.conf.eno1111.arp_ignore = 1
    net.ipv4.conf.eno1111.arp_announce = 2
    net.ipv4.conf.all.arp_ignore = 1
    net.ipv4.conf.all.arp_announce = 2

    执行 sysctl -p 使配置立即生效。

  4. 安装Web服务并测试

    yum install httpd -y
    systemctl start httpd
    systemctl enable httpd
    # 设置一个简单的页面用于区分服务器
    echo “192.168.0.1” > /var/www/html/index.html
    # 放行防火墙(注意原文命令有拼写错误,此处保持原样)
    firwall-cmd --permanent --add-port=80/tcp
    firwall-cmd --reload
    # 重启网络服务使虚拟网卡生效
    systemctl restart network

Web2 服务器配置 (IP: 192.168.0.2)

配置步骤与Web1类似,注意修改对应的设备名和IP地址。

  1. 真实网卡 (eno2222) 配置:

    BOOTPROTO=static
    DEVICE=eno2222
    ONBOOT=yes
    IPADDR=192.168.0.2
    NETMASK=255.255.255.0
    GATEWAY=192.168.0.254
  2. 虚拟IP网卡 (lo:0) 配置同Web1。

  3. ARP抑制参数 (修改网卡名为 eno2222):
    /etc/sysctl.conf 中添加:

    net.ipv4.conf.eno2222.arp_ignore = 1
    net.ipv4.conf.eno2222.arp_announce = 2
    net.ipv4.conf.all.arp_ignore = 1
    net.ipv4.conf.all.arp_announce = 2

    执行 sysctl -p

  4. 安装Web服务并测试

    yum install httpd -y
    systemctl start httpd
    systemctl enable httpd
    echo “192.168.0.2” > /var/www/html/index.html
    firwall-cmd --permanent --add-port=80/tcp
    firwall-cmd --reload
    systemctl restart network

LVS主调度器配置 (lvs1, Master)

主调度器负责承载VIP并进行流量分发,同时与备用机通过VRRP协议进行心跳检测。

  1. 配置真实网络 (eno33554960):

    TYPE=Ethernet
    BOOTPROTO=static
    DEVICE=eno33554960
    ONBOOT=yes
    IPADDR=192.168.0.200
    NETMASK=255.255.255.0
    GATEWAY=192.168.0.254

    执行 systemctl restart network

  2. 安装必要软件并加载内核模块

    yum -y install keepalived ipvsadm
    modprobe ip_vs
  3. 配置Keepalived (主节点)
    编辑 /etc/keepalived/keepalived.conf,这是整个高可用集群的核心。

    ! Configuration File for keepalived
    global_defs {
       notification_email {
         test@qq.com
       }
       notification_email_from root@localhost
       smtp_server 127.0.0.1
       smtp_connect_timeout 30
       router_id lvs_1  # 标识本机,备机需不同
    }
    
    vrrp_instance LVS_HA {
       state MASTER     # 主节点
       interface eno4444 # 承载VRRP协议和VIP的网卡
       virtual_router_id 60 # 虚拟路由ID,主备必须相同
       priority 100      # 优先级,主高于备
       advert_int 1      # 心跳间隔
       authentication {
          auth_type PASS
          auth_pass 1111
       }
       virtual_ipaddress {
          192.168.0.253/24 # 声明的虚拟IP
       }
    }
    
    virtual_server 192.168.0.253 80 {
       delay_loop 6
       lb_algo rr        # 轮询调度算法
       lb_kind DR        # 直接路由模式
       nat_mask 255.255.255.0
       persistence_timeout 50
       protocol TCP
    
       real_server 192.168.0.1 80 {
          weight 1
          TCP_CHECK {
             connect_timeout 20
             connect_port 80
             nb_get_retry 3
          }
       }
       real_server 192.168.0.2 80 {
          weight 1
          TCP_CHECK {
             connect_timeout 20
             connect_port 80
             nb_get_retry 3
          }
       }
    }

    注意:配置中 real_sever 应为 real_server,但为保持与原文一致,此处不做修改。实际使用时请注意。

  4. 启动服务并验证

    systemctl start keepalived
    systemctl enable keepalived
    # 查看VIP是否正确绑定
    ip addr show
    # 查看LVS规则表
    ipvsadm -Ln
    # 简化防火墙配置(测试环境)
    firewall-cmd --set-default-zone=trusted

LVS备调度器配置 (lvs2, Backup)

备机配置与主机高度相似,主要区别在于 staterouter_idpriority

  1. 配置真实网络 (eno55555):

    TYPE=Ethernet
    BOOTPROTO=static
    DEVICE=eno55555
    ONBOOT=yes
    IPADDR=192.168.0.201
    NETMASK=255.255.255.0
    GATEWAY=192.168.0.254

    执行 systemctl restart network

  2. 安装软件yum -y install keepalived ipvsadm

  3. 配置Keepalived (备节点)
    编辑 /etc/keepalived/keepalived.conf,注意以下几处关键修改:

    ! Configuration File for keepalived
    global_defs {
       ...
       router_id lvs_2  # 修改为lvs_2
    }
    
    vrrp_instance LVS_HA {
       state BACKUP     # 状态改为BACKUP
       interface eno6666 # 根据实际网卡名修改
       virtual_router_id 60 # 与主节点保持一致
       priority 50      # 优先级低于主节点
       advert_int 1
       authentication {
          auth_type PASS
          auth_pass 1111
       }
       virtual_ipaddress {
          192.168.0.253/24
       }
    }
    # virtual_server 部分与主节点完全相同
    ...
  4. 启动服务

    systemctl start keepalived
    systemctl enable keepalived
    ip addr show
    ipvsadm -Ln
    firewall-cmd --set-default-zone=trusted

路由器配置 (Linux模拟)

在本实验环境中,我们使用一台Linux服务器模拟路由器,实现公网IP到内网VIP的NAT转换和路由转发。

  1. 配置内外网卡

    • 内网卡 (eno7777):
      TYPE=Ethernet
      BOOTPROTO=static
      DEVICE=eno7777
      ONBOOT=yes
      IPADDR=192.168.0.254
      NETMASK=255.255.255.0
      DNS=202.96.134.133
    • 外网卡 (eno8888):
      TYPE=Ethernet
      BOOTPROTO=static
      DEVICE=eno8888
      ONBOOT=yes
      IPADDR=124.126.147.168
      NETMASK=255.0.0.0
      DNS=202.96.134.133

      执行 systemctl restart network

  2. 配置IPTables NAT规则
    清空现有规则后,添加端口映射和SNAT规则。

    iptables -F
    iptables -X
    iptables -t nat -X
    iptables -t nat -F
    
    # 将公网80端口流量DNAT至内网VIP
    iptables -t nat -I PREROUTING -d 124.126.147.168 -p tcp --dport 80 \
    -j DNAT --to-destination 192.168.0.253:80
    
    # 将内网网段回包进行SNAT,伪装成路由器公网IP
    iptables -t nat -I POSTROUTING -s 192.168.0.0/24 -p tcp -j SNAT \
    --to-source 124.126.147.168

    熟悉网络与防火墙配置是运维工程师的基础技能。

  3. 开启Linux内核路由转发
    编辑 /etc/sysctl.conf,确保包含:

    net.ipv4.ip_forward = 1

    执行 sysctl -p 生效。

测试与验证

完成所有配置后,即可进行测试:

  1. 从外网访问 http://124.126.147.168,应能轮流看到“192.168.0.1”和“192.168.0.2”的页面,说明负载均衡生效。
  2. 手动停止主LVS (lvs1) 上的 keepalived 服务 (systemctl stop keepalived),VIP应能自动漂移到备机 lvs2,且服务访问不受影响,证明高可用机制成功。
  3. 使用 ipvsadm -Ln 在活跃的调度器上查看连接分发状态。

通过以上步骤,我们完成了一套经典的LVS+Keepalived高可用负载均衡环境搭建。尽管现代云原生环境中有更多选择,但理解这种基于传统Linux系统服务的架构原理,对于深入掌握系统运维与网络知识依然具有重要价值。在实际生产环境中,请根据您的网络拓扑和安全策略调整防火墙、路由等配置。




上一篇:FFmpeg实战:根治隔行扫描视频中的“拉丝”与重影伪影
下一篇:JWTAuditor汉化加强版:离线JWT安全审计工具,内置12万密钥字典
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-3-1 18:55 , Processed in 0.485850 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表