一、Linux Cluster 基础:
Cluster:计算机集合为解决某个特定问题组合起来形成的单个系统
Linux Cluster类型:
LB(Load Banlancing):负载均衡
HA(High Availability):高可用。提高服务可用性,避免出现单点故障
HP(High Performance):高性能
可用性衡量公式:
A=MTBF/(MTBF+MTTR)
MTBF:平均无故障时间
MTTR:平均故障修复时间
A的取值范围(0,1)
系统扩展方式:
Scale UP:向上扩展。提升设备性能
Scale Out:向外扩展。
二、LB CLuster:
1、LB Cluster的实现:
硬件:
F5 Big-IP
Citrix Netscaler
A10 A10
软件:
lvs:Linux Virtual Server
nginx
haproxy
ats:apache traffic server
perlbal
pound
基于工作的协议层次划分:
传输层(通用):基于DIP Dport分发,类似于四层交换机。主要根据目标端口
lvs
nginx:基于stream机制模拟
haproxy:基于mode tcp机制模拟
应用层(专用):根据请求的内容进行分发
proxy server:
http:nginx(upstream), httpd(balancer), haproxy(mode http), …
fastcgi:nginx, httpd, …
mysql:mysql-proxy, …
ats、perball、pound
用户的会话保持:
(1) session sticky
在服务器端维护session会话表
Source IP
Cookie
(2) session replication;
session cluster
(3) session server
三、LVS:Linux Virtual Server
VS:Virtual Server,Director,Dispatcher,Balancer
RS:Real Server,Upstream Server,backend server
VS:工作在TCP/IP第四层。其作用为根据请求报文的目标IP和目标协议及端口将其调度转发至某Real Server,遵循调度算法来挑选RS
LVS:ipvsadm/ipvs
ipvsadm:用户空间的命令行工具,规则管理器,用于管理集群服务及Real Server;
ipvs:工作于内核空间的netfilter的INPUT钩子之上的框架;
CIP<–>VIP==DIP<–>RIP
在VS上需要开启ipv4的端口转发功能
四、LVS集群的类型:
1)、lvs-nat:类似于多目标的DNAT,修改请求报文的目标IP
2)、lvs-dr:在原请求之外,通过封装新的mac首部进行转发
3)、lvs-tun:ipip隧道。在原请求ip报文之外新加一个IP首部
4)、lvs-fullnat:修改请求报文的源和目标IP。
1、lvs-nat:多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某挑出的RS的Rip和Port实现转发。
(1)RIP和DIP必须在同一个IP网络,且应该使用私网地址;RS的网关要指向DIP。
(2)请求报文和响应报文都必须经由Director抓发;Director易于称为系统瓶颈。
(3)支持端口映射,可修改请求报文的目标Port。
(4)VS必须是Linux系统,RS可以是任意系统。
2、lvs-dr:Direct Routing
通过为请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口的MAC,目标MAC是挑选出来的RS的RIP所在的接口的MAC地址;源IP/PORT以及目标IP/PORT均保持不变。
DR的最初目的:
客户的请求到达VR之后,由VS挑选出一个RS进行直接响应,此响应不再经由VR。由此,可以增加VR的并发请求。要实现此目的:需要在每个RS上配置一个VIP,但需确保RS上的VIP不发送广播报文,因此RS上的VIP需配置在lo接口上。
1)确保前段路由器将目标IP为VIP的请求报文发往VS。如何实现VIP地址不冲突。
a)在前端网关做静态绑定
b)在RS上使用arptables
c)在RS上修改内核参数以限制arp通告及应答级别
arp_announce
arp_ignore
2)RS的RIP可以使用私网地址,也可以是公网地址;RIP与DIP在同一网络
3)RS跟VS需要在同一物理网络
4)请求报文经由VS,但响应报文不能经由VS,即RIP的网关不能为DIP,而是由RS直接法网Client
5)不支持端口映射
3、lvs-tun:实现跨互联网通信。VS与RS不在同一网络。
转发方式:不修改请求报文的IP首部(CIP:VIP),而是在原IP报文之外在封装一个IP首部(DIP:RIP),再将报文发送给挑选出的RS。
1)DIP、VIP、RIP都应该是公网地址
2)RS的网关不能执行DIP
3)请求报文经由VS,但响应不经由VS,而是RS直接发送给客户端
4)不支持端口映射
5)RS需支持隧道功能
4、lvs-fullnat:
通过同时修改请求报文的源IP地址和目标IP地址进行转发;
CIP –> DIP
VIP –> RIP
(1) VIP是公网地址,RIP和DIP是私网地址,且通常不在同一IP网络;因此,RIP的网关一般不会指向DIP;
(2) RS收到的请求报文源地址是DIP,因此,只需响应给DIP;但Director还要将其发往Client;
(3) 请求和响应报文都经由Director;
(4) 支持端口映射;
注意:此类型默认不支
五、LVS调度方法
ipvs scheduler:根据其调度时是否考虑各RS当前的负载状态,可分为静态方法及动态方法
1、静态方法:
RR:RoundRorbin,轮询
WRR:Weighted RR。加权轮询。权重越大,意味着其负载能力越强。
SH:Source Hashing,实现session sticky,源地址hash;将来自同一个ip地址的请求始终发往第一次挑中的RS,从而实现会话绑定。应用场景:实现会话绑定
DH:Destination Hash,目标地址hash,将发往同一目标地址的请求始终发至第一次挑中的RS。应用场景:缓存服务器
2、动态方法:主要根据每RS当前的负载状态及调度算法进行调度
LC(Least Connections):最少连接。
Overhead=activeconns*256+inactiveconns
overhead值小的获胜
WLC:Weighted LC
Overhead=(activeconns*256+inactiveconns)/weight
overhead值小的获胜
SED:Shortest Expection Delay
Overhead=((activeconns+1)*256)/weight
NQ:Never Queue
每台RS先接受一个请求,之后再按SED算法进行挑选。
LBLC:Locally-Based LC,动态的DH算法
LBLCR:LBLC with Replication,带复制功能的LBLC
六、使用ipvsadm管理lvs
1、管理集群服务:增、改、删;
增、改:ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] 删:ipvsadm -D -t|u|f service-address
service-address: VR服务器地址
-t|u|f:
-t: TCP协议的端口,VIP:TCP_PORT
-u: TCP协议的端口,VIP:UDP_PORT
-f:firewall MARK,是一个数字;
[-s scheduler]:指定集群的调度算法,默认为wlc;
2、管理集群上的RS:增、改、删;
增、改:ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight]
删:ipvsadm -d -t|u|f service-address -r server-address
server-address:rip[:port]
选项:
设定lvs类型:
-g: gateway, dr类型
-i: ipip, tun类型
-m: masquerade, nat类型
-w weight:设定权重;
3、清空定义的所有内容:ipvsadm -C
4、查看:
ipvsadm -L|l [options]
–numeric, -n:numeric output of addresses and ports
–exact:expand numbers (display exact values)
–connection, -c:output of current IPVS connections
–stats:output of statistics information
–rate :output of rate information
5、保存和重载:
ipvsadm -S = ipvsadm-save
ipvsadm -R = ipvsadm-restore
七、配置lvs-nat示例
实验环境:
VS CentOS6.8 interface:vmnet1,桥接网络 DIP:192.168.40.90 VIP:10.1.154.166
RS1 CentOS6.8 interface:vmnet1 RIP:192.168.40.100
RS2 CentOS6.8 interface:vmnet1 RIP:192.168.40.101
配置步骤:
1、确保RS1、RS2、VS三台服务器的时间是同步的。
2、在RS1配置IP地址,配置httpd服务,指定默认路由为DIP;RS2上同样的配置。
3、在VS上开启端口转发功能,安装ipvsadm,配置ipvsadm。
ipvsadm -A -t 10.1.154.166:80 -s rr
ipvsadm -a -t 10.1.154.166 -r 192.168.40.100:80 -m
ipvsadm -a -t 10.1.154.166 -r 192.168.40.101:80 -m
4、其他查看示例
八、负载均衡集群设计要点
1、是否需要会话保持
2、是否需要共享存储
共享存储解决方案:NAS、SAN、DS(分布式存储)
数据同步:rsync(不适用于数据量较大场景)+inotify实现数据同步
九、LVS-DR的实现
1、DR模型中,VR和SR上均需要配置VIP,解决地址冲突的方式有三种:
(1) 在前端网关做静态绑定;
(2) 在各RS使用arptables;
(3) 在各RS修改内核参数,来限制arp响应和通告的级别;
限制响应级别:arp_ignore
0:默认值,表示可使用本地任意接口上配置的任意地址进行响应;
1: 仅在请求的目标IP配置在本地主机的接收到请求报文接口上时,才给予响应;
限制通告级别:arp_announce
0:默认值,把本机上的所有接口的所有信息向每个接口上的网络进行通告;
1:尽量避免向非直接连接网络进行通告;
2:必须避免向非本网络通告;
2、LVS-DR实验1:DIP、VIP、RIP属于同一网络
a、网络结构
b、在RS1上的配置:
1)配置内核参数,限制arp响应及通告。
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
2)在lo网卡上配置VIP
ifconfig lo:0 192.168.154.200 netmask 255.255.255.255
3)配置主机路由
route add -host 192.168.154.200 lo
4)开启httpd服务
c、RS2上的配置同RS1
d、在VS上配置:
1)配置VIP
ifconfig eth1:0 192.168.154.200 netmask 255.255.255.255
2)配置ipvsadm
ipvsadm -A -t 192.168.154.200:80 -s wrr
ipvsadm -a -t 192.168.154.200:80 -r 192.168.154.127:80 -g -w 1
ipvsadm -a -t 192.168.154.200:80 -r 192.168.154.128:80 -g -w 2
e、在客户端上做测试
十、基于FWM配置集群服务
在RS1、RS2上新增mysql服务,将其定义为一个集群。
此时http与mysql集群并不会被当作一个集群服务进行调度,如何实现将多个服务使用同一个集群服务来调度。需要用到FWM
FWM:FireWall Mark
借助于防火墙标记来分类报文,而后基于标记定义集群服务;可将多个不同的应用使用同一个集群服务进行调度;
配置步骤
1、在防火墙上打标记
iptables -t mangle -A PREROUTING -d 192.168.154.200 -p tcp -m multiport –dports 80,3306 -j MARK –set-mark 11
2、基于标记配置ipvs
ipvsadm -A -f 11 -s wrr
ipvsadm -a -f 11 -r 192.168.154.127 -g -w 1
ipvsadm -a -f 11 -r 192.168.154.128 -g -w 1
十一:LVS持久链接(Persistence)
持久连接模板:实现无论使用任何算法,在一定时间之内,实现将来自同一个ip地址的请求始终发往同一个RS。
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]
测试
mysql服务连接的也是RS2
port Affinity:
每端口持久:每集群服务单独定义,并定义其持久性;
每防火墙标记持久:基于防火墙标记定义持久的集群服务;可实现将多个端口上的应用统一调度,即所谓的port Affinity;
每客户端持久:基于0端口定义集群服务,即将客户端对所有应用的请求统统调度至后端主机,而且可使用持久连接进行绑定;
十二:ipvsadm规则的保存与重载
1、保存:建议保存至/etc/sysconfig/ipvsadm
ipvsadm-save > /PATH/TO/IPVSADM_FILE
ipvsadm -S > /PATH/TO/IPVSADM_FILE
systemctl stop ipvsadm.service
2、重载:
ipvsadm-restore < /PATH/FROM/IPVSADM_FILE
ipvsadm -R < /PATH/FROM/IPVSADM_FILE
systemctl restart ipvsadm.service
考虑:
(1) Director不可用,整个系统将不可用;SPoF单点故障
解决方案:高可用
keepalived
heartbeat/corosync
(2) 某RS不可用时,Director依然会调度请求至此RS;
解决方案:对各RS的健康状态做检查,失败时禁用,成功时启用;
keepalived
heartbeat/corosync, ldirectord
检测方式:
(a) 网络层检测;ping
(b) 传输层检测,端口探测;
(c) 应用层检测,请求某关键资源;
测试多次,间隔测试,多次失败,判断失败
请求超时时间,请求时间间隔,请求次数。
ok –> failure
failure –> ok
但,director无法完成健康状态检测,需要keepalived来配合完成。
原创文章,作者:M20-1钟明波,如若转载,请注明出处:http://www.178linux.com/57004