目录
LVS负载均衡集群实验
一、基于NAT的LVS负载均衡
NAT(network address translation) 网络地址转换,其主要原理是修改数据报头,使得位于企业内部的私有ip地址可以访问外网,以及外部用户可以访问位于公司内部的私有的ip主机。
LVS调度器中有一个连接Hash表,该表会记录连接请求及其转发信息,当同一个连接下一个数据包发送给调度器时,该Hash表可以直接找到之前连接的记录,并根据记录信息选出相同真实服务器及其端口信息。

1.1、工作原理
-
当用户的请求到达调度器时,请求报文会先到内核空间的PREROUTING链上。此时报文的源IP为CIP,目标IP为VIP
-
PREROUTING检查发现数据包的目标IP是本机,就将数据包送至INPUT链。
-
IPVS工作在INPUT链上,当数据包抵达INPUT链后,IPVS会检查数据包所请求的服务是否为集群服务,若是,修改数据包的目标IP地址为后端服务器RIP,然后将数据包送往 POSTROUTING链。此时报文的源IP为CIP,目标IP为RIP。
-
POSTROUTING链通过选路,将数据包转发给Real Server
-
Real Server对比发现目标IP是自己,就会接受这个请求报文,开始构建响应报文发回给调度器。源IP为RIP,目标IP为CIP
-
调度器在响应客户端前,会将报文的源IP地址修改为自己的VIP,然后响应给客户端。此时报文的源IP为VIP,目标IP为CIP
1.2、LVS-NAT模型的特性
-
RS应该使用私有地址,RS的网关必须指向DIP
-
DIP和RIP必须要在同一网段中
-
请求报文和响应报文都需要经过调度器,高负载场景中,调度器容易成为性能瓶颈。
-
支持端口映射
-
RS可以使用任意操作系统
1.3、NAT的优点
集群中的物理服务器可以使用任何支持TCP/IP操作系统它只需要一个 IP 地址配置在调度器上,服务器组可以用私有的 IP 地址。
1.4、NAT的缺点
伸缩能力有限,当服务器节点(普通PC服务器)增长过多时,负载均衡器将成为整个系统的瓶颈,因为所有的请求包和应答包的流向都经过负载均衡器。当服务器节点过多时,大量的数据包都交汇在负载均衡器那,速度就会变慢。
实战案例
准备三台主机,其中两台主机作为真实服务器(ip分别为192.168.100.1和192.168.100.2),一台主机作为前端负载均衡器节点(内设两个ip,分别192.168.100.100和192.168.58.180)
1、LVS调度器配置
####192.168.58.180 ##安装ipvsadm [root@localhost ~]# yum insatll -y ipvsadm ##加载ip_vs模块 [root@localhost ~]# modprobe ip_vs [root@localhost ~]# lsmod | grep ip_vs ip_vs 229376 0 nf_conntrack 212992 1 ip_vs nf_defrag_ipv6 24576 2 nf_conntrack,ip_vs libcrc32c 12288 2 nf_conntrack,ip_vs ##修改主机名 [root@localhost ~]# hostnamectl set-hostname lvs [root@localhost ~]# bash Welcome to 6.6.0-79.0.0.84.oe2403sp1.x86_64 System information as of time: 2025年 07月 12日 星期六 21:07:49 CST System load: 0.00 Memory used: 8.1% Swap used: 0% Usage On: 5% IP address: 192.168.100.100 IP address: 192.168.58.180 Users online: 2 ##开启路由功能 [root@lvs ~]# vim /etc/sysctl.conf net.ipv4.ip_forward = 1 [root@lvs ~]# sysctl -p kernel.sysrq = 0 net.ipv4.ip_forward = 1 net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.send_redirects = 0 net.ipv4.conf.all.accept_source_route = 0 net.ipv4.conf.default.accept_source_route = 0 net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.default.accept_redirects = 0 net.ipv4.conf.all.secure_redirects = 0 net.ipv4.conf.default.secure_redirects = 0 net.ipv4.icmp_echo_ignore_broadcasts = 1 net.ipv4.icmp_ignore_bogus_error_responses = 1 net.ipv4.conf.all.rp_filter = 1 net.ipv4.conf.default.rp_filter = 1 net.ipv4.tcp_syncookies = 1 kernel.dmesg_restrict = 1 net.ipv6.conf.all.accept_redirects = 0 net.ipv6.conf.default.accept_redirects = 0 ##启动ipvsadm服务 [root@lvs ~]# touch /etc/sysconfig/ipvsadm [root@lvs ~]# systemctl enable --now ipvsadm Created symlink /etc/systemd/system/multi-user.target.wants/ipvsadm.service → /usr/lib/systemd/system/ipvsadm.service. [root@lvs ~]# ipvsadm -Ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn
2、真实服务器配置
####192.168.100.1 ##修改主机名 [root@localhost ~]# hostnamectl set-hostname web1 [root@localhost ~]# bash [root@web1 ~]# yum insatll -y nginx [root@web1 ~]# systemctl start nginx [root@web1 ~]# echo web1 > /usr/share/nginx/html/index.html
####192.168.100.2 ##修改主机名 [root@localhost ~]# hostnamectl set-hostname web2 [root@localhost ~]# bash [root@web2 ~]# yum insatll -y nginx [root@web2 ~]# systemctl start nginx [root@web2 ~]# echo web2 > /usr/share/nginx/html/index.html
3、LVS调度器配置负载分配策略
####192.168.58.180 [root@lvs ~]# curl 192.168.100.1 web1 [root@lvs ~]# curl 192.168.100.2 web2 ##配置添加虚拟服务节点为192.168.58.180:80,算法为轮询 [root@lvs ~]# ipvsadm -A -t 192.168.58.180:80 -s rr [root@lvs ~]# 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.58.180:80 rr ##配置虚拟服务节点192.168.58.180:80指定真实服务器节点IP地址,NAT模式 [root@lvs ~]# ipvsadm -a -t 192.168.58.180:80 -r 192.168.100.1 -m [root@lvs ~]# ipvsadm -a -t 192.168.58.180:80 -r 192.168.100.2 -m [root@lvs ~]# 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.58.180:80 rr -> 192.168.100.1:80 Masq 1 0 0 -> 192.168.100.2:80 Masq 1 0 0
4、验证
网站访问192.168.58.180


