标签:lvs dr nat arp_ignore arp_announce
LVS之我见
lvs第一种工作模型 NAT 原理图如下:
首先客户端发送请求报文当报文到达Director后,Director将请求按照指定的调度算法,从后端挑选一个服务器进行响应,所用到的方法是将目标IP地址改写为一个后端真正服务器的IP地址,并用一定的方法记录下来此次的转发记录。当后端服务器处理完请求后,发送相应报文,送至Director此时根据事先的记录将相应报文改写源地址,并将其发送至客户端。
因此NAT模型的特性:
1,R-server应当使用私有地址网关必须指向Director的地址DIP,一方面可以达到隐藏真实服务器的目的,提高安全性,另一方面降低成本
2,请求和响应都会经过Director,在高负载场景下Director容易成为整个系统的性能瓶颈
3,支持端口映射
4,R-server可以是任意类型的OS
实验拓扑如下:
首先打开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
配置server1
安装LAMP,在此不再赘述
为了测试方便设置主页文件
vim /var/www/html/index.html
server1
配置server2
同样安装LAMP
为了测试方便设置主页文件
vim /var/www/html/index.html
server2
客户端测试
查看Dirctor连接状态
ipvsadm -l -n -c
lvs 第二种模型DR
客户端请求到达Dirctor后,调度器仅仅修改MAC地址为后端的r-server,基于arp协议请求会被发送至后端的服务器,注意此时的真实服务器上的网卡上配置的ip地址为和DIp一个物理网段的地址因此可以基于mac进行通信。但是会有一个问题那就是为了保持回的响应的源IP为VIP那么就要在r-server上配置VIP才行,这样就会造成一个问题,就是同一个网段上会出现3个主机都会使用VIP怎样才能保证请求会被发送至Director上呢。这就需要在r-server上调整两个内核参数
arp_ignore=1
apr_announce=2
到底这两个参数是什么含义请看下图
这两个参数是用来定义linux系统是如何来响应(apr_ignore)和通告(apr_announce)MAC地址的。默认情况下apr_ignore的值为零他表示的含义是只要网络中有arp请求的广播假设是从eth0所在的网络来的arp请求那么eth0这时会毫无保留的将此主机的所有的网卡的MAC地址统统都予以回应也就是说,此次请求的到三个网卡的MAC,但是当此选项的值设为1时那么,eth0仅仅告诉对方自己的MAC地址其他两块网卡的MAC对方是不会知道的。而apr_annouce的作用是:就算没有arp请求到来 网卡也会自己向网络中通告这台主机的MAC地址只不过值为0时,通告此台主机所有网卡的MAc地址,而当此选项为2时仅仅通告自己的MAC地址。也就是说这两个选项的值设置是用来告诉eth0只管好自己的事就行,不要多管闲事。。
所以此时将VIP设置在lo:0上就不会被得知它上面也有此地址了,达到隐藏的目的,但是当Director将请求转发到R-server上时拆开数据包看到目标地址是VIP而自己的主机上就有这个地址,就予以接受处理请求。
实验拓扑如下,并且此次会以共享NFS共享存储的方式安装Discuz论坛程序并且实现lvs会话保持的功能:
首先配置Director
配置server1
配置server2
准备数据库服务器
安装就不再赘述
在server1创建nfs服务器
vim /etc/exports
/var/www/html 172.16.101.37(rw,no_root_squash)
启动服务
server2挂载此目录到相应目录
将discuz上传到server1的/var/www/html
然后客户端浏览器启动安装
过程不再赘述
安装成功
注册后输入密码登录同一主机会话不会丢失如何刷新都会转发至172.16.101.36
现在更换客户端ip地址
lvs第三种模型tun很少用到这里不再详述 只不过是在转发时将ip报文再封装一层ip首部在发送。
标签:lvs dr nat arp_ignore arp_announce
原文地址:http://centod.blog.51cto.com/9108378/1549641