注释:
ipvs:工作于内核上的netfilterINPUT钩子之上的程序,可根据用户定义的集群实现请求转发;
VS:Virtual Server 虚拟服务
Director, Balancer 负载均衡器、分发器
RS:Real Server 后端请求处理服务器
CIP: Client IP 用户端IP
Director Virtual IP: VIP 负载均衡器虚拟IP
Director IP: DIP 负载均衡器IP
RealServer IP: RIP 后端请求处理服务器IP
其中:VIP是让用户访问的,DIP是让后端服务器通信的
(1) 当用户请求到达DirectorServer,此时请求的数据报文会先到内核空间的PREROUTING链。此时报文的源IP为CIP,目标IP为VIP
(2)PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链
(3) IPVS比对数据包请求的服务是否为集群服务,若是,修改数据包的目标IP地址为后端服务器IP,然后将数据包发至POSTROUTING链。此时报文的源IP为CIP,目标IP为RIP
(4) POSTROUTING链通过选路,将数据包发送给RealServer
(5) Real Server比对发现目标为自己的IP,开始构建响应报文发回DirectorServer。此时报文的源IP为RIP,目标IP为CIP
(6)Director Server在响应客户端前,此时会将源IP地址修改为自己的VIP地址,然后响应给客户端。此时报文的源IP为VIP,目标IP为CIP
2、实验:
实验准备:
三台主机,一台负载均衡器,两台后端服务器
LVS-server 两个网卡,桥接模式,仅主机模式
后端服务器:仅主机模式
(1)在LVS-server上配置
1.安装包
yum install ipvsadm
2.开启一个基于80端口的虚拟服务,调度方式为wrr
ipvsadm -A -t 172.17.251.106:80 -s wrr
3.配置web后端服务器real server为net工作方式,权重为1
ipvsadm -a -t 172.17.251.106:80 -r 192.168.191.107 -m -w 1
ipvsadm -a -t 172.17.251.106:80 -r 192.168.191.110 -m -w 1
4.修改内核参数,允许路由转发
vim /etc/sysctl.conf
修改 net.ipv4.ip_forward = 1
sysctl -p 查看生效
(2)在两个real server上添加默认路由指向DIP
route add default gw 192.168.191.106
(3)为了方便测试。
在real server上实现LNMP。可以安装下面步骤实现
http://guanm.blog.51cto.com/13126952/1978354
在192.168.191.107上
cd /data/web
echo site1 > index.html
在192.168.191.110上
cd /data/web
echo site2 > index.html
(4)在客户端测试
curl http://172.17.251.106/index.html
可以看到依次出现site1 ,site2 ,因为两者的权重一样
本文转自 hawapple 51CTO博客,原文链接:http://blog.51cto.com/guanm/1979127