标签:不同 完成 web测试 规划 ip首部 png httpd服务 配置 lin
DR模型示意图Director配置dip和vip, Real Server配置vip和rip
用户请求达到时我们期望VIP响应时只能是Director的vip响应,用户请求时请求的目标地址是VIP的地址,所以报文请求是送给Director 的,只有将请求报文发往Director Server,才能实现负载均衡效果,然后通过Director的ipvsadm配置的规则转发给其他RS,但这里是由问题的,因为我们也在Real Server配置vip地址,这样ARP广播请求时,Real Server也会响应,所以这里就要解决不用给Real Server响应ARP广播请求时。
请求报文格式为,当报文送到Director时,是不会动IP和TCP首部的,会拆除帧首部,拆除帧首部,是因为报文的目的地就是当前主机Director,然后查看IP和TCP首部,发现访问的是一个集群服务,为了实现LVS的DR模型效果,会在原有的IP首部之上封装了一个帧首部,这个帧首部由源MAC和目标MAC组成,而源MAC DR(Director)的MAC地址,目标MAC为RS(Real Server)的MAC地址,目标的RS是通过Director配置的负载均衡算法找出来的,当找出要转发到那个RS后,要找出这个RS的IP地址对应得MAC地址,这个通过ARP解析来查找,这样报文就找到从那个RS请求数据了。
1、DR模式的工作过程
第一步:用户对一个网站进行数据请求时,在浏览器输入网站域名,请求会被发送到DNS服务器进行域名解析,DNS服务器将域名解析成IP地址发送给客户端。
第二步:客户端拿到IP后通过网络访问该IP会到达IP所在地址的路由器,路由器将请求转发到内网中的交换机(内网的所有节点都在交换机上连接),由于此时请求的目标IP和目标mac都是DR的,所以该请求只能被DR接收,
第三步:DR接收到请求之后会在原有的IP首部之上重新进行封装一个帧首部,原来的IP首部不变, 这个帧首部由源MAC和目标MAC组成,而源MAC为DR的MAC地址,目标MAC为RS的MAC地址;
通过ipvsadm预先定义好的算法找出一个RS,当找出RS后,再找出这个RS的IP地址对应得MAC地址;将请求报文的目标mac改为找出的那个RS的mac最后将这个修改了mac地址的请求报文发送出去
第四步:因为这是内部网络,所有节点都会收到这个请求数据包后端的RS服务器判断收到的数据中的目标IP和目标mac是否与自己的相同,相同的会处理该数据包,不相同的自动丢弃 处理完成后,RS服务器会将结果通过交换机、路由器直接发送给客户端,不在经过DR
补充:
为了让DR和RS可以接受请求,就必须要使DR和所有的RS服务器有相同的IP,这个IP就是VIP(VirtualIP),为了防止引起IP冲突我们需要将VIP绑定在本地的网络回环接口之上(lo)
在所有多个节点都有一个相同的vip地址时,就会出现一个问题,客户端在请求获取mac地址的时候,就不可避免的出现arp争抢。
解决方法:
(1)、在路由器上绑定DR的IP和DR的MAC地址对应关系;
(2)、在RS服务器上设置arp抑制,即不让RS服务器对arp请求做应答,这样就保证了DR和RS服务器有相同VIP的情
况下客户端能准确获取DR的mac地址。
1)、在红帽系统系统中,使用arptables
(3)、kernel parameter,这里修改RealServer的的内核参数
----这个方法是通过修改系统内核参数来实现,正常都是使用这个方法来免的出现arp争抢
修改内核的arp_announce和arp_ignore参数
我们做arp抑制后就会出现另一个问题:
Linux有一种行为,报文从那个接口出去,它接尽可能的使用者接口的IP地址进行响应,如果这个接口地址和网关不在同一个网段内,它就使用这个接口的别名地址,也就是说这个接口必须有一个地址和网关在同一个网段,而我们的LVS的DR模型的地址要求都是在同一网段内,当我们设置VIP在lo上的时候,就会出现,在RS中不使用VIP做为源地址响应客户端请求,而客户端请求的是VIP,这样就会有问题了。
解决:设置一个独特的路由,使VIP作为源地址响应客户端请求
ARP请求:获取ip所对应的mac地址
DR模式总结:
调度器(DR)仅仅修改的目标的mac地址;
响应报文是直接发送给客户端,不在经过调度器;
RS和DR必须在容一个局域网中;
DR无法修改请求报文中的目标端口,所以RS的端口必须和DR端口一致;
DR和所有RS服务器都需要配置相同的VIP;
所有的RS服务器都需要配置ARP抑制;
RS服务器必须可以和外网通信;
DR模式效率相对高,配置复杂,所以如果访问量小(pv<2000),建议用更简单的nginx haproxy。
开始配置测试LVS 的DR模型:----测试web服务的负载均衡功能:
一、实验环境:
使用VMware Workstattion来创建虚拟机做实验,创建3台虚拟机并安装系统,实验Centos7系统。
虚拟机网卡使用桥接模式,单网卡。
1、虚拟机配置如下:
2、网络拓扑及地址规划
图中VIP地址没有标注出来,Diretor和RealServer的VIP地址都设置为同一地址172.16.100.10/32
(1)、Diretor和RealServer虚拟机连接到模拟器的配置如下(Vlient-PC的配置类似):
(2)、Client-PC虚拟机连接到模拟器的配置
二、网络部分配置:
1、在交换机SW创建VLAN10 和VLAN20 ,并把接口加入VLAN中,配置VLAN虚接口地址:
划分VLAN和配置VLAN虚接口地址:
[SW1] vlan batch 10 20
[SW1] interface Vlanif 10
[SW1-Vlanif10] ip address 172.16.100.254 255.255.255.0
[SW1] interface Vlanif 20
[SW1-Vlanif20] ip address 100.1.1.2 255.255.255.0
配置把接口加入VLAN中:
[SW1]interface GigabitEthernet0/0/1
[SW1-GigabitEthernet0/0/1] interface GigabitEthernet0/0/1
[SW1-GigabitEthernet0/0/1] port link-type access
[SW1-GigabitEthernet0/0/1] port default vlan 10
其他接口配置类似(略)
2、配置AR1路由器的地址:如下:
[AR1]interface GigabitEthernet0/0/0
[AR1-GigabitEthernet0/0/0]ip address 100.1.1.1 255.255.255.0
[AR1-GigabitEthernet0/0/0]quit
[AR1]interface GigabitEthernet0/0/1
[AR1-GigabitEthernet0/0/1]ip address 192.168.10.254 255.255.255.0
3、配置静态路由(也可以通过配置动态路由解决路由问题):
[AR1] ip route-static 172.16.100.0 255.255.255.0 GigabitEthernet0/0/0 100.1.1.2
[SW1] ip route-static 192.168.10.0 255.255.255.0 Vlanif20 100.1.1.1
三、安装相关和配置地址
1、首先在Diretor和RealServer安装 httpd和ipvsadm,安装如下:
]# yum install httpd ipvsadm -y
2、 配置Diretor和RealServer主机地址,配置如下:
Real Server2的地址配置
3、测试网络
四、配置Diretor的VIP地址和配置RealServer的VIP:
1、配置Diretor的VIP地址
因为这个VIP地址仅作为调度器调度时使用,所以在配置VIP地址的时候将其掩码
设置为32位掩码,地址设置为172.16.100.10,在Diretor的物理网卡上配置别名,作为设置VIP地址,
设置广播地址为只广播给自己(可以不用配置),配置如下:
[root@DR ~]# ifconfig ens33:0 172.16.100.10/32 broadcast 172.16.100.10
DR的VIP设置后到RealServer上测试是否可通:
[root@RealServer1 ~]# ping 172.16.100.10
PING 172.16.100.10 (172.16.100.10) 56(84) bytes of data.
64 bytes from 172.16.100.10: icmp_seq=1 ttl=64 time=1.68 ms
64 bytes from 172.16.100.10: icmp_seq=2 ttl=64 time=1.42 ms
在Diretor上还需要配置路由,就是从那个接口出来的要从那个接口出去,这个Diretor不是必须配置:
[root@DR ~]# route add -host 172.16.100.10 dev ens33:0
2、配置RealServer:
1、首先修改RealServer的内核参数:
RealServer1:
[root@RealServer1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@RealServer1 ~]# echo 1 > /proc/sys/net/ipv4/conf/ens33/arp_ignore
[root@RealServer1 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@RealServer1 ~]# echo 2 > /proc/sys/net/ipv4/conf/ens33/arp_announce
RealServer2:
[root@RealServer2 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@RealServer2 ~]# echo 1 > /proc/sys/net/ipv4/conf/ens33/arp_ignore
[root@RealServer2 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@RealServer2 ~]# echo 2 > /proc/sys/net/ipv4/conf/ens33/arp_announce
2、配置RealServer的VIP地址,配置在lo的接口别名上:
设置为32位掩码,地址设置为172.16.100.10,在RealServer的lo网卡上配置别名,作为设置VIP地址,
设置广播地址为只广播给自己:
RealServer1:
[root@RealServer1 ~]# ifconfig lo:0 172.16.100.10/32 broadcast 172.16.100.10
在RealServer上还需要配置路由,就是从那个接口出来的要从那个接口出去,这在RealServer上必须配置:
[root@RealServer1 ~]# route add -host 172.16.100.10 dev lo:0
RealServer2:
[root@RealServer2 ~]# ifconfig lo:0 172.16.100.10/32 broadcast 172.16.100.10
在RealServer上还需要配置路由,就是从那个接口出来的要从那个接口出去,这在RealServer上必须配置:
[root@RealServer2 ~]# route add -host 172.16.100.10 dev lo:0
在RealServer中配web测试页面,为了能看到负载均衡效果,在两台RealServer中配置不同页面,如下:
[root@RealServer1 ~]# echo ‘RS1.hujn.com‘ > /var/www/html/index.html
[root@RealServer2 ~]# echo ‘RS2.hujn.com‘ > /var/www/html/index.html
然后在Diretor和RealServer中启动httpd服务:
# systemctl start httpd
五、lvs的修改配置:
1、配置添加集群服务,在DR(Director Server)上添加集群服务:
(1)、在DR(Director Server)上添加集群服务:
[root@DR ~]# ipvsadm -A -t 172.16.100.10:80 -s rr
(2)、在已经添加的集群服务中,添加(RS)Real Server,添加两台Real Server,如下:
[root@DR ~]# ipvsadm -a -t 172.16.100.10:80 -r 172.16.100.21 -g
[root@DR ~]# ipvsadm -a -t 172.16.100.10:80 -r 172.16.100.22 -g
(3)、查看添加结果:
2、使用浏览器打开web页面,然后刷新,看看是否会轮询显示,在两台RS上设置的两个web页面,
打开也使用的地址是使用VIP地址,即172.16.100.10这个地址,如下:
在Client-PC上访问:
第一次显示结果
刷新后,第二显示结果:
从测试中可知道,页面实现了负载的效果,即轮询访问了不同的服务器。
标签:不同 完成 web测试 规划 ip首部 png httpd服务 配置 lin
原文地址:https://blog.51cto.com/75368/2529312