一: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。