一:LVS介绍和LVS调度算法

LB 集群的架构如下图,原理也很简答,就是当用户的请求过来时,会直接发到分发器 (Director Server)上,然后它把用户的请求根据预先设置好的算法,智能均衡地分发到后 端的真正服务器(real server)上。如果不同的机器,可能用户请求到的数据不一样,为了 避免这样的情况发生,所以用到了共享存储,这样保证所有用户请求的数据是一样的。

LVS 是一个实现负载均衡集群的开源软件项目,LVS 架构从逻辑上可分为调度层 (Director)、server集群层(Real server)和共享存储。LVS 从实现上分为下面三种模式。 (1)NAT(调度器将请求的目标 ip 即 vip地址改为Real server的ip, 返回的数据包也 经过调度器,调度器再把源地址修改为vip)。

(2)TUN(调度器将请求来的数据包封装加密通过 ip 隧道转发到后端的 real server上, 而real server会直接把数据返回给客户端,而不再经过调度器)。 (3)DR(调度器将请求来的数据包的目标mac地址改为real server的mac 地址,返回 的时候也不经过调度器,直接返回给客户端)。 参考资料 http://www.it165.net/admin/html/201401/2248.html

其中DIP(driector ip)为分发器的 IP,NAT模式下它必须为公网IP,要对外服务。VIP(virtual ip)为虚拟IP,用在TUN 和DR 模式中,需 要同时配置在分发器和后端真实服务器上。RIP(Real IP)为后端真实服务器的IP,在TUN和DR 模式中,RIP 为公网 IP。 要想把用户的请求调度给后端的 RS,是需要经过调度算法来实现的,那么关于 LVS 的调度算法,都有哪些? 轮询 Round-Robin rr 加权轮询 Weight Round-Robin wrr 最小连接 Least-Connection lc 加权最小连接 Weight Least-Connection wlc 基于局部性的最小连接 Locality-Based Least Connections lblc 带复制的基于局部性最小连接 Locality-Based Least Connections with Replication lblcr 目标地址散列调度 Destination Hashing dh 源地址散列调度 Source Hashing sh

二:LVS NAT模式搭建

(1)环境说明 三台服务器一台作为 director, 两台作为real server,Director 有一个外网 ip (192.168.31.166) 和一个内网 ip(192.168.21.166), 两个real server上只有内网 ip(192.168.21.100)和(192.168.21.101) 并且需要把两个 real server的内网网关设置为 director 的内网ip(192.168.21.166)。 (2)安装和配置 两个real server 上都安装 nginx服务 #yum install -y nginx Director上安装ipvsadm
#yum install -y ipvsadm Direcotr 上编辑nat实现脚本 #vim /usr/local/sbin/lvs_nat.sh 写入如下内容: #! /bin/bash #director 服务器上开启路由转发功能:
echo 1 > /proc/sys/net/ipv4/ip_forward
#关闭icmp的重定向 echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects echo 0 > /proc/sys/net/ipv4/conf/eth0/send_redirects echo 0 > /proc/sys/net/ipv4/conf/eth1/send_redirects

#director 设置nat防火墙 iptables -t nat –F iptables -t nat –X iptables -t nat -A POSTROUTING -s 192.168.21.0/24 -j MASQUERADE #director设置ipvsadm IPVSADM='/sbin/ipvsadm' $IPVSADM –C $IPVSADM -A -t 192.168.31.166:80 -s lc -p 300 $IPVSADM -a -t 192.168.31.166:80 -r 192.168.21.100:80 -m -w 1 $IPVSADM -a -t 192.168.31.166:80 -r 192.168.21.101:80 -m -w 1 保存后,在Director上直接运行这个脚本就可以完成lvs/nat的配置了。 #/bin/bash /usr/local/sbin/lvs_nat.sh

(3)测试 通过浏览器测试两台机器上的 web内容http://192.168.31.166。为了区分开,我们可以 把nginx的默认页修改一下: 在 RS1 上执行 #echo "rs1rs1" >/usr/share/nginx/html/index.html 在 rs2 上执行 #echo "rs2rs2" >/usr/share/nginx/html/index.html 注意,切记一定要在两台RS上设置网关的IP 为 director的内网IP。