LINUX 集群 LVS 负载均衡配置
 
 
基础原理篇:
LVS是Linux Virtual Server的缩写,意思是Linux虚拟服务器。
 
负载均衡一般是指一群计算机的集合,通过一个虚拟ip去根据某种算法,去不停分配到这集合的计算机当中,假如有 主机A 主机B 主机C 主机A作为一个负载均衡机,主机B和主机C都是web应用服务器,主机A是负载均衡机,主机A会虚拟一个IP出来作为这个负载均衡的IP,假定主机A的IP 192.168.1.1 主机B的IP是192.168.10.2 主机C的IP 192。168.10.3 这个负载均衡虚拟IP的192.168.1.10 就是访问这web服务器的IP地址 当外部来访问web站点的时候,主机A(负载均衡机)会把这个虚拟IP通过作为NAT地址转换,分发主机A和主机B,采用一种算法,通常一般采用轮询的方式,当外部网络来访问时候,主机A(负载均衡机)首先任意分开给主机A ,有主机A把页面访问给来至外部网络的访问,当有下一个来外部网络的访问,主机A(负载均衡机)在分发给主机B,按照这样的机制,一次分发给主机A,一次分发给主机B。
 
 
 

LINUX集群LVS负载均衡配置_第1张图片

 
LVS有三种负载均衡的模式,分别是VS/NAT(nat模式) VS/DR(路由模式) VS/TUN(隧道模式)
   
 
 
 
 
VS/NAT 模式介绍
这种模式当来访问这个网络的时候,负载均衡机会会通过NAT的转换分别分发给应用服务器A或应用服务器B。应用服务器返回给来至外部的访问,要在次通过负载机访问给来至外部的访问。这种模式通常是应用服务器是IP是私有IP地址,需要通过NAT地址来转换成公网IP地址。
 
 
 
 
 

LINUX集群LVS负载均衡配置_第2张图片

 
 
 
 
 
VS/DR 模式介绍
   路由模式,负载均衡机和应用服务器同属于一个IP范围,并且负载均衡虚拟的IP也属于这个IP范围,通常都是配置的公网IP地址,这种方式我们可以采用路由模式。当外部网络来访问时候,首先肯定是通过负载均衡机来分发给这个集合的应用服务器,但是应服务器,返回给外部网络的不在通过这个负载均衡机出去,而且自己通过路由返回给外部网络,自己去查路由,去返回。
 
 

LINUX集群LVS负载均衡配置_第3张图片

vs/tun 模式介绍
隧道模式,负载均衡机和集群集合的服务器和负载均衡虚拟出来IP不属于同一个网段,分别分布在不同网段,这时候我需要隧道模式,好比这个负载均衡机和这个集群集合的服务器建议一条用来专门用来负载均衡隧道,隧道模式首先外部网络访问时候,经负载均衡机来分发到应用服务器,应用服务器也是和路由模式一样的方式,自己路由出去返回结果给来至外部的访问,也不经在过负载均衡机出返回给来至外部网络的访问。
 

 

LINUX集群LVS负载均衡配置_第4张图片

 

VS/NAT 、VS/DR 、 VS/TUN 、这三种模式区别
VS/NAT这种模式返回给来至外部的访问的数据时候,需要在经过负载均衡的那台服务器,这种模式给负载均衡服务器带来负重,如果集群集合的服务器效果,访问量过大,这样负载均衡服务器这样有所谓负担,而另外2种模式不在通过负载均衡机,自己本身通过路由出去,这样也给负载均衡服务器,降低了负担。
 
 
 
配置篇:
lvs 需要2.4.24 以后版本的内核源代码才能支持 下载地址: http://www.kerner.org 不过在通常版本都支支持lvs 功能
需要下载ipvsadm用户工具 下载地址 http://www.linuxvirtualserver.org/software/ipvs.html
这里使用的是ipvsadm-1.24.的版本
 
 
安装ipvsadm
tar -zxvf ipvsadm-1.24.tar.gz
cd ipvsadm-1.24
make all
make install
 
ln –s    /usr/src/kernels/2.6.18-194.el5-xen-i686 /usr/src/linux
 
 
VS/NAT 模式配置
 

LINUX集群LVS负载均衡配置_第5张图片

 
 
200.200.200.1这台机
  LINUX集群LVS负载均衡配置_第6张图片
 
192.168.10.2 这台机网卡配置:
DEVICE=eth0
BOOTPROTO=static
ONBOOT=yes
IPADDR=192.168.10.2
NETNASK=255.255.255.0
GATEWAY=192.168.10.1
 
 
192.168.10.3 这台机网卡配置:
DEVICE=eth0
BOOTPROTO=static
ONBOOT=yes
IPADDR=192.168.10.3
NETNASK=255.255.255.0
GATEWAY=192.168.10.1
 
 
回到 200.200.200.1这台机
 
 
 
 
首先
echo "1" >/proc/sys/net/ipv4/ip_forward 开启路由功能
ipvsadm –C 清楚配置信息
 
设置这个IP为负载均衡的IP     -s rr为轮询的方式负载均衡
 

 

 添加这个负载集群IP的成员     -m伪装(NAT转换) -w权重值
 
 

