LVS实战-IP隧道模式(即TUN模式)配置
LVS实战-IP隧道模式(即TUN模式)配置
教程每周二、四、六更新
Cloud研习社
为Linux云计算零基础同学服务,致力于打造一套完整的linux云计算教程。包括新手学习路线、linux、存储、集群架构以及Docker,K8S,DevOps等
公众号
首先,让我们看一下通过 IP 隧道的虚拟服务器的图。IP隧道模式与NAT模式最大的不同是IP隧道模式通过IP隧道向真实服务器发送请求,而NAT模式通过网络地址转换向真实服务器发送请求.
当用户访问服务器集群提供的服务时,一个发往VIP(虚拟IP地址)的数据包到达。负载均衡器(LVS服务器或叫DS服务器)检查数据包的目标地址和端口。如果它们与本机服务匹配,则根据连接调度算法从集群中选择一个真实服务器,并将连接添加到记录连接的哈希表中。然后,负载均衡器将数据包封装在 IP 数据报中,并将其转发到选定的服务器。当传入的数据包属于此连接并且可以在哈希表中找到所选服务器时,该数据包将再次封装并转发到该服务器。当服务器收到封装好的数据包后,解封装数据包并处理请求,最后根据自己的路由表将结果直接返回给用户。连接终止或超时后,连接记录将从哈希表中删除。我们还是用上一步准备的环境:hostname | IP |
---|---|
ds | 10.0.0.128(nat) |
rs01 | 10.0.0.62 |
rs02 | 10.0.0.63 |
vip | 10.0.0.201 |
# 所有机器关闭防火墙、关闭selinux(具体命令不再单独列出)
# LVS主机
[root@ds ~]# yum -y install ipvsadm
# RS主机,两个都要做
[root@rs01 ~]# yum -y install nginx
[root@rs01 ~]# echo rs01 > /usr/share/nginx/html/index.html # 修改第二台的时候注意把rs01改成rs02,以便区分
[root@rs01 ~]# systemctl start nginx
[root@rs01 ~]# curl 10.0.0.62
rs01
LVS(ds服务器)服务器配置:
# 给ens33添加ip
[root@ds ~]# ip a add 10.0.0.201/24 dev ens33
[root@ds ~]# ip a
......
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:a4:37:31 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.128/24 brd 10.0.0.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet 10.0.0.201/24 scope global secondary ens33
valid_lft forever preferred_lft forever
......
# 开启内核转发
[root@ds ~]# cat /etc/sysctl.conf
net.ipv4.ip_forward = 1
[root@ds ~]# sysctl -p
# 设置LVS转发策略
[root@ds ~]# ipvsadm -A -t 10.0.0.201:80 -s rr
[root@ds ~]# ipvsadm -a -t 10.0.0.201:80 -r 10.0.0.62 -i
[root@ds ~]# ipvsadm -a -t 10.0.0.201:80 -r 10.0.0.63 -i
在RS(真实服务器)服务上(两台都要做):# 加载隧道模块
[root@rs01 ~]# modprobe ipip
[root@rs01 ~]# ip a add 10.0.0.201/32 dev tunl0
[root@rs01 ~]# ip link set up tunl0
[root@rs01 ~]# ip a
......
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 10.0.0.201/32 scope global tunl0
valid_lft forever preferred_lft forever
# 关闭内核反向过滤功能
[root@rs01 ~]# cat /etc/sysctl.conf
net.ipv4.conf.default.rp_filter = 0 # 反向路由检查:Reverse Path Filter
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.tunl0.arp_ignore = 1
net.ipv4.conf.tunl0.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.tunl0.rp_filter = 0
[root@rs01 ~]# sysctl -p
客户端验证:[root@m01 ~]# curl 10.0.0.201
rs01
[root@m01 ~]# curl 10.0.0.201
rs02
注意:arp_ignore=1 表示对于网络上发来的arp广播包,realserver将会丢弃,因为如果做出应答,根据arp协议,相当于通告网络上其它主机VIP对应的Mac地址是realserver的Mac地址,而不是LB的Mac地址,这样客户端就会绕过lvs,直接与后端的realserver通信,负载调度就失去了意义。arp_announce=2 定义将自己的地址向外通告时的级别 。2表示仅向与本地接口上(ens33)地址匹配的网络进行通告
雷哥开通了抖音(云计算雷哥)和微信视频号,求关注!!!和大家一起学习 技术!
推荐阅读
《一站式教程之集群架构》:
看完本文有收获?请分享给更多人
推荐关注「Cloud研习社」,带你从零开始掌握云计算技术!
Cloud研习社
为Linux云计算零基础同学服务,致力于打造一套完整的linux云计算教程。包括新手学习路线、linux、存储、集群架构以及Docker,K8S,DevOps等
公众号
收录于合集 #一站式教程
259个上一篇LVS实战-NAT模式配置