Cluster 系统扩展的方式 scale up:向上扩展 scale out:向外扩展
集群类型 LB:负载均衡 HA HP
总结: 分层 分割 分布式 分布式应用 分布式静态资源 分布式数据和存储 分布式计算
LB集群的实现 硬件: F5 BIG-IP Citrix NetScaler A10 A10 Array Redware 软件: lvs haproxy nginx ats (apache traffic server) perlbal 基于工作的协议层次划分 传输层: lvs,haproxy(mode tcp)==>模拟成tcp,因为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钩子上
查看是否开启ipvs:
grep -i -A 10 "IPVS" /boot/config-3.10.0-693.el7.x86_64
出现
# 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
支持TCP,UDP,AH,EST,AH_EST,SCTP等诸多协议
Lvs-Type:
lvs-nat:MASQUERADE
lvs-dr:GATEWAY
lvs-tun:IPIP
lvs-fullnat
lvs arch: 调度器:director,dispatcher,balancer RS:Real Server
lvs-type(即架构类型)
lvs-nat
lvs-d(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地址进行转发
(1)保证前端路由器将目标ip为vip的请求报文发送给director
解决方案:
1.静态绑定
2.arptables
3.修改RS主机内核的参数
(2)RS的RIP可以使用私有地址,但也可以使用公网地址
(3)RS跟director必须在同一物理网络中
(4)请求报文经由director调度,但响应报文一定不能经由director
(5)不支持端口映射
(6)RS可以是大多数的OS
(7)RS的网关不能指向director的DIP
lvs-tun:
不修改请求报文的ip首部,而是通过在原有的ip首部(cip<--->vip)之外,在封装一个ip首部
(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可以使用任意OS
linux内核有个基本法则,响应报文从哪个网卡出去,源地址就是哪个地址
http:stateless session保持 session绑定 source ip hash cookie session集群 session服务器
lvs scheduler 涉及到起点公平和结果公平 静态方法:仅根据算法本身进行调度 RR:round robin,轮询 WRR:weighted rr,加权轮询 SH:source bash,实现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 Connections with Replication 带复制功能的LBLC算法
ipvs的及其服务: tcp,udp,ah,esp,ah_esp,sctp (1)一个ipvs主机可以同时定义多个cluster service tcp,udp (2)一个cluster service上至少应该一个real server 定义时要指明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 scheduler: 默认是wrc
管理集群服务中的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 ipvsadm -C server-address: ip[:port] lvs-type:(默认是dr模型) -g:gateway,dr -i:ipip,tun -m:masquerade,nat
清空和查看 ipvsadm -C ipvsadm -L|l [options] -n:numbers,基于数字格式显示地址和端口 -c:显示ipvs连接 --stats:输出统计数据 --rate:输出速率数据 [root@www /]# ipvsadm -L -n --rate IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port CPS InPPS OutPPS InBPS OutBPS -> RemoteAddress:Port TCP 192.168.137.143:80 0 1 1 90 79 -> 192.168.20.10:8080 0 0 0 6 10 -> 192.168.20.20:8080 0 0 0 83 69 PPS:每秒的包个数 BPS:每秒字节数 --excat:精确值
保存和重载 ipvsadm -R ipvsadm -S [-n]
置零计数器 ipvsadm -Z [-t|u|f service-address]
配置lvs-nat 拓扑:三台主机 两台做web服务器,即real server,一台做负载调度器 1.在调度器上做ipvs规则 ipvsadm -A -t 192.168.137.143:80 -s rr 2.在real server的配置 ipvsadm -a -t 192.168.137.143:80 -r 192.168.20.10 -m ipvsadm -a -t 192.168.137.143:80 -r 192.168.20.20 -m
改变调度器:
ipvsadm -E -t 192.168.137.143:80 -s sh
删除一个集群服务器:
ipvsadm -d -t 192.168.137.143:80 -r 192.168.20.10:8080
删除集群服务:
ipvsadm -D -t 192.168.137.143:80