前言:

    讲道理来说,我是不愿意弄出来一堆命令的,毕竟理论知识才是核心嘛。不过,lvs的部署倒是坑不少,所以都把实现过程记录下来了~

正文:

    lvs-nat的简单拓扑如下:

    lvs(Linux Virtual Server)浅析----------------lvs-nat和lvs-dr实现_第1张图片

    因为,此模式的核心是DNAT,所以调度器前端用来接收请求和与后端服务器通信就不在同一网段了。当请求从左端的客户端进来,调度器根据调度算法选择一台服务器,把请求的目的IP改成该服务器的地址,该服务器在通过调度器响应客户端。这就是大概的通信流程。具体的可以看上一篇博客,此篇我们主要来说配置。

    环境介绍:我们用172.16.53.100来当VIP, 192.168.157.128为DIP,192.168.157.129为第一台RS的RIP, 192.168.157.130为第二台RS的RIP。配置的重点有如下几个:

    1.我们的调度器因为用到了nat的网络地址转换,所以调度器得开核心转发

    2.因为RS得通过调度器来和外部的客户端通信,所以RS的网关就是DIP

    3.因为lvs工作在input链(不知道是什么的可以去学学iptables理论知识~)上,所以为了方式iptables的干扰,就直接清空iptables了。

    4.各个服务器之间要时间同步。

    话不多说,nat模式还是比较简单的,所以我们直接来配置把。我们先在两个RS上开启web服务。并设置不同的主页以用来测试。两个RS配置基本一致,我就只写一遍咯,不同的地方会指出。

    

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#RS
yum  install  httpd -y
vim  /var/www/html/index .html
     192.168.157.129    #另一台设置为192.168.157.130,方便测试的区别
systemctl start httpd
route add default gw 192.168.157.128         #一定要记得网关指向DIP哟。
iptables -F (或者允许80端口进入就可)
#VS
yum  install  -y ipvsadm
echo  1 >  /proc/sys/net/ipv4/ip_forward           #开启转发功能
ipvsadm -A -t 172.16.53.100:80 -s rr    #新建一个集群服务,VIP为172.16.53.100,rr表示轮询
ipvsadm -a -t 172.16.53.100:80 -r 192.168.157.129:80 -m   
ipvsadm -a -t 172.16.53.100:80 -r 192.168.157.130:80 -m    #增加两个个RS -m表示nat模式
iptables -F                                               #记得清空防火墙规则
curl 172.16.53.100          #测试lvs功能。

    提一下博主遇到的一些坑。首先VIP得能访问到后端的web服务,如果不能,可能是80端口没开放,web服务没开启,一定要记得在RS上指定网关为DIP,一定要记得在VS上开启核心转发。一定要记得情况VS上的防火墙规则,还有要保证测试环境的干净,比如RS最好只有一个网卡。博主每次做完实验都会把测试系统还原到最原始的状态。接下来我们实现稍微复杂的lvs-dr。

    lvs-dr模式实现的环境结构图如下:

    lvs(Linux Virtual Server)浅析----------------lvs-nat和lvs-dr实现_第2张图片

    RS和VS都在同一个网络中,DIP的ip地址为172.16.53.100,RS1的RIP为172.16.53.101,RS2的RIP为 172.16.53.102.模仿用户的测试客户机的ip地址为172.16.53.103.

    dr中要注意的是,VS上vip和dip在同一个接口上,RS上RIP在物理接口上,VIP在lo上,然后为了方式RS上的VIP通告自己的MAC地址,或者响应arp,我们得修改内核参数来关闭这两个功能。RS配置基本一样,配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#RS
yum  install  httpd -y
vim  /var/www/html/index .html
     172.16.53.101    #另一台设置为172.16.53.102,方便测试的区别
systemctl start httpd
echo  1 >  /proc/sys/net/ipv4/conf/all/arp_ignore
echo  1 >  /proc/sys/net/ipv4/conf/lo/arp_ignore
echo  2 >  /proc/sys/net/ipv4/conf/all/arp_announce
echo  2 >  /proc/sys/net/ipv4/conf/lo/arp_announce
ifconfig  lo:0 172.16.53.50 netmask 255.255.255.255 broadcast 172.16.53.50 up
     #在lo环回口上设置vip地址。
route add -host 172.16.53.50 dev lo:0     #指定主机路由,让以vip为源地址的数据包从lo:0发出#VS
yum  install  ipvsadm -y
ifconfig  eno16777736:0 172.16.53.50 netmask 255.255.255.255 broadcast 172.16.53.50 up
在DIP所在的接口上加一个VIP
iptables -F    #记得清空防火墙规则
ipvsadm -A -t 172.16.53.50:80 -s rr    #新增一个集群,rr表示调度方法为轮询
ipvsadm -a -t 172.16.53.50:80 -r 172.16.53.101 -g     # -g表示为lvs-dr模式
ipvsadm -a -t 172.16.53.50:80 -r 172.16.53.102 -g
#测试机 
curl 172.16.53.50    
     ###################注意!!!!!一定要在另外一台机器上测试!!!!这个坑我已经踩了好多次了!!!!!!!!!!!!!真的是坑!!!!!!!

    好啦,到此配置就结束了~有木有很简单呢~