ipvsadm –ln 查询集群情况
 

 
 
测试效果
 
 
 
 
 

LINUX集群LVS负载均衡配置_第7张图片

 
 
 
 
  
 

LINUX集群LVS负载均衡配置_第8张图片 

 

 

 

 

 代表访问的负载均衡次数 

 
 
VS/DR 配置模式
 
 

LINUX集群LVS负载均衡配置_第9张图片

 
200.200.200.101这台机网卡配置
DEVICE=eth0
BOOTPROTO=static
ONBOOT=yes
IPADDR=200.200.200.101
NETNASK=255.255.255.0
GATEWAY=200.200.200.254
 
 
200.200.200.102这台机网卡配置
DEVICE=eth0
BOOTPROTO=static
ONBOOT=yes
IPADDR=200.200.200.102
NETNASK=255.255.255.0
GATEWAY=200.200.200.254
 
200.200.200.103这台机网卡配置
DEVICE=eth0
BOOTPROTO=static
ONBOOT=yes
IPADDR=200.200.200.103
NETNASK=255.255.255.0
GATEWAY=200.200.200.254
 
 
200.200.200.101 这台机
vi /ect/sysctl.conf
添加或修改如下配置
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 1
net.ipv4.conf.default.send_redirects = 1
net.ipv4.conf.eth0.send_redirects = 1
 
 
 
执行sysctl  –p 命令 立即生效
 
设置这个IP为负载均衡的IP     -s rr为轮询的方式负载均衡
# ipvsadm -A -t 200.200.200.200:80 -s rr
添加这个负载集群IP的成员      -g 路由模式 -w权重值
 
 
# ipvsadm -a -t 200.200.200.200:80 -r 200.200.200.102 -g -w 1
# ipvsadm -a -t 200.200.200.200:80 -r 200.200.200.103 -g -w 1
 
配置负载均衡虚拟 IP地址
# ifconfig eth0:0 200.200.200.200 broadcast 200.200.200.200 netmask 255.255.255.255 up   
配置主机路由
# route add -host 200.200.200.200 dev eth0:0
 
200.200.200.102 和 200.200.200.103这两台机配置(配置相同)
 
 
vi /ect/sysctl.conf
添加或修改如下配置
net.ipv4.ip_forward = 0
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
 
执行sysctl  –p 命令 立即生效
 
配置负载均衡虚拟 IP地址
# ifconfig lo:0 200.200.200.200 broadcast 200.200.200.200 netmask 255.255.255.255 up
配置主机路由
# route add -host 200.200.200.200 dev lo:0
 
 
 
 
测试效果
 
 

LINUX集群LVS负载均衡配置_第10张图片 

 

 

 
 
 
 

LINUX集群LVS负载均衡配置_第11张图片

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
VS/TUN 模式配置
 
 
 

LINUX集群LVS负载均衡配置_第12张图片

 
192.168.10.2 这台机网卡配置:
DEVICE=eth0
BOOTPROTO=static
ONBOOT=yes
IPADDR=192.168.10.2
NETNASK=255.255.255.0
GATEWAY=192.168.10.1
 
200.200.200.101这台机网卡配置
DEVICE=eth0
BOOTPROTO=static
ONBOOT=yes
IPADDR=200.200.200.101
NETNASK=255.255.255.0
GATEWAY=200.200.200.254
 
200.200.200.102这台机网卡配置
DEVICE=eth0
BOOTPROTO=static
ONBOOT=yes
IPADDR=200.200.200.102
NETNASK=255.255.255.0
GATEWAY=200.200.200.254
 
 
 
200.200.200.101这台机
vi /ect/sysctl.conf
添加或修改如下配置
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 1
net.ipv4.conf.default.send_redirects = 1
net.ipv4.conf.eth0.send_redirects = 1
 
执行sysctl  –p 命令 立即生效
 
配置负载均衡虚拟 IP地址
#ifconfig tunl0 200.200.200.200 broadcast 200.200.200.200 netmask 255.255.255.255 up
 
ipvsadm –C 清楚ipvsamd
 
设置这个IP为负载均衡的IP     -s rr为轮询的方式负载均衡
ipvsadm -A -t 200.200.200.200:80 –s  rr
 
添加这个负载集群IP的成员 –i 隧道模式 –w 权重值
ipvsadm –a  -t 200.200.200.200:80 –r 200.200.200.102 –i –w 1
ipvsadm –a  -t 200.200.200.200:80 –r 192.168.10.2 –i –w 1
 
 
 
200.200.200.102 和 200.200.200.103这两台机配置(配置相同)
vi /ect/sysctl.conf
添加或修改如下配置
net.ipv4.ip_forward = 0
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
 
执行sysctl  –p 命令 立即生效
 
配置负载均衡虚拟 IP地址
#ifconfig tunl0 200.200.200.200 broadcast 200.200.200.200 netmask 255.255.255.255 up
 
 
测试效果
 
 
 
 
 
 

LINUX集群LVS负载均衡配置_第13张图片 

 

 

LINUX集群LVS负载均衡配置_第14张图片