二、基于DR的LVS负载均衡
直接路由:Direct Routing,简称 DR 模式,采用半开放式的网络结构,与 TUN 模式的结构类似,但各节点并不是分散在各个地方,而是与调度器位于同一个物理网络,负载调度器与各节点服务器通过本地网络连接,不需要建立专用的 IP 隧道。它是最常用的工作模式,因为它的功能性强大。

2.1、DR 实现原理
-
当客户端用户发送请求给 www.baidu.com 网站时,首先经过 DNS 解析到 IP 后并向百度服务器发送请求,数据包经过网络到百度 LVS 负载均衡服务器。
-
这时到达 LVS 网卡时的数据包包括:源 IP 地址(客户端地址)、目的 IP 地址(百度对外服务器 IP 地址,也就是 VIP)、源 MAC 地址(CMAC / LVS 连接路由器的 MAC 地址)、目标 MAC 地址(VMAC / VIP 对应的 MAC 地址)。
-
数据包到达网卡后,经过链路层到达 PREROUTING 链,进行查找路由,发现目的 IP 是 LVS 的 VIP,这时就会发送至 INPUT 链中并且数据包的 IP 地址、MAC 地址、Port 都未经过修改。
-
数据包到达 INPUT 链中,LVS 会根据目的 IP 和 Port(端口)确认是否为 LVS 定义的服务。
-
如是定义过的 VIP 服务,会根据配置的服务信息,从 RealServer 中选择一个后端服务器 RS1,然后 RS1 作为目标出方向的路由,确定下一跳信息及数据包通过具体的哪个网卡发出,最好将数据包通过 INET_HOOK 到 OUTPUT 链中。
-
数据包通过 POSTROUTING 链后,目的 MAC 地址将会修改为 RealServer 服务器 MAC 地址(RMAC)源 MAC 地址修改为 LVS 与 RS 同网段的 IP 地址的 MAC 地址(DMAC)此时,数据包将会发至 RealServer 服务器。
-
数据包到达 RealServer 服务器后,发现请求报文的 MAC 地址是自己的网卡 MAC 地址,将会接受此报文,待处理完成之后,将响应报文通过 lo 接口传送给 eth0 网卡然后向外发出。
-
此时的源 IP 地址为 VIP,目标 IP 为 CIP,源 MAC 地址为 RS1 的 RMAC,目的 MAC 地址为下一跳路由器的 MAC 地址(CMAC),最终数据包通过 RS 相连的路由器转发给客户端。
2.2、DR 模式的优点
-
响应数据不经过 LVS,性能高。
-
对数据包修改小,信息完整性好。
2.3、DR 模式的缺点
-
LVS 与 RS 必须在同一个物理网络。
-
RS 上必须配置 lo 和其他内核参数。
-
不支持端口映射。
2.4、DR 模式的使用场景
对性能要求高的,可首选 DR 模式,还可透传客户端源 IP 地址。
实战案例
所有主机在同一网段下
准备三台主机,其中两台主机作为真实服务器(ip分别为192.168.100.1和192.168.100.2),一台主机作为LVS调度器(ip为192.168.100.100)
1、LVS调度器配置
####192.168.100.100 ##安装ipvsadm [root@localhost ~]# yum insatll -y ipvsadm ##加载ip_vs模块 [root@localhost ~]# modprobe ip_vs [root@localhost ~]# lsmod | grep ip_vs ip_vs 229376 0 nf_conntrack 212992 1 ip_vs nf_defrag_ipv6 24576 2 nf_conntrack,ip_vs libcrc32c 12288 2 nf_conntrack,ip_vs ##修改主机名 [root@localhost ~]# hostnamectl set-hostname lvs [root@localhost ~]# bash Welcome to 6.6.0-79.0.0.84.oe2403sp1.x86_64 System information as of time: 2025年 07月 12日 星期六 21:07:49 CST System load: 0.00 Memory used: 8.1% Swap used: 0% Usage On: 5% IP address: 192.168.100.100 IP address: 192.168.58.180 Users online: 2 [root@lvs ~]# vim /etc/sysctl.conf ##加入这条内容 net.ipv4.conf.ens160.send_redirects = 0 [root@lvs ~]# sysctl -p kernel.sysrq = 0 net.ipv4.conf.ens160.send_redirects = 0 net.ipv4.ip_forward = 0 net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.send_redirects = 0 net.ipv4.conf.all.accept_source_route = 0 net.ipv4.conf.default.accept_source_route = 0 net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.default.accept_redirects = 0 net.ipv4.conf.all.secure_redirects = 0 net.ipv4.conf.default.secure_redirects = 0 net.ipv4.icmp_echo_ignore_broadcasts = 1 net.ipv4.icmp_ignore_bogus_error_responses = 1 net.ipv4.conf.all.rp_filter = 1 net.ipv4.conf.default.rp_filter = 1 net.ipv4.tcp_syncookies = 1 kernel.dmesg_restrict = 1 net.ipv6.conf.all.accept_redirects = 0 net.ipv6.conf.default.accept_redirects = 0 [root@lvs ~]# ip a 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 noprefixroute valid_lft forever preferred_lft forever 2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 00:0c:29:16:2b:5c brd ff:ff:ff:ff:ff:ff inet 192.168.100.100/24 brd 192.168.100.255 scope global noprefixroute ens160 valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:fe16:2b5c/64 scope link noprefixroute valid_lft forever preferred_lft forever ##配置虚拟IP地址 [root@lvs ~]# ifconfig ens160:0 192.168.100.101/24 [root@lvs ~]# ip a 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 noprefixroute valid_lft forever preferred_lft forever 2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 00:0c:29:16:2b:5c brd ff:ff:ff:ff:ff:ff inet 192.168.100.100/24 brd 192.168.100.255 scope global noprefixroute ens160 valid_lft forever preferred_lft forever inet 192.168.100.101/24 brd 192.168.100.255 scope global secondary ens160:0 valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:fe16:2b5c/64 scope link noprefixroute valid_lft forever preferred_lft forever ##启动ipvsadm服务 [root@lvs ~]# touch /etc/sysconfig/ipvsadm [root@lvs ~]# systemctl enable --now ipvsadm Created symlink /etc/systemd/system/multi-user.target.wants/ipvsadm.service → /usr/lib/systemd/system/ipvsadm.service. [root@lvs ~]# ipvsadm -Ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn ##配置添加虚拟服务节点为192.168.100.101:80,算法为轮询 [root@lvs ~]# ipvsadm -A -t 192.168.100.101:80 -s rr ##配置虚拟服务节点192.168.100.101:80指定真实服务器节点IP地址,默认直接路由模式 [root@lvs ~]# ipvsadm -a -t 192.168.100.101:80 -r 192.168.100.1:80 [root@lvs ~]# ipvsadm -a -t 192.168.100.101:80 -r 192.168.100.2:80 [root@lvs ~]# 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.100.101:80 rr -> 192.168.100.1:80 Route 1 0 0 -> 192.168.100.2:80 Route 1 0 0 ##保存策略 [root@lvs ~]# ipvsadm-save > /etc/sysconfig/ipvsadm [root@lvs ~]# cat /etc/sysconfig/ipvsadm -A -t lvs:http -s rr -a -t lvs:http -r 192.168.100.1:http -g -w 1 -a -t lvs:http -r 192.168.100.2:http -g -w 1
2、真实服务器配置
####192.168.100.1 ##修改主机名 [root@localhost ~]# hostnamectl set-hostname web1 [root@localhost ~]# bash [root@web1 ~]# yum insatll -y nginx [root@web1 ~]# systemctl start nginx [root@web1 ~]# echo web1 > /usr/share/nginx/html/index.html ##防止VIP在同一网络产生IP地址冲突 [root@web1 ~]# vim /etc/sysctl.conf ##在最后加入这段配置,防止ip冲突 net.ipv4.conf.all.arp_ignore=1 net.ipv4.conf.all.arp_announce=2 net.ipv4.conf.default.arp_ignore=1 net.ipv4.conf.default.arp_announce = 2 net.ipv4.conf.lo.arp_ignore = 1 net.ipv4.conf.lo.arp_announce=2 [root@web1 ~]# sysctl -p kernel.sysrq = 0 net.ipv4.ip_forward = 0 net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.send_redirects = 0 net.ipv4.conf.all.accept_source_route = 0 net.ipv4.conf.default.accept_source_route = 0 net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.default.accept_redirects = 0 net.ipv4.conf.all.secure_redirects = 0 net.ipv4.conf.default.secure_redirects = 0 net.ipv4.icmp_echo_ignore_broadcasts = 1 net.ipv4.icmp_ignore_bogus_error_responses = 1 net.ipv4.conf.all.rp_filter = 1 net.ipv4.conf.default.rp_filter = 1 net.ipv4.tcp_syncookies = 1 kernel.dmesg_restrict = 1 net.ipv6.conf.all.accept_redirects = 0 net.ipv6.conf.default.accept_redirects = 0 net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.all.arp_announce = 2 net.ipv4.conf.default.arp_ignore = 1 net.ipv4.conf.default.arp_announce = 2 net.ipv4.conf.lo.arp_ignore = 1 net.ipv4.conf.lo.arp_announce = 2 ##配置虚拟IP地址 [root@web1 ~]# ifconfig lo:0 192.168.100.101/32 [root@web1 ~]# ip a 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 inet 192.168.100.101/0 scope global lo:0 valid_lft forever preferred_lft forever inet6 ::1/128 scope host noprefixroute valid_lft forever preferred_lft forever 2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 00:0c:29:66:09:cd brd ff:ff:ff:ff:ff:ff inet 192.168.100.1/24 brd 192.168.100.255 scope global noprefixroute ens160 valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:fe66:9cd/64 scope link noprefixroute valid_lft forever preferred_lft forever ##添加回环路由 [root@web1 ~]# route add -host 192.168.100.101/32 dev lo:0
####192.168.100.2 ##修改主机名 [root@localhost ~]# hostnamectl set-hostname web2 [root@localhost ~]# bash [root@web2 ~]# yum insatll -y nginx [root@web2 ~]# systemctl start nginx [root@web2 ~]# echo web2 > /usr/share/nginx/html/index.html ##防止VIP在同一网络产生IP地址冲突 [root@web2 ~]# vim /etc/sysctl.conf ##在最后加入这段配置,防止ip冲突 net.ipv4.conf.all.arp_ignore=1 net.ipv4.conf.all.arp_announce=2 net.ipv4.conf.default.arp_ignore=1 net.ipv4.conf.default.arp_announce = 2 net.ipv4.conf.lo.arp_ignore = 1 net.ipv4.conf.lo.arp_announce=2 [root@web2 ~]# sysctl -p kernel.sysrq = 0 net.ipv4.ip_forward = 0 net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.send_redirects = 0 net.ipv4.conf.all.accept_source_route = 0 net.ipv4.conf.default.accept_source_route = 0 net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.default.accept_redirects = 0 net.ipv4.conf.all.secure_redirects = 0 net.ipv4.conf.default.secure_redirects = 0 net.ipv4.icmp_echo_ignore_broadcasts = 1 net.ipv4.icmp_ignore_bogus_error_responses = 1 net.ipv4.conf.all.rp_filter = 1 net.ipv4.conf.default.rp_filter = 1 net.ipv4.tcp_syncookies = 1 kernel.dmesg_restrict = 1 net.ipv6.conf.all.accept_redirects = 0 net.ipv6.conf.default.accept_redirects = 0 net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.all.arp_announce = 2 net.ipv4.conf.default.arp_ignore = 1 net.ipv4.conf.default.arp_announce = 2 net.ipv4.conf.lo.arp_ignore = 1 net.ipv4.conf.lo.arp_announce = 2 ##配置虚拟IP地址 [root@web2 ~]# ifconfig lo:0 192.168.100.101/32 [root@web2 ~]# ip a 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 inet 192.168.100.101/0 scope global lo:0 valid_lft forever preferred_lft forever inet6 ::1/128 scope host noprefixroute valid_lft forever preferred_lft forever 2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 00:0c:29:66:09:cd brd ff:ff:ff:ff:ff:ff inet 192.168.100.2/24 brd 192.168.100.255 scope global noprefixroute ens160 valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:fe66:9cd/64 scope link noprefixroute valid_lft forever preferred_lft forever ##添加回环路由 [root@web2 ~]# route add -host 192.168.100.101/32 dev lo:0
3、验证
网站访问192.168.100.101


