当前位置:首页 > 技术 > 正文内容

Linux虚拟服务器DR模式负载均衡集群搭建

访客 技术 2026年8月1日 1

(1).DR模式与TUN模式技术解析

直接路由(Direct Routing):调度器将客户端请求分发至不同的后端服务器。处理完成后,服务器直接响应客户端,这样调度器仅需处理客户端与服务器间的一半连接。这种设计避免了新的性能瓶颈,同时提升了系统的可扩展性。由于DR模式采用物理层技术(修改MAC地址),所有服务器必须位于同一网段。

IP隧道(IP Tunneling):调度器将客户端请求分发至不同的后端服务器。处理完成后,服务器直接响应客户端,调度器同样仅处理一半连接。IP隧道技术显著提升了调度器的处理能力,大幅增加了系统可容纳的最大节点数,可支持超过100个节点。后端服务器可在任何局域网或广域网上运行,这意味着允许地理分布,这对灾难恢复具有重要意义。服务器必须拥有正式的公网IP地址用于与客户端直接通信,且所有服务器必须支持IP隧道协议。

两种模式的主要区别在于IP地址是否在同一物理网段,这也是DR模式仅需服务器能上网即可,而TUN模式必须拥有正式公网IP的原因。

(2).DR模式工作原理

DR模式下数据流全程保持目标地址和源地址不变,因为DR模式工作于第二层。以下是数据包传输过程:

第一步:客户端发送请求报文,源IP为CIP,目标IP为VIP,源MAC为CMAC,目标MAC为VMAC;

第二步:请求到达负载均衡器,调度器将其分配至真实服务器(修改MAC),源IP仍为CIP,目标IP仍为VIP,源MAC变为DMAC,目标MAC变为RMAC;

第三步:真实服务器接收报文,处理并直接响应客户端,源IP变为RIP,目标IP变为CIP,源MAC为RMAC,目标MAC为CMAC。

说明: 1)基于MAC的数据报文转发效率最高,但依赖交换机的MAC地址表实现; 2)二层设备不具备路由功能,广播无法跨路由,因此MAC地址广播必须在同一物理网段实现; 3)VLAN具有隔离广播的功能,要实现MAC地址广播,所有设备应在同一VLAN中。

总体而言,所有设备应在同一物理网段,所有设备应在同一广播域中。

(3).实践部署

服务器配置:

  • node1 192.168.5.100(DIP),192.168.5.100(VIP) 负载均衡器
  • node2 192.168.5.102 真实服务器1
  • node3 192.168.5.103 真实服务器2

1)在负载均衡器node1上创建虚拟接口配置文件,配置VIP地址192.168.5.101

[root@node1 ~]# cp /etc/sysconfig/network-scripts/ifcfg-ens33{,:1}
[root@node1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33:1  //修改以下参数
NAME="ens33:1"
DEVICE="ens33:1"
IPADDR="192.168.5.101"
GATEWAY="192.168.5.2"  //指向网关IP
//如果存在HWADDR,ens33和ens33:1的HWADDR不必一致。
[root@node1 ~]# systemctl restart network  //重启网络服务
[root@node1 ~]# ip addr show  //查看网络接口状态
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host 
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:e6:d6:27 brd ff:ff:ff:ff:ff:ff
inet 192.168.5.100/24 brd 192.168.5.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet 192.168.5.101/24 brd 192.168.5.255 scope global secondary noprefixroute ens33:1
valid_lft forever preferred_lft forever
inet6 fe80::201:7257:85b:7dc8/64 scope link noprefixroute 
valid_lft forever preferred_lft forever

2)在负载均衡器node1上安装LVS管理工具ipvsadm,并设置开机自启

[root@node1 ~]# yum -y install ipvsadm
[root@node1 ~]# systemctl enable ipvsadm.service
Created symlink from /etc/systemd/system/multi-user.target.wants/ipvsadm.service to /usr/lib/systemd/system/ipvsadm.service.

暂时不启动ipvsadm服务,因为需要/etc/sysconfig/ipvsadm配置文件。

3)在负载均衡器node1上使用ipvsadm命令配置负载均衡规则

