一、lvs的三种模式:
1、VS/NAT 模式
通过网络地址转换,调度器重写请求报文的目标地址,根据调度算法,将请求分派给后端的真实服务器;真实服务器的响应报文通过调度器时,报文的源地址被重写,再返回给客户,完成整个负载调度过程。
缺点:请求和响应报文都必须经过调度器进行地址重写,当客户端请求越来越多时,调度器的处理能力将成为瓶颈。
2、VS/TUN 模式
调度器把请求报文直接通过IP隧道转发给真实服务器,而真实服务器将响应直接返回给客户,所以调度器只处理请求报文,采用VS/TUN后,集群系统的最大吞吐量可以提高10倍。
3、VS/DR 模式
通过改写请求报文的MAC地址,将请求发给真实服务器,而真实服务器通过路由将响应直接返回给客户。
优点:同VS/TUN技术一样,VS/DR技术可以极大的提高集群系统的伸缩性。这种方法没有IP隧道的开销,对集群中的真实服务器也没有必须支持IP隧道协议的要求,但是要求调度器与真实服务器都有一块网卡连在同一个物理网段上。
三种IP负载均衡技术的优缺点归纳在下表中:
VS/NAT | VS/TUN | VS/DR | |
Server | any | Tunneling | Non-arp device |
server network | private | LAN/WAN | LAN |
server number | low (10~20) | High (100) | High (100) |
server gateway | load balancer | own router | Own router |
-----------------------------------------------------------------------------------------------------------------------------------------
二、常用的四种负载调度算法
1)轮叫(Round Robin)--rr
调度器通过“轮叫”调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,而不管服务器上实际的链接数和系统负载。
2)加权轮叫(weighted Round Robin—wrr
根据真实服务器的不同处理能力来调度访问请求。这样可以保证处理能力强的服务器处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态的调整其权值。
3)最少链接(Least Connections)
动态地将网络请求调度到已建立的连接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用“最小链接”调度算法可以较好的均衡负载。
4)加权最少链接(Weighted Least Connections)
在集群系统中的服务器性能差异较大的情况下,调度器采用“加权最少链接”调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动链接负载。调度器可以自动问询真实服务器的负载情况,并动态的调 整其权值。
各种调度算法:
l 轮叫调度(Round-Robin Scheduling)
* 加权轮叫调度(Weighted Round-Robin Scheduling)
* 最小连接调度(Least-Connection Scheduling)
* 加权最小连接调度(Weighted Least-Connection Scheduling)
* 基于局部性的最少链接(Locality-Based Least Connections Scheduling)
* 带复制的基于局部性最少链接(Locality-Based Least Connections with Replication Scheduling)
* 目标地址散列调度(Destination Hashing Scheduling)
* 源地址散列调度(Source Hashing Scheduling)
* 最短预期延时调度(Shortest Expected Delay Scheduling)
* 不排队调度(Never Queue Scheduling)
对应: rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,
实验一、LVS/NAT模式
OS: centos5.5 * 3 ipvsadm:ipvsadm-1.24
Eth0 | Eth1 | 虚拟IP eth0:0 | |
安装LVS机器 | IP:128.1.37.86 NETMASK:255.255.255.0 GATEWAY=128.1.37.1 | ||
Realserver1 | IP:10.10.10.131 NETMASK=255.255.255.0 GATEWAY=10.10.10.130 | ||
Realserver2 | IP:10.10.10.132 NETMASK=255.255.255.0 GATEWAY=10.10.10.130 |
1.、安装lvs机器
先创建内核链接
ln -s /usr/src/kernels/2.6.18-53.e15-i686/ /usr/src/linux
再安装ipvsadm(注意ipvsadm一定要根据自己linux的内核版本安装对应的版本)
创建一个脚本,用来设置下系统的部分属性:
Vim lvs.sh
内容如下:
echo "1">/proc/sys/net/ipv4/ip_forward #开启路由功能
ipvsadm -C #清楚ipvsadm的规则
ipvsadm -A -t 128.1.37.86:80(本机的IP) -s rr(轮叫算法)
ipvsadm -a -t 128.1.37.86:80 -r 10.10.10.131:80 -m -w 1 #添加转发规则,-m伪装(NAT转换) -w权重值
ipvsadm -a -t 128.1.37.86:80 -r 10.10.10.132:80 -m -w 1 #添加转发规则,-m伪装(NAT转换) -w权重值
实验二、LVS/DR模式
Eth0 | Eth1 | 虚拟IP eth0:0 | |
安装LVS机器 | IP:128.1.37.202 NETMASK:255.255.255.0 GATEWAY=128.1.37.1 | IP:128.1.20.205 broadcast 128.1.37.205 Netmask:255.255.255.255 #注意掩码为4个255 | |
Realserver1 | IP:128.1.37.203 NETMASK=255.255.255.0 GATEWAY=128.1.37.1 | IP:128.1.20.205 broadcast 128.1.37.205 Netmask:255.255.255.255 #注意掩码为4个255 | |
Realserver2 | IP:128.1.37.204 NETMASK=255.255.255.0 GATEWAY=128.1.37.1 | IP:128.1.20.205 broadcast 128.1.37.205 Netmask:255.255.255.255 #注意掩码为4个255 |
LVS机器的设置如下:
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 128.1.37.205:80 -s rr
添加这个负载集群IP的成员 -g 路由模式 -w权重值
# ipvsadm -a -t 128.1.37.205:80 -r 128.1.37.203 -g -w 1
# ipvsadm -a -t 128.1.37.205:80 -r 128.1.37.204 -g -w 1
配置负载均衡虚拟IP地址
# ifconfig eth0:0 128.1.37.205 broadcast 128.1.37.205 netmask 255.255.255.255 up
配置主机路由
# route add -host 128.1.37.205 dev eth0:0
真实web服务器的设置如下:(每台设置都相同)
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
使realserver不响应arp请求,执行sysctl –p 命令 立即生效
配置负载均衡虚拟IP地址
# ifconfig lo:0 128.1.37.205 broadcast 128.1.37.205 netmask 255.255.255.255 up
配置主机路由
# route add -host 128.1.37.205 dev lo:0
实验三、LVS/TUN模式
Eth0 | Eth1 | 虚拟IP tunl0 | |
安装LVS机器 | IP:128.1.37.202 NETMASK:255.255.255.0 GATEWAY=128.1.37.1 | IP:128.1.20.205 broadcast 128.1.37.205 Netmask:255.255.255.255 #注意掩码为4个255 | |
Realserver1 | IP:128.1.37.203 NETMASK=255.255.255.0 GATEWAY=128.1.37.1 | IP:128.1.20.205 broadcast 128.1.37.205 Netmask:255.255.255.255 #注意掩码为4个255 | |
Realserver2 | IP:128.1.37.204 NETMASK=255.255.255.0 GATEWAY=128.1.37.1 | IP:128.1.20.205 broadcast 128.1.37.205 Netmask:255.255.255.255 #注意掩码为4个255 |
LVS机器的设置如下:
ifconfig tunl0 128.1.37.205 broadcast 128.1.37.205 netmask 255.255.255.255 up
route add -host 128.1.37.205 dev tunl0
ipvsadm -A -t 128.1.37.205:80 -s rr
ipvsadm -a -t 128.1.37.205:80 -r 128.1.37.203 -i
ipvsadm -a -t 128.1.37.205:80 -r 128.1.37.204 -i
ipvsadm
真实web服务器的设置如下:(每台设置都相同)
ifconfig tunl0 128.1.37.205 broadcast 128.1.37.205 netmask 255.255.255.255 up
route add -host 128.1.37.205 dev tunl0
echo "1" >/proc/sys/net/ipv4/conf/tunl0/arp_ignore
echo "2">/proc/sys/net/ipv4/conf/tunlo/arp_announce
echo "1">/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2">/proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p
转载于:https://blog.51cto.com/lucklong/537342