三、基于TUN的LVS负载均衡
IP 隧道:IP Tunnel,简称:TUN 模式,采用开放式的网络结构,负载调度器作为客户机的访问入口,各节点通过各自的 Internet 连接直接回应给客户机,而不经过负载调度器,服务器节点分散在互联网中的不同位置,有独立的公网 IP 地址,通过专用 IP 隧道与负载调度器相互通信。

3.1、实现原理
-
在原有的ip报文外在封装多一层的ip首部,内部ip首部(原地址为cip,目标ip为vip),外层ip首部原地址为dip,.目标地址为rip
-
客户端发送数据包经过网络后到 LVS 网卡,数据包源 IP 为 CIP,目的 IP 为 VIP。
-
进入 PREROUTING 链后,会根据目的 IP 去查找路由,确定是否为本机 IP,数据包将转发至 INPUT 链中,到 LVS,源 IP 和 目的 IP 不变。
-
到 LVS 后,通过目的 IP 和目的 PORT 查找是否为 IPVS 服务,如是 IPVS 服务,将会选择一个 RS 后端服务器, 源 IP 为 DIP,目标 IP 为 RIP,数据包将会转发至 OUTPUT 链中。
-
数据包根据路由信息到达 LVS 网卡,发送至路由器网关,最终到达后端服务器。
-
后端服务器收到数据包后,会拆掉最外层的 IP 地址后,会发现还有一层 IP 首部,源 IP 为 CIP,目的 IP 为 VIP,TUNL0 上配置 VIP,查找路由后判断为本机 IP 地址,将会发给用户空间层的应用程序响应后 VIP 为源 IP,CIP 为目的 IP 数据包发送至网卡,最终返回至客户端用户。
3.2、TUN 模式的优点
-
单臂模式,LVS 负载压力小。
-
数据包修改小,信息完整性高。
-
可跨机房。
3.3、TUN 模式的缺点
-
不支持端口映射。
-
需在 RS 后端服务器安装模块(ipip)及配置 VIP。
-
隧道头部 IP 地址固定,RS 后端服务器网卡可能会不均匀。
-
隧道头部的加入可能会导致分片,最终会影响服务器性能。
实战案例
1、LVS调度器配置
####192.168.100.100 #清空清除DR模式的策略 [root@lvs ~]# ipvsadm -C #加载隧道模块 [root@lvs ~]# modprobe ipip [root@lvs ~]# ip a 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 noprefixroute valid_lft forever preferred_lft forever 2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 00:0c:29:16:2b:5c brd ff:ff:ff:ff:ff:ff inet 192.168.100.100/24 brd 192.168.100.255 scope global noprefixroute ens160 valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:fe16:2b5c/64 scope link noprefixroute valid_lft forever preferred_lft forever 4: ens224: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 00:0c:29:16:2b:66 brd ff:ff:ff:ff:ff:ff 8: tunl0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1000 link/ipip 0.0.0.0 brd 0.0.0.0 [root@lvs ~]# ip route 192.168.100.0/24 dev ens160 proto kernel scope link src 192.168.100.100 metric 102 #添加ip临时添加 [root@lvs ~]# ip addr add 192.168.100.101/24 dev tunl0 #使网卡生效 [root@lvs ~]# ip link set up tunl0 #删除tunl0路由,否则同网段两个相同路由,会导致冲突,无法向外访问 [root@lvs ~]# ip route del 192.168.100.0/24 dev tunl0 #设置轮询调度 [root@lvs ~]# ipvsadm -A -t 192.168.100.101:80 -s rr #-i表示隧道模式,指向真实的web服务器 [root@lvs ~]# ipvsadm -a -t 192.168.100.101:80 -r 192.168.100.1:80 -i [root@lvs ~]# ipvsadm -a -t 192.168.100.101:80 -r 192.168.100.2:80 -i #查看配置的策略 [root@lvs ~]# 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.100.101:80 rr -> 192.168.100.1:80 Tunnel 1 0 0 -> 192.168.100.2:80 Tunnel 1 1 0
2、真实服务器web2配置
####192.168.100.1 #加载隧道模块 [root@web1 ~]# modprobe ipip [root@web1 ~]# ip a 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 proto kernel_lo valid_lft forever preferred_lft forever 2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 00:0c:29:66:09:cd brd ff:ff:ff:ff:ff:ff inet 192.168.100.1/24 brd 192.168.100.255 scope global noprefixroute ens160 valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:fe66:9cd/64 scope link noprefixroute valid_lft forever preferred_lft forever 6: tunl0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1000 link/ipip 0.0.0.0 brd 0.0.0.0 [root@web1 ~]# ip route default via 192.168.100.100 dev ens160 proto static metric 100 127.0.0.0/8 dev lo proto kernel scope link src 127.0.0.1 metric 30 192.168.100.0/24 dev ens160 proto kernel scope link src 192.168.100.1 metric 100 #添加ip临时添加 [root@web1 ~]# ip addr add 192.168.100.101/24 dev tunl0 #使网卡生效 [root@web1 ~]# ip link set up tunl0 #删除tunl0路由,否则同网段两个相同路由,会导致冲突,无法向外访问 [root@web1 ~]# ip route del 192.168.100.0/24 dev tunl0 #开启路由转发功能,过滤规则 [root@web1 ~]# vim /etc/sysctl.conf #在最后加上以下内容 net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.all.arp_announce = 2 net.ipv4.conf.all.arp_filter = 0 net.ipv4.conf.all.rp_filter = 0 net.ipv4.conf.default.arp_filter = 0 net.ipv4.conf.default.rp_filter = 0 net.ipv4.conf.ens160.arp_filter = 0 net.ipv4.conf.ens160.rp_filter = 0 net.ipv4.conf.lo.arp_filter = 0 net.ipv4.conf.lo.rp_filter = 0 net.ipv4.conf.tunl0.arp_filter = 0 net.ipv4.conf.tunl0.rp_filter = 0 [root@web1 ~]# sysctl -p #查看配置的网页内容 [root@web1 ~]# cat /usr/share/nginx/html/index.html web1
3、真实服务器web2配置
与真实服务器web1同理配置
[root@web2 ~]# ipvsadm -C [root@web2 ~]# modprobe ipip [root@web2 ~]# ip a 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 noprefixroute valid_lft forever preferred_lft forever 2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 00:0c:29:80:88:5d brd ff:ff:ff:ff:ff:ff inet 192.168.100.2/24 brd 192.168.100.255 scope global noprefixroute ens160 valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:fe80:885d/64 scope link noprefixroute valid_lft forever preferred_lft forever 3: ens224: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 00:0c:29:80:88:67 brd ff:ff:ff:ff:ff:ff 4: tunl0@NONE: <NOARP,UP,LOWER_UP> mtu 1480 qdisc noqueue state UNKNOWN group default qlen 1000 link/ipip 0.0.0.0 brd 0.0.0.0 inet 192.168.100.101/24 scope global tunl0 valid_lft forever preferred_lft forever [root@web2 ~]# ip rotue [root@web2 ~]# ip addr add 192.168.100.101/24 dev tunl0 [root@web2 ~]# ip link set up tunl0 [root@web2 ~]# ip route del 192.168.100.0/24 dev tunl0 [root@web2 ~]# sysctl -p [root@web2 ~]# cat /usr/share/nginx/html/index.html web2
4、验证
网站访问192.168.100.101


4189

被折叠的 条评论
为什么被折叠?