[root@node1 ~]# ipvsadm -A -t 192.168.5.101:80 -s wrr  //设置虚拟服务IP和端口,使用加权轮询模式
[root@node1 ~]# ipvsadm -a -t 192.168.5.101:80 -r 192.168.5.102:80 -g -w 1
[root@node1 ~]# ipvsadm -a -t 192.168.5.101:80 -r 192.168.5.103:80 -g -w 2
[root@node1 ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.5.101:80 wrr
  -> 192.168.5.102:80             Route   1      0          0         
  -> 192.168.5.103:80             Route   2      0          0         
[root@node1 ~]# ipvsadm -S > /etc/sysconfig/ipvsadm
-A -t 192.168.5.101:http -s wrr
-a -t 192.168.5.101:http -r 192.168.5.102:http -g -w 1
-a -t 192.168.5.101:http -r 192.168.5.103:http -g -w 2
[root@node1 ~]# systemctl start ipvsadm

-g参数指定DR模式,-m参数指定TUN模式。

注意:LVS三种模式中,仅NAT模式需要开启路由转发功能,DR和TUN模式都不需要。

如果启用了防火墙,请添加相应端口规则

[root@node1 ~]# firewall-cmd --permanent --zone=public --add-port=80/tcp && firewall-cmd --reload
success
success

4)在真实服务器node2和node3上安装Web服务器用于测试

[root@node2 ~]# yum -y install httpd
[root@node2 ~]# systemctl start httpd
[root@node2 ~]# echo "Server Node 2" > /var/www/html/index.html

[root@node3 ~]# yum -y install httpd
[root@node3 ~]# systemctl start httpd
[root@node3 ~]# echo "Server Node 3" > /var/www/html/index.html

如果启用了防火墙,请开放相应端口

[root@node2 ~]# firewall-cmd --permanent --zone=public --add-port=80/tcp && firewall-cmd --reload
success
success

[root@node3 ~]# firewall-cmd --permanent --zone=public --add-port=80/tcp && firewall-cmd --reload
success
success

5)在真实服务器node2和node3上配置回环接口

[root@node2 ~]# cp /etc/sysconfig/network-scripts/ifcfg-lo{,:1}
[root@node2 ~]# vim /etc/sysconfig/network-scripts/ifcfg-lo:1  //修改配置
DEVICE=lo:1
IPADDR=192.168.5.101  //指向VIP
NETMASK=255.255.255.255
ONBOOT=yes
NAME=loopback

[root@node3 ~]# cp /etc/sysconfig/network-scripts/ifcfg-lo{,:1}
[root@node3 ~]# vim /etc/sysconfig/network-scripts/ifcfg-lo:1  //修改配置
DEVICE=lo:1
IPADDR=192.168.5.101  //指向VIP
NETMASK=255.255.255.255
ONBOOT=yes
NAME=loopback

为什么要在回环接口上配置VIP: 1)因为DR模式只修改MAC地址而不改变IP地址,为使真实服务器能够接收报文,需要配置一个与VIP相同的IP地址; 2)但VIP不能配置在出口网卡上,否则会响应客户端的ARP请求,造成客户端/网关ARP表混乱,导致整个集群无法正常工作。

另外,VIP可以与RIP、DIP不在同一网段,回环接口配置方式不变。

6)关闭真实服务器node2和node3上的ARP响应

[root@node2 ~]# vim /etc/sysctl.conf  //添加或修改以下参数
net.ipv4.conf.ens33.arp_ignore = 1
net.ipv4.conf.ens33.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
[root@node2 ~# sysctl -p    //立即生效
net.ipv4.conf.ens33.arp_ignore = 1
net.ipv4.conf.ens33.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2

[root@node3 ~]# vim /etc/sysctl.conf  //添加或修改以下参数
net.ipv4.conf.ens33.arp_ignore = 1
net.ipv4.conf.ens33.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
[root@node3 ~]# sysctl -p    //立即生效
net.ipv4.conf.ens33.arp_ignore = 1
net.ipv4.conf.ens33.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2

参数说明:

arp_ignore参数控制系统收到外部ARP请求时是否响应。常用取值: 0:响应任意网卡上接收到的对本机IP地址的ARP请求(包括回环接口); 1:只响应目的IP地址为接收网卡上的本地地址的ARP请求; 2:只响应目的IP地址为接收网卡上的本地地址的ARP请求,且ARP请求的源IP必须与接收网卡同网段; 8:不响应所有ARP请求。

arp_announce参数控制系统发送ARP请求时如何选择源IP地址。常用取值: 0:允许使用任意网卡上的IP地址作为ARP请求的源IP; 1:尽量避免使用不属于该发送网卡子网的本地地址作为ARP请求的源IP; 2:忽略IP数据包的源IP地址,选择该发送网卡上最合适的本地地址作为ARP请求的源IP。

7)测试验证

在客户端浏览器访问http://192.168.5.101,观察返回的内容是否在node2和node3之间轮换。

注意:DR模式下的轮换机制可能与NAT模式有所不同,需要特别验证。

标签: LVS

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。