LVS之我见


 

lvs第一种工作模型 NAT 原理图如下:

wKiom1QKqqzyxcOvAAGVA72UUV0899.jpg


 

首先客户端发送请求报文当报文到达Director后,Director将请求按照指定的调度算法,从后端挑选一个服务器进行响应,所用到的方法是将目标IP地址改写为一个后端真正服务器的IP地址,并用一定的方法记录下来此次的转发记录。当后端服务器处理完请求后,发送相应报文,送至Director此时根据事先的记录将相应报文改写源地址,并将其发送至客户端。


因此NAT模型的特性:


1R-server应当使用私有地址网关必须指向Director的地址DIP,一方面可以达到隐藏真实服务器的目的,提高安全性,另一方面降低成本


2,请求和响应都会经过Director,在高负载场景下Director容易成为整个系统的性能瓶颈


3,支持端口映射


4R-server可以是任意类型的OS


实验拓扑如下:


wKioL1QKqt3BxJuVAAEiGLbLt48701.jpg

首先打开Dirctor转发功能


[root@www ~]# echo "1" > /proc/sys/net/ipv4/ip_forward 


[root@www ~]# cat !$


cat /proc/sys/net/ipv4/ip_forward


1


配置Dirctor IP地址


[root@www ~]# ifconfig eth0 172.16.101.34


[root@www ~]# ifconfig eth1 10.0.0.1


查看


[root@www ~]# ifconfig


eth0      Link encap:Ethernet  HWaddr 08:00:27:0F:E9:CF  


          inet addr:172.16.101.34  Bcast:172.16.255.255  Mask:255.255.0.0


          inet6 addr: fe80::a00:27ff:fe0f:e9cf/64 Scope:Link


          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1


          RX packets:334 errors:0 dropped:0 overruns:0 frame:0


          TX packets:199 errors:0 dropped:0 overruns:0 carrier:0


          collisions:0 txqueuelen:1000 


          RX bytes:29569 (28.8 KiB)  TX bytes:21519 (21.0 KiB)


 

eth1      Link encap:Ethernet  HWaddr 08:00:27:79:86:58  


          inet addr:10.0.0.1  Bcast:10.255.255.255  Mask:255.0.0.0


          inet6 addr: fe80::a00:27ff:fe79:8658/64 Scope:Link


          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1


          RX packets:0 errors:0 dropped:0 overruns:0 frame:0


          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0


          collisions:0 txqueuelen:1000 


          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)



配置lvs


wKiom1QKqv_wQCQlAAHJPBqim-w806.jpg

配置server1


wKioL1QKqy6DXgztAAHg1OzmLPU884.jpg

安装LAMP,在此不再赘述


为了测试方便设置主页文件


vim /var/www/html/index.html


server1





配置server2


wKiom1QKsVjBQttfAAGJT2eBRVA924.jpg

同样安装LAMP


为了测试方便设置主页文件


vim /var/www/html/index.html


server2


客户端测试


wKiom1QKq6KT2MxWAACynUcQ1Ag790.jpg

wKioL1QKq6migJnGAACkHOEUdTc922.jpg


查看Dirctor连接状态


ipvsadm -l  -n  -c


wKiom1QKq8jCTu0dAAKLN_9K9qo879.jpg

lvs 第二种模型DR


wKioL1QKq_Oi4sHLAAHaJPpMqSI030.jpg

客户端请求到达Dirctor后,调度器仅仅修改MAC地址为后端的r-server,基于arp协议请求会被发送至后端的服务器,注意此时的真实服务器上的网卡上配置的ip地址为和DIp一个物理网段的地址因此可以基于mac进行通信。但是会有一个问题那就是为了保持回的响应的源IPVIP那么就要在r-server上配置VIP才行,这样就会造成一个问题,就是同一个网段上会出现3个主机都会使用VIP怎样才能保证请求会被发送至Director上呢。这就需要在r-server上调整两个内核参数


arp_ignore=1


apr_announce=2


到底这两个参数是什么含义请看下图


wKiom1QKrBnw82CSAACeiPW2mzA925.jpg

这两个参数是用来定义linux系统是如何来响应(apr_ignore)和通告(apr_announceMAC地址的。默认情况下apr_ignore的值为零他表示的含义是只要网络中有arp请求的广播假设是从eth0所在的网络来的arp请求那么eth0这时会毫无保留的将此主机的所有的网卡的MAC地址统统都予以回应也就是说,此次请求的到三个网卡的MAC,但是当此选项的值设为1时那么,eth0仅仅告诉对方自己的MAC地址其他两块网卡的MAC对方是不会知道的。而apr_annouce的作用是:就算没有arp请求到来 网卡也会自己向网络中通告这台主机的MAC地址只不过值为0时,通告此台主机所有网卡的MAc地址,而当此选项为2时仅仅通告自己的MAC地址。也就是说这两个选项的值设置是用来告诉eth0只管好自己的事就行,不要多管闲事。。


所以此时将VIP设置在lo0上就不会被得知它上面也有此地址了,达到隐藏的目的,但是当Director将请求转发到R-server上时拆开数据包看到目标地址是VIP而自己的主机上就有这个地址,就予以接受处理请求。


实验拓扑如下,并且此次会以共享NFS共享存储的方式安装Discuz论坛程序并且实现lvs会话保持的功能:


wKiom1QKrDWTzfTnAAJGdm91tWM605.jpg

首先配置Director


wKiom1QKrFOwPaxoAAIh6It8Tes234.jpg

配置server1


wKioL1QKrkCTC0IJAAGh4oR0Nkw037.jpg

配置server2


wKiom1QKrl7CYRsTAAG3cIVLFxU028.jpg

准备数据库服务器


安装就不再赘述


wKioL1QKrpjjazyGAAGR-Dn94VU929.jpg


server1创建nfs服务器


vim /etc/exports


/var/www/html 172.16.101.37(rw,no_root_squash)


启动服务


wKioL1QKrr6Cl4D4AAFS71PI6qQ364.jpg

 

server2挂载此目录到相应目录


 wKioL1QKrujRgyTQAAHNRd7gPVs817.jpg



discuz上传到server1/var/www/html


然后客户端浏览器启动安装


wKiom1QKrwnwov56AAOyQvfmz4s758.jpg

过程不再赘述


wKioL1QKryzCQfM8AAJ-bFDvbF8893.jpg


安装成功


wKioL1QKr03CVW5wAANolHoiL0Q639.jpg


注册后输入密码登录同一主机会话不会丢失如何刷新都会转发至172.16.101.36


wKioL1QKr3KQr9anAAWXVijRSaA518.jpg


现在更换客户端ip地址


wKiom1QKr4rTGdpwAAW0Q9_xkRw747.jpg


lvs第三种模型tun很少用到这里不再详述 只不过是在转发时将ip报文再封装一层ip首部在发送。