负载均衡-四层负载均衡:LVSmysql
以前也写过相关的文章,可是写的太烂了。。。本身都不也敢直视。。。linux
如今有空决定从新全面学习了下LVS.总结出本博客。好了,其余的很少说了,咱们开始吧。算法
1、负载均衡sql
负载均衡包括以下:后端
一、硬件负载均衡:centos
F5,BIG IP服务器
Citrix,Netscaler网络
A10session
二、软件负载均衡:负载均衡
四层:
LVS
七层:反向代理
Nginx
代理的协议有:http smtp pop3 imap
HAProxy
代理的协议有:http,tcp(mysql,smtp)
2、LVS的介绍
一、简介:
LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最先出现的自由软件项目之一。
-----------百度百科。
LVS是一个四层的负载均衡软件,工做在内核空间。性能很是强大,而所支持的特性不多。工做在INPUT链上,因此lvs与iptables在INPUT链不能同时使用。
二、组成:
有两部分:
ipvsadm lvs规则管理
ipvs 是内核程序
ipvs在linux 2.6内核全部版本中已存在。只须要安装ipvsadm就能够了。
安装命令:yum -y install ipvsadm
3、LVS的三种模型
NAT:地址转换
DR:直接路由
TUN:隧道
三种模型的特性:
一、NAT
后端的集群节点也就是real server 必须与LVS所在的服务器在同一个IP网络中;
后端的real server所使用的ip一般是私有地址,仅用于各集群节点间的通讯;
LVS服务器位于client和real server之间,并负责处理进出的全部通讯;
real server必须将网关指向DIP;
支持端口映射;
real server可使用任意OS;
较大规模应该场景中,director易成为系统瓶颈;
二、DR
集群节点real server 跟LVS必须在同一个物理网络中;
real server 可使用公网地址,实现便捷的远程管理和监控;
LVS仅负责处理入站请求,响应报文则由real server直接发往客户端;
real server不能将网关指向DIP;
不支持端口映射;
在这个模型下vip和real server所对应的端口要同样才行。
三、TUN
集群节点能够跨越Internet;
real server必须是公网地址;
LVS仅负责处理入站请求,响应报文则由real server直接发往客户端;
real server网关不能指向LVS;
只有支持隧道功能的OS才能用于real server;
不支持端口映射;
LVS默认使用的模型为DR模型
4、LVS的调度算法
一、静态调度算法
rr: 轮叫,轮询
wrr: 加权轮叫
sh: sourch hash,源地址hash session 绑定到同一主机上
dh: destination hash 目的地址hash session 经过目的地址来绑定到同一主机上。
二、动态调度算法
lc: least-connect 最少链接 active * 256 + inactive 谁的小,挑谁
wlc: 加权最少链接,( active * 256 + inactive ) / weight
sed: 最少指望延迟 (active + 1 ) * 256 / weight
nq: never queue 永不排队,改进的sed
LBLC: 基于本地的最少链接
LBLCR: 基于本地的带复制功能的最少链接
LVS默认的调度算法是wlc
5、LVS的ipvadm命令的使用
安装:
在redhat/centos 6系统中:yum install ipvsadm -y
ipvsadm命令的使用:
一、管理集群服务
添加或修改:
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] [-M netmask]
-A: 添加
-E:修改
-t: tcp
-u: udp
-f: FirewallMark FWM 防火墙标记。service-address: Mark Number
service-address:VIP:PORT 使用VIP和端口号
-s: 调度算法
-p: 后跟超时时间,在支持连接时使用,默认300s 单位是:秒
-M: 指定子网掩码,默认是255.255.255.255
删除:
ipvsadm -D -t|u|f service-address
-D:删除
-t: tcp
-u: udp
-f: FirewallMark FWM 防火墙标记。service-address: Mark Number
service-address:VIP:PORT 使用VIP和端口号
保存规则:
ipvsadm -S > /path/to/somefile
重载规则:
ipvadm -R < /path/to/somefile
清除规则:
ipvsadm -C
示例以下:
ipvadm -A -t 192.168.1.10:80 -s rr
#添加一个规则,指定的-t tcp协议,使用192.168.1.10 为VIP 端口为80 -s指定为rr 也就是轮询。
二、管理集群服务中后端的real server
添加或修改:
ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight]
-a: 添加
-e: 修改
-t: tcp
-u: udp
-f: FirewallMark FWM 防火墙标记。service-address: Mark Number
service-address: 此前添加的的service-address: VIP:PORT
-r: 指定后端real server
server-address: RIP:PORT
-g: DR模型
-i: TUN模型
-m: NAT模型
-w: 指定权重
删除:
ipvsadm -d -t|u|f service-address -r server-address
-d:删除
示例以下:
ipvsadm -a -t 192.168.1.10:80 -r 192.168.1.9:80 -g -w 3
ipvsadm -a -t 192.168.1.10:80 -r 192.168.1.8:80 -g -w 5
#定义了两个后端server 并指定为DR模型和各个服务器的权重
三、查看规则
ipvsadm -L -n
ipvsadm -L -n -c 查看当前链接信息
6、LVS的持久链接
不管使用什么算法,LVS持久都能实如今必定时间内,未来自同一个客户端请求派发至此前选定的后端服务器即RS。Real Server。
LVS 持久链接模板(内存缓冲区):每个客户端分配给它的RS的映射关系;
ipvsadm -A|E ... -p timeout:
timeout: 持久链接时长,默认300秒;单位是秒;
应用场景如:在基于SSL,须要用到持久链接;后端服务器有session应用时,比较用户登陆,这时多个后端服务器session共享问题没法解决时,须要持久链接到同一个后端服务器。
三种持久链接:
一、PPC:未来自于同一个客户端对同一个集群服务的请求,始终定向至此前选定的RS; 持久端口链接
ipvsadm -A -t 192.168.1.10:23 -s rr -p 600
ipvsadm -a -t 192.168.1.10:23 -r 192.168.1.9:23 -g -w 2
ipvsadm -a -t 192.168.1.10:23 -r 192.168.1.8:23 -g -w 5
#注:此时的权重没有做用了。
二、PCC:未来自于同一个客户端对全部端口的请求,始终定向至此前选定的RS; 持久客户端链接
把全部端口通通定义为集群服务,一概向RS转发;
ipvsadm -C
ipvsadm -A -t 192.168.1.10:0 -s rr -p 600
ipvsadm -a -t 192.168.1.10:0 -r 192.168.1.9 -g -w 2
ipvsadm -a -t 192.168.1.10:0 -r 192.168.1.8 -g -w 5
此时后端服务器的全部端口均可以转发了,并绑定到同一个后端服务器上。
三、PNMPP:持久防火墙标记链接
把多个端口持久链接到后端同一台服务器上,此前两种方法都没法作到。
防火墙标记,能够作到把多个端口定义为同一个标记数(1-99) 把标记号进行转发到后端便可。
方法以下:
如把80和23端口标记为8
在PREROUTING链上标记:
操做以下:
iptables规则:
iptables -t mangle -A PREROUTING -d 192.168.1.10 -i eth0 -p tcp --dport 80 -j MARK --set-mark 8
iptables -t mangle -A PREROUTING -d 192.168.1.10 -i eth0 -p tcp --dport 23 -j MARK --set-mark 8
#使用的-d 后面是VIP地址
添加LVS规则:
ipvsadm -A -f 8 -s rr -p 600
ipvsadm -a -f 8 -r 192.168.1.9 -g -w 2
ipvsadm -a -f 8 -r 192.168.1.8 -g -w 5
此时应当实现了以前的把多个端口定位到此前所选定的后端同一台服务器上。
以上就是LVS的基于概念和ipvsadm命令基本使用详情。若有批漏请各位指出,多谢关注。
下一篇会有三个脚原本实现LVS在负载均衡端和Real Server的设置,其中有一个脚原本提供后端Real Server健康状态检测,并自动添加恢复后的Real Server服务器。