lvs-dr模型 : 直接路由
Director在实现转发时不修改请求报文的IP首部,而是通过直接封装MAC首部来完成转发,目标MAC是Director根据调度方法挑选出的某RS的MAC地址
拓扑结构有别于NAT类型
架构特性:
(1) 保证前端路由器将目标地址为VIP的请求报文通过ARP地址解析后送往Director
解决方案:
1、静态绑定:在前端路由直接将VIP对应的目标MAC静态配置为Director的MAC地址,不靠谱也不常用
2、arptables:在各RS上,通过arptables规则拒绝其响应对VIP的ARP广播请求
3、内核参数:在RS上修改内核参数,并结合地址的配置方式实现拒绝响应VIP对ARP的响应请求
(2) RS的RIP可以使用私有地址,但也可以使用公网地址,此时可通过互联网上的主机直接对此RS发起管理操作
(3) 请求报文必须经由Director调度,但响应报文必须不能经由Director
(4) 各RIP必须与DIP在同一物理网络中,就是不能通过路由器转发否则会被修改MAC地址,可以通过交换机交换
(5) 不支持端口映射
(6) RS可以使用大多数的OS
(7) RS的网关一定不能指向Director
我们使用LVS配置,不懂的可以先看另一篇博客LVS基础 http://kmk0226.blog.51cto.com/5975994/1717592
架设DR模式的LVS负载均衡主要的思路就是VIP只能Directory上能够响应,RS上的VIP只能发送。
因此我们要先根据自己需要架设的服务拓扑图来规划IP地址以及测试。
1、根据上面的拓扑图先规划IP地址
注意:DR模式与NAT模式不同,DR模式所有的IP地址都为公网地址并不是私有地址。
VIP:192.168.100.2
VIP为公网地址,因此这个地址需要能连通外部网络的。
DIP:192.168.100.3
DIP是公网地址
RIP:192.168.100.4-6
RIP为Real server的IP地址,拓扑图的三台服务器依次设置IP地址从4到6
2、设置完成IP地址架设网络以及对ARP广播做限制,最后进行测试是否连通。
先配置各个服务器的IP地址:
(注意:本次IP地址配置是命令方式的并不能永久生效,如果需要永久生效的话要在配置文件中配置具体,本章不做描述,如果需要请留言)
(1) Directory:
DIP: ifconfig eth0 192.168.100.3 netmask 255.255.255.0 up
VIP:ifconfig eth0:0 192.168.100.2 netmask 255.255.255.255 broadcast 192.168.100.2 up
由于vip只是用于标记用的,所以掩码设置为32位的, 并且设置广播域的范围只有192.168.100.2
route add -host 192.168.100.2 dev eth0:0
如果主机的目标地址是192.168.100.2这个VIP就必须从eth0:0这个端口进出
开启nat转发功能
vim /etc/sysctl.conf
修改net.ipv4.if_forward = 1
1为打开,0为关闭
sysctl -p : 让修改的配置立即生效
(2) Real Server:
RIP: ifconfig eth0 192.168.100.4 netmask 255.255.255.0 up
VIP: ifconfig lo:0 192.168.100.2 netmask 255.255.255.255 broadcast 192.168.100.2 up
DR模型中在RS中的VIP是放在本地端口的,不对外通信的,只做帧首部用,具体原因请学习网络基础。
RS还需要设置ARP限制,否则就算本地端口也会将自己的IP地址与外部通信。
route add -host 192.168.100.2 dev lo:0
如果主机的目标地址是192.168.100.2这个VIP就必须从lo:0这个端口进出
2.4.26,2.6.4 kernael引入两个内核参数:
arp_announce: 定义arp限制通告级别
arp_ignore: 定义arp忽略arp请求级别或aro通告的级别
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
另外两台RS也做同样的操作,不过RIP需要修改成192.168.100.5和192.168.100.6
(3) 全部设置完之后测试各个IP地址之间是否能够正常通信,使用ping工具
在每个主机上都ping一下其他主机的IP地址
3、测试需要架设的服务是否能够在Directory上正常访问
本次以http为例,在各个RS上安装完http之后,在Directory使用curl http://192.168.100.4测试是否正常
测试完成之后就可以配置集群了。
LVS集群配置在Directory上配置:
ipvsadm -A -t 192.168.100.2:80 -s rr //设置VIP为访问集群时候的IP地址,端口号为80,-s 代表使用自定义集群访问模式,rr为轮询,代表每个服务器都会轮换着访问 ipvsadm -a -t 192.168.100.2:80 -r 192.168.100.4 -g -w 1 //设置192.168.100.4为一个RS服务器,-g代表是开启DR模式, -w为权重,1为权重为1 ipvsadm -a -t 192.168.100.2:80 -r 192.168.100.5 -g -w 2 //设置192.168.100.5为一个RS服务器,-g代表是开启DR模式, -w为权重,2为权重为2 ipvsadm -a -t 192.168.100.2:80 -r 192.168.100.6 -g -w 3 //设置192.168.100.6为一个RS服务器,-g代表是开启DR模式, -w为权重,3为权重为3 注意:权重越大代表被访问到的几率越大,不过为RR轮询的时候是无效的。
配置完Directory之后集群的配置就已经配置完成了。
测试集群是否可以正常访问:
1、实验环境中先确保iptables防火墙为关闭状态
2、实验环境中确保selinux为关闭状态或警告状态
3、在RS服务器中建立http页面,页面内容最好是能区分每个主机的不通内容,例如:192.168.100.4这样一个IP地址的内容
4、在本地物理机直接访问VIP测试是否能够正常访问,并且是否是正常轮询访问的,如果都正常代表LVS集群已经架设完成
总结:
LVS负载均衡集群对网络要求较高,如果内部网络架设不完整或者不通都将会导致集群无法正常访问,重点只要所有IP地址都能ping通就能正常架设成功。