LVS与Keepalived详解(二)LVS负载均衡实现实操

文章目录

  • 前言
  • [一、LVS-DR 模式详解](#一、LVS-DR 模式详解)
    • [1.1 数据包流向分析](#1.1 数据包流向分析)
    • [1.2 DR 模式的特点](#1.2 DR 模式的特点)
  • [二、LVS-DR 集群部署实战](#二、LVS-DR 集群部署实战)
    • [2.1 环境准备](#2.1 环境准备)
    • [2.2 配置负载调度器(Director Server)](#2.2 配置负载调度器(Director Server))
    • [2.3 配置节点服务器(Real Server)](#2.3 配置节点服务器(Real Server))
    • [2.4 测试验证](#2.4 测试验证)
  • 三、前期回顾
    • [3.1 LVS 三种工作模式及其区别?](#3.1 LVS 三种工作模式及其区别?)
    • [3.2 LVS 调度算法](#3.2 LVS 调度算法)
  • 总结

好的,我已经为您将提供的文档整理成了一篇结构清晰、层次分明的博客文章,并按照要求添加了前言和总结。


前言

负载均衡是构建高可用服务的核心技术之一,Linux Virtual Server (LVS) 的 DR(Direct Routing)模式以其高性能和低延迟成为热门选择。本文将深入解析 LVS-DR 的工作原理,并通过实战演示如何快速搭建一个高效的负载均衡集群,助您轻松掌握这一关键技能。

一、LVS-DR 模式详解

1.1 数据包流向分析

LVS-DR 模式的工作流程可以清晰地分为以下几个步骤,理解此流程是掌握 DR 模式的关键:

  1. 客户端发送请求:客户端(CIP)向负载均衡器(Director Server)的虚拟 IP(VIP)发送请求报文。报文源地址为 CIP,目标地址为 VIP。
  2. 负载均衡器接收并转发 :请求报文到达 Director Server 的内核空间。IPVS(IP 虚拟服务器)模块判断该请求的服务是否为已定义的集群服务。如果是,IPVS 会重新封装数据包的 MAC 头 ,将源 MAC 地址改为 Director Server 的 MAC 地址,将目标 MAC 地址改为选定的真实服务器(Real Server, RIP)的 MAC 地址。IP 头保持不变(源 IP 为 CIP,目标 IP 为 VIP)。
  3. 真实服务器处理请求 :由于 MAC 地址匹配,Real Server 会接收该数据包。解包后,应用程序(如 Web 服务器)发现目标 IP(VIP)配置在本机的 lo 接口上,于是处理这个请求。
  4. 真实服务器直接响应客户端 :处理完成后,Real Server 会构建响应报文。该报文不经过 Director Server,而是直接通过其默认网关发送给客户端。响应报文的源 IP 地址为 VIP,目标 IP 地址为 CIP。

1.2 DR 模式的特点

基于其工作流程,DR 模式具有以下显著特点:

  1. 同一网络:Director Server 和所有 Real Server 必须位于同一个物理网络(同一广播域)中,以便能通过 MAC 地址进行二层通信。
  2. IP 地址灵活:Real Server 可以使用私有地址,也可以使用公网地址。
  3. 非网关角色:Director Server 仅作为流量的入口,不作为 Real Server 的网关,极大地减轻了其负担。
  4. 响应直接返回:响应数据包由 Real Server 直接返回给客户端,性能极高。这是 DR 模式高吞吐量的主要原因。
  5. 网关指向 :Real Server 的网关必须指向能够连接互联网的路由器,绝不能指向 Director Server。
  6. 本地回环接口配置 VIP :每台 Real Server 都需要在 lo 接口上配置 VIP 地址,以便处理目标为 VIP 的请求。

二、LVS-DR 集群部署实战

以下是一个完整的 LVS-DR 模式部署流程。

2.1 环境准备

角色 IP 地址 主机名
客户端 192.168.10.200 client
Director Server 192.168.10.23 (DIP) lvs-dr
192.168.10.180 (VIP)
Real Server 1 192.168.10.16 (RIP) web01
Real Server 2 192.168.10.17 (RIP) web02
NFS 共享存储服务器 192.168.10.19 nfs

2.2 配置负载调度器(Director Server)

  1. 关闭防火墙与 SELinux

    bash 复制代码
    systemctl stop firewalld.service
    setenforce 0
  2. 加载 IP_VS 模块并安装管理工具

    bash 复制代码
    modprobe ip_vs
    cat /proc/net/ip_vs # 确认模块是否加载
    yum -y install ipvsadm
  3. 配置虚拟 IP 地址(VIP)

    编辑网卡配置文件 /etc/sysconfig/network-scripts/ifcfg-ens33:0

    ini 复制代码
    DEVICE=ens33:0
    ONBOOT=yes
    IPADDR=192.168.10.180
    NETMASK=255.255.255.255

    启用并查看 VIP:

    bash 复制代码
    ifup ens33:0
    ifconfig ens33:0
  4. 调整内核参数(/etc/sysctl.conf

    conf 复制代码
    net.ipv4.ip_forward = 0
    net.ipv4.conf.all.send_redirects = 0
    net.ipv4.conf.default.send_redirects = 0
    net.ipv4.conf.ens33.send_redirects = 0

    使配置生效:sysctl -p

  5. 配置负载分配策略

    bash 复制代码
    ipvsadm-save > /etc/sysconfig/ipvsadm # 初始化保存文件
    systemctl start ipvsadm
    
    ipvsadm -C # 清空现有规则
    ipvsadm -A -t 192.168.10.180:80 -s rr # 添加虚拟服务,调度算法为轮询(rr)
    ipvsadm -a -t 192.168.10.180:80 -r 192.168.10.16:80 -g # 添加 Real Server,-g 代表 DR 模式
    ipvsadm -a -t 192.168.10.180:80 -r 192.168.10.17:80 -g
    
    ipvsadm -ln # 查看配置,确认模式为 Route (DR)

2.3 配置节点服务器(Real Server)

以下操作需要在 web01 和 web02 上分别执行。

  1. 配置虚拟 IP 地址(VIP)到 lo:0

    编辑文件 /etc/sysconfig/network-scripts/ifcfg-lo:0

    ini 复制代码
    DEVICE=lo:0
    ONBOOT=yes
    IPADDR=192.168.10.180
    NETMASK=255.255.255.255

    启用并添加路由:

    bash 复制代码
    ifup lo:0
    ifconfig lo:0
    route add -host 192.168.10.180 dev lo:0

    为了重启后依然生效,将路由命令加入 /etc/rc.local

    bash 复制代码
    echo '/sbin/route add -host 192.168.10.180 dev lo:0' >> /etc/rc.local
    chmod +x /etc/rc.d/rc.local
  2. 调整内核 ARP 参数

    编辑 /etc/sysctl.conf,添加以下行:

    conf 复制代码
    net.ipv4.conf.lo.arp_ignore = 1
    net.ipv4.conf.lo.arp_announce = 2
    net.ipv4.conf.all.arp_ignore = 1
    net.ipv4.conf.all.arp_announce = 2

    使配置生效:sysctl -p

  3. 安装服务并挂载共享存储

    bash 复制代码
    yum -y install nfs-utils rpcbind httpd
    systemctl start httpd
    systemctl start rpcbind
    • web01 上:

      bash 复制代码
      mount.nfs 192.168.10.19:/opt/kgc /var/www/html
      echo 'this is kgc web!' > /var/www/html/index.html
    • web02 上:

      bash 复制代码
      mount.nfs 192.168.10.19:/opt/benet /var/www/html
      echo 'this is benet web!' > /var/www/html/index.html

2.4 测试验证

在客户端(192.168.10.200)打开浏览器,多次访问 http://192.168.10.180/。页面内容应在 this is kgc web!this is benet web! 之间交替显示,这表明 LVS 负载均衡集群已经成功运行。

三、前期回顾

3.1 LVS 三种工作模式及其区别?

  • NAT:通过网络地址转换实现。请求和响应都经过 Director,Director 易成为瓶颈。Real Server 可以是任何操作系统。
  • DR:使用直接路由技术。只有请求经过 Director,响应直接由 Real Server 返回,性能极高。要求 Director 和 Real Server 在同一个局域网。
  • TUN:通过 IP 隧道技术实现。能跨机房部署,Real Server 可以不在同一个局域网。Real Server 需要支持隧道协议。

3.2 LVS 调度算法

  • 固定调度算法:轮询(rr)、加权轮询(wrr)、目标地址哈希(dh)、源地址哈希(sh)。
  • 动态调度算法:最少连接(lc)、加权最少连接(wlc)、基于地址的最少连接(lblc)。

总结

LVS-DR 模式通过智能路由实现请求的高效分发,大幅提升服务响应能力。尽管部署时需要精细调整网络参数,但其卓越的性能表现值得投入。本文从理论到实践完整呈现了 LVS-DR 的部署流程,掌握这一技术后,您将能够为企业构建更强大、更可靠的网络服务体系。


相关推荐
虾..10 小时前
Linux 软硬链接和动静态库
linux·运维·服务器
Evan芙10 小时前
Linux常见的日志服务管理的常见日志服务
linux·运维·服务器
hkhkhkhkh12312 小时前
Linux设备节点基础知识
linux·服务器·驱动开发
HZero.chen13 小时前
Linux字符串处理
linux·string
张童瑶13 小时前
Linux SSH隧道代理转发及多层转发
linux·运维·ssh
汪汪队立大功12313 小时前
什么是SELinux
linux
石小千13 小时前
Linux安装OpenProject
linux·运维
柏木乃一14 小时前
进程(2)进程概念与基本操作
linux·服务器·开发语言·性能优化·shell·进程
Lime-309014 小时前
制作Ubuntu 24.04-GPU服务器测试系统盘
linux·运维·ubuntu
百年渔翁_肯肯14 小时前
Linux 与 Unix 的核心区别(清晰对比版)
linux·运维·unix