实验前准备
均已关闭防火墙
centos7:
systemctl stopfirewalld
centos6:
serviceiptables stop
均已禁用SELinux
setenforce 0
web1、web2准备apache服务
web1和web2:
yum installhttpd -y
web1:
echo192.168.142.132 >/var/www/html/index.html
service httpdstart
web2:
echo192.168.142.130 >/var/www/html/index.html
systemctlstart httpd
网络拓扑在VMware中配置网段
客户端
路由端
lvs server
web1同web2
一.实验环境介绍
web1为centos6.9
其余均为centos7.3
二.地址规划
如图所示:
VIP使用172.18.0.0/16网络
RIP使用192.168.142.0/24网络
1.Real Server的RIP的规划:
eth0-->RS1:192.168.142.132/24
ens33-->RS2:192.168.142.130/24
2.Direcotr的LVSServer的地址规划:
ens33-->DIP:192.168.142.129/24
ens33:0-->VIP:172.18.253.53/16
3.客户端IP规划:
ens33-->192.168.244.128/24
4.路由:
ens33-->192.168.244.129/24
ens37-->172.18.253.251/16
ens38-->192.168.142.133/24
三. DR模型实现负载均衡的工作原理
NAT模型的实现方式,因为进出的每个数据包都要经过DirectorServer,当集群系统负载过大的时候Director Server将会成为整个集群系统的瓶颈,那么DR模型就避免了这样的情况发生,DR模型在只有请求的时候才会经过Director Server, 回应的数据包由RealServer 直接响应用户不需要经过Director Server,其实三种模型中最常用的也就是RIP和VIP在不同网络的DR模型了,下面来说DR模型具体是怎么实现负载均衡的,根据上图,
1.首先客户端用户用CIP请求VIP;
2.根据上图可以看到,不管是DirectorServer还是Real Server上都需要配置VIP,那么当用户请求到达我们的集群网络的前端路由器的时候,请求数据包的源地址为CIP目标地址为VIP,此时路由器会发广播问谁是VIP,那么我们集群中所有的节点都配置有VIP,此时谁先响应路由器那么路由器就会将用户请求发给谁,这样一来我们的集群系统是不是没有意义了,那我们可以在网关路由器上配置静态路由指定VIP就是Director Server,或者使用一种机制不让Real Server 接收来自网络中的ARP地址解析请求,这样一来用户的请求数据包都会经过DirectorServre;
3.当DirectorServer收到用户的请求后根据此前设定好的调度算法结果来确定将请求负载到某台Real Server上去,假如说此时根据调度算法的结果,会将请求负载到Real Server 1上面去,此时Director Server 会将数据帧中的目标MAC地址修改为RealServer1的MAC地址,然后再将数据帧发送出去;
4.当Real Server1 收到一个源地址为CIP目标地址为VIP的数据包时,RealServer1发现目标地址为VIP,而VIP是自己,于是接受数据包并给予处理,当Real Server1处理完请求后,会将一个源地址为VIP目标地址为CIP的数据包发出去,此时的响应请求就不会再经过DirectorServer了,而是直接响应给用户;
四.架构实现
1.客户端配置
[root@www ~]#route adddefault gw 192.168.244.129
[root@www ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.244.129 255.255.255.0 UG 0 0 0 ens33
192.168.244.0 0.0.0.0 255.255.255.0 U 0 0 0 ens33
2.路由配置
echo 1>/proc/sys/net/ipv4/ip_forward #开启路由转发功能
3.lvs配置
DIP设置:
[root@lvs network-scripts]# pwd
/etc/sysconfig/network-scripts
[root@lvs network-scripts]# cat ifcfg-ens33
DEVICE="eth0"
BOOTPROTO="static"
ONBOOT="yes"
TYPE="Ethernet"
IPADDR=192.168.142.129
NETMASK=255.255.255.0
GATEWAY=172.18.253.251
VIP设置:
(1).不同网络:
[root@lvs network-scripts]#ifconfig ens33:0 172.18.253.53/16 up
(2).同一网络的只广播给自己;本实验不需要设置广播
[root@lvs network-scripts]#ifconfigens33:0 172.18.253.53 netmask255.255.255.255 broadcast 172.18.253.53 up
配置路由:
[root@node1 network-scripts]#route add -host 172.18.253.53 dev lo:0
[root@lvs network-scripts]#route add default gw 192.168.142.133 dev ens33
4.Real Server设置:
web1的网卡的ip配置:
[root@node1 network-scripts]# pwd
/etc/sysconfig/network-scripts
[root@node1 network-scripts]# cat ifcfg-ens33
DEVICE="eth0"
BOOTPROTO="static"
ONBOOT="yes"
TYPE="Ethernet"
IPADDR=192.168.142.132
NETMASK=255.255.255.0
GATEWAY=172.18.253.251
需要指定网关:
[root@node1 network-scripts]#route add default gw 192.168.142.133
在RS上配置内核参数,抑制ARP:
[root@node1 network-scripts]#echo 2 >/proc/sys/net/ipv4/conf/all/arp_announce
[root@node1 network-scripts]#echo 2 >/proc/sys/net/ipv4/conf/ens33/arp_announce
[root@node1 network-scripts]#echo 1 >/proc/sys/net/ipv4/conf/ens33/arp_ignore
[root@node1 network-scripts]#echo 1 >/proc/sys/net/ipv4/conf/all/arp_ignore
在RS上设置VIP地址:
[root@node1 network-scripts]#ifconfig lo:0 172.18.253.53 netmask 255.255.255.255 broadcast 172.18.253.53 up
在RS上添加路由:
[root@node1 network-scripts]#route add -host 172.18.253.53 devlo:0
5.web2的配置:跟web1一致
设置RIP地址:
#ifconfig eth0 192.168.142.130/24 up
#route add default gw 192.168.142.133
配置arptables:
#echo 2 >/proc/sys/net/ipv4/conf/all/arp_announce
#echo 2 >/proc/sys/net/ipv4/conf/eth0/arp_announce
#echo 1 >/proc/sys/net/ipv4/conf/eth0/arp_ignore
#echo 1 >/proc/sys/net/ipv4/conf/all/arp_ignore
设置VIP地址:
#ifconfig lo:0 172.18.253.53 netmask 255.255.255.255 broadcast 172.18.253.53 up
添加路由:
#route add -host 172.18.253.53 dev lo:0
6.LVS Server上定义集群服务:
#ipvsadm -A -t 172.18.253.53:80 -s rr
#ipvsadm -a -t 172.18.253.53:80 -r 192.168.142.130 -g
#ipvsadm -a -t 172.18.253.53:80 -r 192.168.142.132 -g
#systemctl restart ipvsadm
测试实现http均衡负载
另外LVS还可以根据连接类型,比如长连接和短连接,来设置相关超时时间,总之,根据应用场景来选择!
转载于:https://blog.51cto.com/13157015/1975162