一、概述
LVS(Linux Virtual Server)是一个开源的软件负载均衡器,支持三种负载均衡模式:DR、TUN和NAT。其中,DR(Direct Routing)模式是最为常用的一种模式,主要特点是使用 LVS 节点上的虚拟 ip(VIP)和物理服务器的 ip(RIP)进行负载均衡,无需对物理服务器进行任何修改,是一种非入侵性的负载均衡方式。
二、服务端部署
为了实现 LVS 的 DR 模式,需要在服务端节点上完成 LVS 软件的部署。这里以 CentOS 系统为例:
# 安装ipvsadm软件 yum -y install ipvsadm # 修改内核参数 echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf # 重新加载内核参数 sysctl -p
修改内核参数后,需要重启生效。接下来,需要配置 LVS 节点的网络环境。将实际的服务器(RIP)的默认网关设置为 LVS 的 VIP 地址,在这样的网络环境下,LVS 节点即成为实际服务器的网关。在 LVS 节点上创建虚拟设备 eth0:0(VIP):
# 在ifcfg-eth0:0文件中添加以下内容 BOOTPROTO=static IPADDR=192.168.0.100 NETMASK=255.255.255.0 ONBOOT=yes # 重启网络服务 service network restart
三、LVS规则配置
LVS DR 模式主要采用ipvsadm工具进行规则配置,ipvsadm是一款Linux系统下的网络设备调度软件,它允许Linux系统利用IP负载均衡技术来均衡负载。
1、添加虚拟服务:
ipvsadm -A -t 192.168.0.100:80 -s rr
其中,-A 表示添加,在 DR 模式下只能添加虚拟服务,-t 表示指定虚拟服务的ip和端口,-s 表示负载均衡算法,这里采用轮询算法(Round Robin)。
2、添加实际服务器:
ipvsadm -a -t 192.168.0.100:80 -r 192.168.0.101:80 -g ipvsadm -a -t 192.168.0.100:80 -r 192.168.0.102:80 -g
其中,-a 表示在虚拟服务中添加实际服务器的ip和端口,-r 表示实际服务器的ip和端口,-g 表示使用 DR 模式。
四、LVS DR工作原理
LVS DR 模式的工作原理是,客户端访问 LVS 节点的 VIP (192.168.0.100)的 80 端口,根据负载均衡算法选择一个实际服务器(RIP)的 80 端口进行访问。实际服务器收到请求后,响应报文的目标 IP 地址为客户端的 IP 地址,目标 MAC 地址为 LVS 节点的 MAC 地址,响应报文通过物理网络传送到 LVS 节点,然后由 LVS 节点进行 DNAT,将响应报文的目标 IP 地址从 LVS 节点的 VIP 更改为客户端的 IP,然后再将响应报文发送给客户端。
五、总结
LVS DR 模式是一种通用的、可扩展的、高效的负载均衡方式,具备变更简单、扩展性强、响应速度快等优点。但也需要注意使用场景,例如,不适合用于会话保持、端口映射等需要在 LVS 节点进行修改的业务场景。