内容:前端
一、lvs的概念算法
二、lvs的工做过程后端
三、lvs的类型centos
四、lvs的调度方法bash
五、ipvsadm的使用服务器
1、lvs网络
LVS(Linux Virtual Server)是前阿里巴巴首席科学家章文嵩博士在大学期间的一款开源的负载均衡软件, 可实现四层的负载均衡。session
首先,lvs工做在传输层,lvs的架构和iptables相似,lvs由ipvsadm/ipvs组成,其中ipvsadm工做在用户空间架构
lvs的术语:app
vs:virtual server,director
rs:real server
CIP:client IP
VIP:virtual server IP
DIP:ditecter IP(connect with rs)
RIP:real server IP
用户请求的IP必定是VIP,不然vs就失去了负载均衡的调度意义
2、lvs的工做过程
3、lvs的类型
lvs有四种模型,其中前三种是通用的标准:
(1)lvs-nat(DNAT)
(2)lvs-dr
(3)lvs-tun
(4)lvs-fullnat(SANT、DNAT)(淘宝内部研发的模型,并不是lvs标准的模型,要使用该模型要打上专门的补丁)
LVS NAT的特性(实质是多目标的DNAT):
一、RS应该使用私有地址;
二、RS的网关的必须指向DIP;
三、RIP和DIP必须在同一网段内;
四、请求和响应的报文都得通过Director;在高负载场景中,Director极可能成为系统性能瓶颈;
五、支持端口映射;
六、RS可使用任意支持集群服务的OS;
lvs-nat:工做流程如图:
LVS DR类型的特性:
一、RS可使用私有地址;但也可使用公网地址,此时能够直接经过互联网连入RS以实现配置、监控等;
二、RS的网关必定不能指向DIP;
三、RS跟Dirctory要在同一物理网络内(不能由路由器分隔,由于VS经过封装MAC地址到RS);
四、请求报文通过Directory,但响应报文必定不通过Director
五、不支持端口映射;
六、RS可使用大多数的操做系统;
因为DR类型中,VS、RS的VIP都是同样,若是在同一网段内会形成地址冲突,所以要解决地址冲突有一下三种方法:
禁止RS响应对VIP的ARP广播请求:
一、在前端路由上实现静态MAC地址VIP的绑定;
前提:得有路由器的配置权限;
缺点:Directory故障转时,没法更新此绑定;
二、arptables
前提:在各RS在安装arptables程序,并编写arptables规则
缺点:依赖于独特功能的应用程序
三、修改Linux内核参数
前提:RS必须是Linux;
缺点:适用性差;
两个参数:
arp_announce:定义通告模式
arp_ignore:定义收到arp请求的时响应模式
配置专用路由,以使得响应报文首先经过vip所配置的lo上的别名接口
lvs-dr:工做流程如图
lvs-tun:IP隧道
一、RIP、DIP、VIP都得是公网地址;
二、RS的网关不会指向也不可能指向DIP;
三、请求报文通过Directory,但响应报文必定不通过Director;
四、不支持端口映射;
五、RS的OS必须得支持隧道功能;
lvs-tun:工做流程如图:也是基于lvs-dr的模型,只不过不一样的是,rs和vs没必要在同一个物理的网络(实现物理冗余),而是经过隧道技术进行vs和rs间的通讯
lvs-fullnat:同时修改源IP和目标IP来进行转发
特性:
一、VIP是公网IP,DIP和RIP是私网地址,且一般不在同一网络中,但须要经路由器互通
二、RS收到的请求报文源IP是DIP,所以响应报文直接响应给DIP
三、请求和响应的报文都经由DIP,所以vs须要承受较大的压力
四、支持端口映射
4、lvs的调度方法
lvs scheduler:lvs调度
LVS的调度方法能够分为静态方法和动态方法:
静态方法:仅根据算法自己进行调度,并无考虑RS的负载状况
rr: Round Robin 路由轮询
wrr: Weighted RR 加权轮询
sh: source hashing 源地址哈希,主要做用是保持session,使同一个客户端被调度到以前访问的同一个RS,因此须要保持会话时才使用该调度方法
dh: destination hashing:目标地址哈希
动态方法:根据算法及RS当前的负载情况
lc: Least Connection最少链接
Overhead=Active*256+Inactive
结果中,最小者胜出;
wlc: Weighted LC 加权的最少链接
Overhead=(Active*256+Inactive)/weight
结果中,最小者胜出
sed: Shortest Expect Delay 最短时间望延时
Overhead=(Active+1)*256/weight
结果中,最小者胜出
nq: Nerver Queue 永不排队,sed算法的改进,第一轮时每一个都要响应一次
lblc: Locality-based Least Connection
dh+lc
lblcr: Replicated and Locality-based Least Connection,带复制的lblc
其中wlc算法最为通用
既然是负载均衡调度,咱们也知道,http协议是无状态的,那么就要考虑一个问题,若是用户被调到不一样RS时,其访问的信息怎么同步:
负载均衡中Session持久机制:
一、session sticky绑定:始终将同一个请求者的链接定向至同一个RS(第一次请求时仍由调度方法选择);没有容错能力,有损均衡效果;SH算法
二、session cluster复制:在RS之间同步session,所以,每一个RS持集群中全部的session;对于大规模集群环境不适用;
三、session server服务器:利用单独部署的服务器来统一管理session;
5、ipvsadm/ipvs的使用:
(1)首先要查看内核是否已经装有ipvs的模块或功能,若是没有须要从新编译内核
[23:13 root@centos6.8~]# cat /boot/config-2.6.32-642.el6.x86_64 |grep -A 10 -i 'ipvs' # IPVS transport protocol load balancing support #支持的协议 CONFIG_IP_VS_PROTO_TCP=y CONFIG_IP_VS_PROTO_UDP=y CONFIG_IP_VS_PROTO_AH_ESP=y CONFIG_IP_VS_PROTO_ESP=y CONFIG_IP_VS_PROTO_AH=y CONFIG_IP_VS_PROTO_SCTP=y # # IPVS scheduler #支持的调度算法 CONFIG_IP_VS_RR=m CONFIG_IP_VS_WRR=m CONFIG_IP_VS_LC=m CONFIG_IP_VS_WLC=m CONFIG_IP_VS_LBLC=m CONFIG_IP_VS_LBLCR=m CONFIG_IP_VS_DH=m CONFIG_IP_VS_SH=m CONFIG_IP_VS_SED=m CONFIG_IP_VS_NQ=m -- # IPVS application helper # CONFIG_IP_VS_FTP=m CONFIG_IP_VS_PE_SIP=m # # IP: Netfilter Configuration # CONFIG_NF_DEFRAG_IPV4=m CONFIG_NF_CONNTRACK_IPV4=m # CONFIG_NF_CONNTRACK_PROC_COMPAT is not set
(2)安装ipvsadm的客户端使用包
[23:21 root@centos6.8~]# yum install -y ipvsadm
ipvsadm的命令:
ipvsadm
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] [-M netmask]
ipvsadm -D -t|u|f service-address
ipvsadm -C
ipvsadm -R
ipvsadm -S [-n]
ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight] [-x upper] [-y lower]
ipvsadm -d -t|u|f service-address -r server-address
ipvsadm -L|l [options]
ipvsadm -Z [-t|u|f service-address]
(3)能够讲命令安装必定的功能分类:
集群服务相关:
-A: 添加一个集群服务
-t: tcp
-u: udp
-f: firewall mark,一般用于将两个或以上的服务绑定为一个服务进行处理时使用;
service-address:
-t VIP:port
-u VIP:port
-f firewall_mark
-s 调度方法,默认为wlc
-p timeout: persistent connection, 持久链接
-E:修改定义过的集群服务
-D -t|u|f service-address:删除指定的集群服务
RS相关:
-a:向指定的CS中添加RS
-t|-u|-f service-address:指明将RS添加至哪一个Cluster Service中
-r: 指定RS,可包含{IP[:port]},只有支持端口映射的LVS类型才容许此处使用跟集群服务中不一样的端口
LVS类型:
-g: Gateway, DR
-i: ipip, TUN
-m: masquerade, NAT
指定RS权重:
-w
-e: 修改指定的RS属性
-d -t|u|f service-address -r server-address:从指定的集群服务中删除某RS
清空全部的集群服务:
-C
保存规则:(使用输出重定向)
ipvsadm-save
ipvsadm -S
载入指定的规则:(使用输入重定向)
ipvsadm-restore
ipvsadm -R
查看ipvs规则等:
-L [options]
-n: 数字格式显示IP地址
-c: 显示链接数相关信息
--stats: 显示统计数据
--rate: 速率
--exact:显示统计数据的精确值
-Z: 计数器清零;
FWM:FireWall Mark :借助于防火墙标记来分类报文,然后基于标记定义集群服务;可将多个不一样的应用使用同一个集群服务进行调度;
打标记方法(在Director主机):
# iptables -t mangle -A PREROUTING -d $vip -p $proto --dport $port -j MARK --set-mark NUMBER
基于标记定义集群服务:
# ipvsadm -A -f NUMBER [options]
(4)lvs persistence:持久链接
持久链接模板:实现不管使用任何算法,在一段时间内,实现未来自同一个地址的请求始终发往同一个RS;
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]
port Affinity:
每端口持久:每集群服务单独定义,并定义其持久性;
每防火墙标记持久:基于防火墙标记定义持久的集群服务;可实现将多个端口上的应用统一调度,即所谓的port Affinity;
每客户端持久:基于0端口定义集群服务,即将客户端对全部应用的请求通通调度至后端主机,并且可以使用持久链接进行绑定;
(5)保存及重载规则:
保存:建议保存至/etc/sysconfig/ipvsadm
ipvsadm-save > /PATH/TO/IPVSADM_FILE
ipvsadm -S > /PATH/TO/IPVSADM_FILE
systemctl stop ipvsadm.service
重载:
ipvsadm-restore < /PATH/FROM/IPVSADM_FILE
ipvsadm -R < /PATH/FROM/IPVSADM_FILE
systemctl restart ipvsadm.service