1、环境搭建
server1:172.25.254.1 LB调度机
server2:172.25.254.2 realserver1
server3:172.25.254.3 realserver2
Virtual IP:172.25.254.111
client: 172.25.254.55
2、LB上配置yum源
1、开启真机的网络共享yum源,共享6.5的镜像
2、server1做为负载均衡的调度机,在server1上面添加负载均衡的yum源配置。
在刷新yum后,会多出四个LoadBalancer包
3、server1,server2,server3上配置相同的VIP(虚拟IP:172.25.254.111)
1、server1:
ip addr add 172.25.254.111/24 dev eth0
在配置IP时,注意网卡并非都是eth0,否则添加会报错
2、server2:
ip addr add 172.25.254.111/32 dev eth0
3、server3:
4、LB调度器(server1)安装ipvsadm管理工具并添加策略配置VS(Virtual Server)
[root@server1 ~]# ipvsadm -A -t 172.25.254.111:80 -s rr
A:添加VS;
-t:添加tcp的端口;
-s:调度算法
rr:轮询
[root@server1 ~]# ipvsadm -a -t 172.25.254.111:80 -r 172.25.254.2:80 -g
-a:添加RS
-r:添加RIP
-g:DR工作模式
[root@server1 ~]# ipvsadm -a -t 172.25.254.111:80 -r 172.25.254.3:80 -g
ipvsadm -C ###清除所有编写策略
ipvsadm -Ln ###查看策略内容
/etc/init.d/ipvsadm save ###保存编写的策略在文本中
5、开启server2,server3的apache服务
/etc/init.d/httpd start
6、client测试
上面测试表明可以达到轮询,我们下面没缓存一次查看一次是从哪一台服务器缓存的内容
curl 172.25.254.111
arp -an | grep 111
过滤MAC地址,查找后第一次是从server3上缓存的
清除缓存MAC地址再缓存一次:
arp -d 172.25.254.111
第二次是从server2上缓存的:
第三次测试,我们不清除MAC地址,多次缓存后查看:
在同一vlan中,当client发出请求,在http报文寻找目的IP时候,会先通过arp协议广播一个报文,这个报文的目的是得到谁是VIP的主机,谁是这个主机,该主机接收这个请求,然后返回该主机的MAC地址给client,供其在数据链路层传输传输数据; 而当有多个相同的目标IP时,那就是谁响应的快,client就会屏蔽掉其它主机,将http报文传送给第一个响应的主机。
而且通过三次测试发现VIP与MAC形成映射,每次访问的就是realserver的MAC地址,这是及其不安全的,我们的目的是不能让client去直接访问realserver,后端服务器只是提供服务而已,不能暴露给他人。因此我们需要在realserve上添加屏蔽策略
7、后端服务器arp抑制
在realserver端:
[root@server2 ~]# yum install arptables_jf -y
[root@server2 ~]# arptables -A IN -d 172.25.254.111 -j DROP
-A:添加arptables匹配规则
IN:进入时
-d:目的地址
-j:匹配规则后做的动作
DROP:丢弃
[root@server2 ~]# arptables -A OUT -s 172.25.254.111 -j mangle --mangle-ip-s 172.25.254.2
假若上面匹配规则出现了失误没匹配上,这条规则同样可以起到arp抑制的作用。若要发送一个arp回应报文时,若源地址是VIP:172.25.254.111 则将arp报文发送给本机
[root@server2 ~]# /etc/init.d/arptables_jf save
server3相同,添加完成后,测试:
该MAC地址为调度器的MAC地址
arptables -L ###查看策略
arptables -F ###清除策略
/etc/init.d/arptables_jf save ###保存编写的策略在文件中