02-lvs
参考文献:http://www.linuxvirtualserver.org/zh/lvs1.html
l4
四层交换,四层路由
根据请求报文的目标IP和目标PORT将其转发至后端主机集群中的某台服务器(根据调度算法)
lvs在INPUT链上强行把报文送给POSTROUTING链,因此在director中的INPUT的链上不可以使用iptables的filter规则
lvs cluster term
vs:virtual server
director,dispatcher,balancer
rs:real server
cip:client ip
director virtual ip:vip
director ip:dip
real server ip:rip
lvs:
ipvsadm/ipvs
ipvsadm:用户空间的命令行工具,用于管理几区服务及集群服务器上的RS等
ipvs:工作于内核上的netfilter INPUT钩子之上的程序
其集群功能依赖于ipvsadm定义的集群服务器规则
支持tcp、udp、ah、est、ah_est、sctp等协议的众多服务
ipvs:内核
ipvsadm:用户空间
lvs type
lvs-nat
通过网络地址转换,调度器重写请求报文的目标地址,根据预设的调度算法,将请求分派给后端的真实服务器;真实服务器的响应报文通过调度器时,报文的源地址被重写,再返回给客户,完成整个负载调度过程。
多目标的DNAT:通过将请求报文的目标地址和目标端口修改为挑选出某RS的RIP和PORT来实现
1、RS应该和DIP使用私网地址,各RS的网关应该指向DIP
2、请求和响应报文都要经由director转发;极高负载的场景中,director可能会成为系统瓶颈
3、支持端口映射
4、VS必须为Linux系统,RS可以是任意OS,只要提供相应的服务就行
5、RS的RIP与Director的DIP必须在同一网络
lvs-dr(direct routing)
VS/DR通过改写请求报文的MAC地址,将请求发送到真实服务器,而真实服务器将响应直接返回给客户。同VS/TUN技术一样,VS/DR技术可极大地 提高集群系统的伸缩性。这种方法没有IP隧道的开销,对集群中的真实服务器也没有必须支持IP隧道协议的要求,但是要求调度器与真实服务器都有一块网卡连 在同一物理网段上。
通过修改请求报文的MAC地址进行转发:IP首部不会发生变化(源IP为CIP,目标IP为VIP)
1、确保前端路由器 将目标IP为VIP的请求报文一定会发送给Director
解决方案:
静态绑定:但是lvs就不能做HA,因为前端路由器静态绑定了lvs得MAC地址
禁止RS响应VIP的ARP请求
a、arptables
b、修改各RS的内核参数,并把VIP配置在特定的接口上实现禁止其相应
2、RS的RIP可以使用私网地址,也可以使用公网地址
因为只要RS的报文可以路由到公网上
3、RS跟Director必须在同一物理网络中(以太网就都是以太网)
4、请求报文必须由Director调度,但响应报文必须不能经由Director
5、不支持端口映射
6、各RS可以使用大多数的OS
lvs-tun(ip tunneling)
采用NAT技术时,由于请求和响应报文都必须经过调度器地址重写,当客户请求越来越多时,调度器的处理能力将成为瓶颈。为了解决这个问题,调度器把请求报 文通过IP隧道转发至真实服务器,而真实服务器将响应直接返回给客户,所以调度器只处理请求报文。由于一般网络服务应答比请求报文大许多,采用 VS/TUN技术后,集群系统的最大吞吐量可以提高10倍。
不修改请求报文的IP首部(源IP为CIP,目标IP为VIP),而是在原有的IP首部之外再次封装一个IP首部(源IP为DIP,目标IP为RIP)
这种方式要求报文的封装长度不要超过MTU
1、RIP,DIP、VIP全得是公网地址
2、RS的网关不能也不可能指向DIP
3、请求报文经由Director调度,而响应报文将直接发送给CIP
4、不支持端口映射
5、RS的OS必须支持隧道功能
lvs-fullnat(同时改变请求的源IP和目标IP)
通过同时修改请求报文的源IP地址(cip-->dip)和目标IP地址(vip-->rip)实现转发
1、VIP是公网地址:RIP和DIP是私网地址,且可以不在同一IP网络中,但需要通过路由互相通信
2、RS收到的请求报文的源IP为DIP,因此其响应报文将发送给DIP
3、请求报文和响应报文都必须经由Director
4、支持端口映射
5、RS可使用任意类型的OS
lvs scheduler
静态方法:仅根据算法本身进行轮调
RR:round robin轮询
调度器通过”轮叫”调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载。
WRR:weighted rr圈圈加权轮询
调度器通过”加权轮叫”调度算法根据真实服务器的不同处理能力来调度访问请求。这样可以保证处理能力强的服务器处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
SH:source ip hashing源地址哈希
“源地址散列”调度算法根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。
负载均衡器位于server端。
DH:destination ip hashing目标地址哈希
“目标地址散列”调度算法根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。
负载均衡器位于client端。DH用户记录client的各个请求经过哪个路由发出
正向web代理,负载均衡内网用户对互联网的请求
client-director-web cache server
动态方法:根据算法及其各RS当前的负载状态进行评估
LC:least connection最少链接
overhead=active*256+inactive
调度器通过”最少连接”调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用”最小连接”调度算法可以较好地均衡负载。
WLC:weighted LC
overhead=(active*256+inactive)/weight
在集群系统中的服务器性能差异较大的情况下,调度器采用”加权最少链接”调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
SED:Shortest Expectation Delay
overhead=(active+1)*256/weight
NQ:Never Queue
LBLC:locality-based LC
动态的DH算法
“基于局部性的最少链接” 调度算法是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器 是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用”最少链接”的原则选出一个可用的服务 器,将请求发送到该服务器。
LBLCR:LBLC with replication
“带复制的基于局部性最少链接”调度算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。它与LBLC算法的不同之处是它要维护从一个 目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。该算法根据请求的目标IP地址找出该目标IP地址对应的服务 器组,按”最小连接”原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器,若服务器超载;则按”最小连接”原则从这个集群中选出一 台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的 程度。
ipvs的集群服务
四层交换(四层路由)
tcp、udp、sctp、ad、esp、ah_esp
1、一个ipvs主机可以同时定义多个cluster service
端口绑定http、https
多种服务http、mysql
2、一个ipvs服务至少应该一个RS
查看内核是否支持
内核配置中如果有ipvs则支持lvs
[root@husa ~]# grep -i -C 3 "ipvs" /boot/config-3.10.0-229.el7.x86_64
CONFIG_NETFILTER_XT_MATCH_HELPER=m
CONFIG_NETFILTER_XT_MATCH_HL=m
CONFIG_NETFILTER_XT_MATCH_IPRANGE=m
CONFIG_NETFILTER_XT_MATCH_IPVS=m
CONFIG_NETFILTER_XT_MATCH_LENGTH=m
CONFIG_NETFILTER_XT_MATCH_LIMIT=m
CONFIG_NETFILTER_XT_MATCH_MAC=m
--
CONFIG_IP_VS_TAB_BITS=12
#
# IPVS transport protocol load balancing support
#
CONFIG_IP_VS_PROTO_TCP=y
CONFIG_IP_VS_PROTO_UDP=y
--
CONFIG_IP_VS_PROTO_SCTP=y
#
# IPVS scheduler
#
CONFIG_IP_VS_RR=m
CONFIG_IP_VS_WRR=m
--
CONFIG_IP_VS_NQ=m
#
# IPVS SH scheduler
#
CONFIG_IP_VS_SH_TAB_BITS=8
#
# IPVS application helper
#
CONFIG_IP_VS_FTP=m
CONFIG_IP_VS_NFCT=y
安装ipvsadm
[root@husa ~]# yum install ipvsadm
---> 软件包 ipvsadm.x86_64.0.1.27-7.el7 将被 安装
--> 解决依赖关系完成
依赖关系解决
========================================================================================
Package 架构 版本 源 大小
========================================================================================
正在安装:
ipvsadm x86_64 1.27-7.el7 classRoom 45 k
事务概要
========================================================================================
正在安装 : ipvsadm-1.27-7.el7.x86_64 1/1
验证中 : ipvsadm-1.27-7.el7.x86_64 1/1
已安装:
ipvsadm.x86_64 0:1.27-7.el7
完毕!
ipvsadm使用方法
管理集群服务
ipvsadm -A|E -t|u|f service-address [-s scheduler]
[-p [timeout]] [-M netmask] [-b sched-flags]
ipvsadm -D -t|u|f service-address
-A:添加
-E:修改
-D:删除
service-address
-t:tcp,ip:port
-u:udp,ip:port
-f:fwm,MARK
-s scheduler:
调度方法默认为wlc(weighted least connection)
管理集群服务上的RS
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
-a:添加一个RS
-e:修改一个RS
-d:删除一个RS
service-address
-t:tcp,vip:port
-u:udp,vip:port
-f:fwm,MARK
server-address
rip[:port]
-g:GATWAY表示DR模型,默认类型
-i:IPIP模型,tunnel模型
-m:MASQUERADE模型,NAT模型
查看
ipvsadm -L|l [options]
-n:numeric,数字格式显示地址和端口
-c:connection,显示ipvs连接
--stats:统计数据
--rate:速率
--exact:精确值
[root@husa ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
[root@husa ~]# ipvsadm -L -n --rate
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port CPS InPPS OutPPS InBPS OutBPS
-> RemoteAddress:Port
[root@husa ~]# ipvsadm -L -n --stats
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Conns InPkts OutPkts InBytes OutBytes
-> RemoteAddress:Port
[root@husa ~]# ipvsadm -L -n --exact
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
保存
使用重定向
ipvsadm -S [-n] > /path/to/somefile
ipvsadm-save > /path/to/somefile
重载
使用重定向
ipvsadm -R < /path/to/somefile
iptables-restore > /path/to/somefile
计数器清零
ipvsadm -Z [-t|u|f service-address]
清空
ipvsadm -C
director上面不要使用iptables的filter功能,要禁用这个功能