标签:静态绑定 cer oca 机制 实践 ports point replica vip
Cluster 简介:集群类型:
LB:负载均衡集群,Load Balancing
HA:高可用集群,High Availability
HP:高性能集群,High Performancing
Availability=90%,95%, 99%, 99.5%, 99.9%, 99.99%, 99.999%
系统:
可扩展性
可用性
容量
性能
系统运维:可用 --> 标准化 --> 自动化
www.top500.org
构建高可扩展性系统的重要原则:在系统内部尽量避免串行化和交互;
GSLB: Global Service Load Balancing
SLB: Service Load Balancing
总结:
分层
分割
分布式
分布式应用
分布式静态资源
分布式数据和存储
分布式计算
LB集群的实现:
硬件:
F5 BIG-IP
Citrix NetScaler
A10 A10
Array
Redware
软件:
lvs
haproxy
nginx
ats (apache traffic server)
perlbal
基于工作的协议层次划分:
传输层:
lvs, haproxy(mode tcp)
应用层:
haproxy, nginx, ats, perlbal
lvs介绍:
lvs: Linux Virtual Server
l4: 四层交换,四层路由;
根据请求报文的目标IP和PORT将其转发至后端主机集群中的某一台主机(根据挑选算法);
netfilter:
PREROUTING --> INPUT
PREROUTING --> FORWARD --> POSTROUTING
OUTPUT --> POSTROUTING
lvs:
ipvsadm/ipvs
ipvsadm: 用户空间的命令行工具,用于管理集群服务;
ipvs: 工作内核中netfilter INPUT钩子上;
支持TCP, UDP, AH, EST, AH_EST, SCTP等诸多协议;
lvs arch:
调度器:director, dispatcher, balancer
RS: Real Server
Client IP: CIP
Director Virutal IP: VIP
Director IP: DIP
Real Server IP: RIP
lvs type:
lvs-nat
lvs-dr(direct routing)
lvs-tun(ip tunneling)
lvs-fullnat
lvs-nat:
多目标的DNAT(iptables);它通过修改请求报文的目标IP地址(同时可能会修改目标端口)至挑选出某RS的RIP地址实现转发;
(1) RS应该和DIP应该使用私网地址,且RS的网关要指向DIP;
(2) 请求和响应报文都要经由director转发;极高负载的场景中,director可能会成为系统瓶颈;
(3) 支持端口映射;
(4) RS可以使用任意OS;
(5) RS的RIP和Director的DIP必须在同一IP网络;
lvs-dr: direct routing
它通过修改请求报文的目标MAC地址进行转发;
Director: VIP, DIP
RSs: RIP, VIP
(1) 保证前端路由器将目标IP为VIP的请求报文发送给director;
解决方案:
静态绑定
arptables
修改RS主机内核的参数
(2) RS的RIP可以使用私有地址;但也可以使用公网地址;
(3) RS跟Director必须在同一物理网络中;
(4) 请求报文经由Director调度,但响应报文一定不能经由Director;
(5) 不支持端口映射;
(6) RS可以大多数OS;
(7) RS的网关不能指向DIP;
lvs-type:
lvs-nat: RIP与DIP必须在同一网段;
lvs-dr:Director与RS必须在同一物理网络;
lvs-tun:
不修改请求报文的ip首部,而是通过在原有的ip首部(cip<-->vip)之外,再封装一个ip首部(dip<-->rip);
(1) RIP, DIP, VIP全得是公网地址;
(2) RS的网关的不能指向DIP;
(3) 请求报文必须经由director调度,但响应报文必须不能经由director;
(4) 不支持端口映射;
(5) RS的OS必须支持隧道功能;
lvs-fullnat:
director通过同时修改请求报文的目标地址和源地址进行转发;
(1) VIP是公网地址;RIP和DIP是私网地址,二者无须在同一网络中;
(2) RS接收到的请求报文的源地址为DIP,因此要响应给DIP;
(3) 请求报文和响应报文都必须经由Director;
(4) 支持端口映射机制;
(5) RS可以使用任意OS;
http: stateless
session保持:
session绑定:
source ip hash
cookie
session集群:
session服务器:
LVS调度器:
lvs scheduler: #调度器
静态方法:仅根据算法本身进行调度; #起点公平
RR:round robin,轮调
WRR:weighted rr, 加权轮询
SH: source hash, 实现session保持的机制;将来自于同一个IP的请求始终调度至同一RS;
DH:destination hash, 将对同一个目标的请求始终发往同一个RS;
动态方法:根据算法及各RS的当前负载状态进行调度; #结果公平
Overhead=
LC:Least Connection #最小连接数
Overhead=Active256+Inactive
WLC: Weighted LC #加权最小连接数
Overhead=(Active256+Inactive)/weight
SED: Shortest Expection Delay #最短期望延迟
Overhead=(Active+1)*256/weight
NQ:Never Queue #永不排队
SED算法的改进;
LBLC:Locality-Based LC,即为动态的DH算法;
正向代理情形下的cache server调度;
LBLCR:Locality-Based Least-Connection with Replication,带复制功能的LBLC算法;
ipvs的集群服务:
tcp, udp, ah, esp, ah_esp, sctp
(1) 一个ipvs主机可以同时定义多个cluster service; #cluster service 集群服务
tcp, udp
(2) 一个cluster service上至少应该一个real server; #real server 后端主机
定义时:指明lvs-type, 以及lvs scheduler; #lvs-type 集群类型 ; lvs scheduler集群调度算法
ipvsadm的用法:
管理集群服务
ipvsadm -A|E -t|u|f service-address [-s scheduler] #增加命令
ipvsadm -D -t|u|f service-address #删除命令
service-address:
tcp: -t ip:port
udp: -u ip:port
fwm: -f mark #防火墙标记
-s scheculer: #指定调度器
默认为wlc
管理集群服务中的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:
ip[:port]
lvs-type:
-g: gateway, dr
-i: ipip, tun
-m: masquerade, nat
清空和查看:
ipvsadm -C #清空命令
ipvsadm -L|l [options] #查询命令
-n: numeric,基于数字格式显示地址和端口;
-c: connection,显示ipvs连接;
--stats:统计数据
--rate: 速率
--exact: 精确值
保存和重载:
ipvsadm -R #重载
ipvsadm -S [-n] #保存
置零计数器:
ipvsadm -Z [-t|u|f service-address]
DR模型实践:
lvs-dr:
两个内核参数:
arp_ignore #是否响应对方
参数:0-8
0、只要我收到请求,我有我就响应
1、请求报文从哪个接口进,就从哪个接口出。
arp_announce #是否向对方通告
参数有0、1、2
0、通告所有网络
1、尽量不要将我的网段通告给其他网段。
2、只能用最佳网络地址向网络通告
director:
~]# ifconfig eno16777736:0 172.16.100.10/32 broadcast 172.16.100.10 up
~]# route add -host 172.16.100.10 dev eno16777736:0
RS:
~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
~]# echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
~]# echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
~]# ifconfig lo:0 172.16.100.10/32 broadcast 172.16.100.10 up
~]# route add -host 172.16.100.10 dev lo:0
FWM定义集群:
netfilter:
PREROUTING --> INPUT
PREROUTING --> FORWARD --> POSTROUTING
OUTPUT --> POSTROUTING
ipvs: INPUT
FWM:
PREROUTING:
-j MARK --set-mark 10
ipvs:
-A -f 10
通过FWM定义集群的方式:
(1) 在director上netfilter的mangle表的PREROUTING定义用于“打标”的规则
~]# iptables -t mangle -A PREROUTING -d $vip -p $protocol --dports $port -j MARK --set-mark #
$vip: VIP地址
$protocol:协议
$port: 协议端口
(2) 基于FWM定义集群服务:
~]# ipvsadm -A -f # -s scheduler
~]#
功用:将共享一组RS的集群服务统一进行定义;
会话保持,持久连接
session保持:
session绑定
session复制
session服务器
session绑定:lvs sh算法
对某一特定服务;
lvs persistence:lvs的持久连接 #在执行参数时,加入-p选项即可进行持久连接设置,该设置默认是300s
ipvsadm -A -t 192.168.0.10:0 -s rr -p
ipvsadm -a -t 192.168.0.10:0 -r 172.168.100.21 -g
ipvsadm -a -t 192.168.0.10:0 -r 172.168.100.22 -g
功能:无论ipvs使用何种调度方法,其都能实现将来自于同一个Client的请求始终定向至第一次调度时挑选出的RS;
持久连接模板:独立于算法
sourceip rs timer
对多个共享同一组RS的服务器,需要统一进行绑定?
持久连接的实现方式:
每端口持久:PPC,单服务持久调度
每FWM持久:PFWMC,单FWM持久调度
PORT AFFINITY
每客户端持久:PCC,单客户端持久调度
director会将用户的任何请求都识别为集群服务,并向RS进行调度
TCP:1-65535
UDP: 1-65535
HA:
SPOF: Single Point of Failure
director: 高可用集群;
realserver: 让director对其做健康状态检测,并且根据检测的结果自动完成添加或移除等管理功能;
1、基于协议层次检查
ip: icmp
传输层:检测端口的开放状态
应用层:请求获取关键性的资源
2、检查频度 #取决用户层面或者业务架构层次
3、状态判断
下线:ok --> failure --> failure --> failure
上线:failure --> ok --> ok
4、back server, sorry server
标签:静态绑定 cer oca 机制 实践 ports point replica vip
原文地址:http://blog.51cto.com/zhanx/2341204