LVS
环境centos6.5

概念:
APR协议:通过IP地址获得主机的物理地址(MAC地址) 32位IP地址转换为48位物理地址。
集群:一组相互独立的计算机组成一计算机系统,每台独立计算机都运行自己的进程。
开源群集软件:lvs,haproxy,nginx,keepallived,heartbeat
硬件:F5,Netscaler,Radware,相当于haproxy的工作模式。

LVS实现调度的IPVS内核层,通过IPVSADM管理,也可以用keepalived管理。
VIP:虚拟IP地址。
RIP:集群下面节点的真实IP地址。
DIP:负载均衡上面的IP。
CIP:客户端的发起请求的ip地址。

LVS模式:
1、NAT模式-网络地址转换(收费站模式) 请求和返回都要经过,压力大。
2、TUN隧道模式
3、DR直接路由模式 #######互联网公司最常用,响应之后不经过负载均衡,效率高。
4、FULLNAT完全NAT模式

DR直接路由模式原理:
改写请求报文的目标MAC地址,将请求发给真实服务器,而真实服务器将响应后处理结果直接返回给客户端。RS和LB必须在同一局域网。
由于只进行了mac地址改写,所以无法改变请求报文的目的端口。dr模式效率高,配置麻烦。访问量不是特别大的公司可以用haproxy和nginx代替。日pv2000W,并发1W一下可以不用。
web服务的RS尽量用外网地址,这样数据包就直接发给机房网关。
lvs_第1张图片

NAT模式:
修改目的地址为RIP,MAC地址不变。RTP的网关必须是:LVS IP。
LB需要配置WAN公网地址。网站访问量大时,LB有较大瓶颈,可以修改端口。80可以转成8080.
数据包来回都需要经过LB需要打开内核转发net.ipv4.ip_forward=1

TUN隧道模式:(跟DR很像)
数据in:增加IP头带RS(IP可以是公网)。最好RS有一个外网地址。

LVS调度方法:
固定:
1、rr:轮询,会将请求以此分给RS(解决会话保持问题)
2、wrr:加权轮询。权重越大,请求越多。
3、wls:最小连接数权重
4、dd:根据目的地址调度 一般不用
5、sh:源地址调度 一般不用

搭建环境
lvs 192.168.56.21
web1 192.168.56.20
web2 192.168.56.100

搭建lvs(#改成星号,51cto不支持显示星号)

yum install -y kernel-devel gcc openssl openssl-devel popt# libnl#
ln -s /usr/src/kernels/2.6.32-696.18.7.el6.x86_64/ /usr/src/linux

cd /usr/local/share
wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.26.tar.gz
tar -zxvf ipvsadm-1.26.tar.gz
cd ipvsadm-1.26
make
make install
modprobe ip_vs
lsmod|grep ip_vs

手动配置vip
ifconfig eth0:0 192.168.56.10/24 up

添加一个虚拟主机 rr轮询 p 20会话保持
ipvsadm -A -t 192.168.56.10:80 -s rr -p 20
添加节点-g DR模式 -i TUN隧道模式 -m nat模式
ipvsadm -a -t 192.168.56.10:80 -r 192.168.56.20:80 -g -w 1
ipvsadm -a -t 192.168.56.10:80 -r 192.168.56.100:80 -g -w 1

查看
ipvsadm -L -n
删除服务
ipvsadm -D -t 192.168.56.10:80
ipvsadm -d -t 192.168.56.10:80 -r 192.168.56.20:80
ipvsadm -d -t 192.168.56.10:80 -r 192.168.56.100:80

其他节点绑定vip
ifconfig lo:0 192.168.56.10/32 up
抑制ARP
echo 1 >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 >/proc/sys/net/ipv4/conf/lo/arp_announce
echo 1 >/proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 >/proc/sys/net/ipv4/conf/all/arp_announce

这样就是可以通过访问192.168.56.10来访问后端了。

如果一台lvs挂了,启动另外一台lvs的时候需要通过其他客户端更改后的mac
/sbin/arping -U -I eth0 192.168.56.10 192.168.56.2 >/dev/null 2>&1

lvs服务端和RS都需要脚本启动和关闭