LB集群实现前端
硬件nginx
1 F5 2 BIG-IP 3 Citrix NetScaler 4 A10 5 Redware
软件算法
1 lvs 2 haproxy 3 nginx 4 ats apache traffic server 5 perlbal 基于工做协议层次划分 传输层 lvs,haproxy(mode tcp) 应用层 naproxy, nginx, ats, perlbar
LVS基础知识apache
工做在传输层的软件(TCP/IP协议栈),能基于TCP和UDP(目标IP和目标PORT)对请求进行负载均衡,也称四层交换、四层路由 能根据负载均衡算法发送至后端主机集群中某一台主机 netfilter链使用 PREROUTING ---> INPUT ---> POSTROUTING ipvsadm 用户空间命令行工具,定义集群规则,管理集群服务 ipvs 工做在内核中netfilter INPUT钩子上 ipvsadm经过系统调用将规则发送给ipvs 支持TCP、UDP、AH、EST、AH_EST、SCTP等诸多协议
查看内核编译IPVS状况后端
1 grep -i -A 10 'IPVS' /boot/config-3.10.0-693.17.1.el7.x86_64
LVS Arch服务器
1 调度器:director, dispatcher, balancer 2 RS:Real Server
LVS Typecookie
lvs-nat网络
MASQUERADE类型 多目标的DNAT模式(iptables):它经过修改请求报文的目标IP地址(必要时一并修改目标PORT)至挑选出的Real Server的IP地址实现转发 特性 1. RealServer的IP地址和DIP使用私网地址 2. 请求和响应报文都经由调度器转发,极高负载的场景中,调度器:director可能会成为系统瓶颈 3. 支持端口映射 4. RealServer可使用任意OS 5. RIP 和 DIP 最好在同一IP网络
lvs-dr (direct routing)session
GATEWAY类型 它经过修改请求报文的目标mac地址进行转发 1. 保证前端路由器将目标IP为VIP的请求报文发送给Director 静态绑定 arptables 修改RS主机的内核参数 2. RIP可使用私网地址也可使用公网地址,只要保证能和Director、公网通讯 3. RealServer 和 Director 要在一个局域网中 4. 请求报文经由Director调度,但响应报文直接由Real Server发送 5. RealServer网关不能指向DIP 6. 不支持端口映射 7. RealServer能够用大多数OS
lvs-tun (ip tunneling)负载均衡
IPIP类型 1. RIP,DIP,VIP全都是公网地址 2. RealServer的网关不能指向DIP 3. 请求报文必须由Director调度,但响应报文必须由RealServer发送 4. 不支持端口映射 5. RealServer必须支持隧道功能
lvs-fullnat
Director经过同时修改请求报文的目标地址和源地址进行转发 1. VIP是公网地址,RIP和DIP是私网地址,两者无须在同一网络中 2. Real Server 接收到请求报文的源地址为DIP,所以要响应给DIP 3. 请求报文和响应报文都经由Director 4. 支持端口映射机制 5. Real Server 可使用任意OS
LVS Scheduler
静态方法:仅根据算法自己调度 RR round robin,轮询 WRR weight round robin,加权轮询 DH destination hash,将对同一个目标的请求始终调度至同一RealServer SH source hash,session保持机制 动态方法:根据算法和各RealServer当前负载状态进行调度 LC least connection,最少活动链接 Overhead(负载) = Active * 256 + Inactive WLC weight least connection,加权最少活动链接 Overhead = (Active * 256 + Inactive) / weight SED shortest expection delay,最短时间望延迟 Overhead = (Active + 1 ) * 256 NQ never queue,永不排队 SED算法改进:第一轮用SED挑,挑一个排除一个,直到全部的RS都处理过一个请求,后续的使用SED处理 LBLC locality-based least connection,动态DH算法 正向代理情形下的cache server调度 LBLCR Locality-Based Least-Connection with Replication,带复制功能的LBLC
ipvs集群服务
1. 一个ipvs主机能够同时定义多个cluster service 2. 一个cluster service上至少应该有一个Real Server 3. 定义cluster service时,要同时指明lvs-type、lvs scheduler
ipvsadm用法
service-address tcp:-t ip:port udp:-u ip:port fwm:-f mark server-address ip[:port] lvs-type -g:gateway,dr -i:ipip,tun -m:masquerade,nat scheduler -s:默认为wlc 管理集群服务 ipvsadm -A|E -t|u|f service-address [-s scheduler] ipvsadm -D -t|u|f service-address 管理集群服务的RealServer ipvsadm -a|e -t|u|f service-address -r server-address ipvsadm -d -t|u|f service-address -r server-address 清空和查看 ipvsadm -C ipvsadm -L|l [options] -n:numberic,以数字格式显示地址和端口 -c:connection,显示当前TCP链接 --stats,statistics,显示统计数据 --rate:速率 --sort:排序 --exact:精确值 保存和重载 ipvsadm -R ipvsadm -S [-n] 置零计数器 ipvsadm -Z [-t|u|f service-address]
实例:lvs-nat
Director VIP 192.168.111.128 DIP 192.168.1.1 RealServer(Web Server) RIP1 192.168.1.2:8080 RIP2 192.168.1.3:8080 ipvsadm -A -t 192.168.111.128:80 -s rr ipvsadm -a -t 192.168.111.128:80 -r 192.168.1.2 -m ipvsadm -a -t 192.168.111.128:80 -r 192.168.1.3 -m ipvsadm -L -n ipvsadm -E -t 192.168.111.128:80 -s sh ipvsadm -L -n ipvsadm -e -t 192.168.111.128:80 -r 192.168.1.2:8080 -m ipvsadm -e -t 192.168.111.128:80 -r 192.168.1.3:8080 -m ipvsadm -S > /etc/sysconfig/ipvsadm || ipvsadm-save
实例:lvs-dr
Director VIP 192.168.111.10 DIP 192.168.111.128 RealServer(Web Server) RIP1 192.168.111.11 gw 192.168.111.1 VIP1(lo) 192.168.111.10 RIP2 192.168.111.12 gw 192.168.111.1 VIP2(lo) 192.168.111.10 LAN-ARP问题解决(多个VIP地址相同,IP地址必须惟一) 修改RealServer两个内核参数 arp_announce 0 通告自身拥有的全部地址 1 尽可能避免把非本网络的地址往外通告 2 老是使用最佳地址向外通告(能解决问题) arp_ignore 0 通告自身拥有的全部地址 1 请求报文从哪一个接口进入,就用哪一个接口的地址响应(能解决问题) Director VIP Configure (alias broadcast intface_network) ifconfig ens33:0 192.168.111.10/32 broadcast 192.168.111.10 up route add -host 192.168.111.10 dev ens33:0 Real Server Configure (defined kernel args) echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore echo 1 > /proc/sys/net/ipv4/conf/ens33/arp_ignore echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce echo 2 > /proc/sys/net/ipv4/conf/ens33/arp_announce ifconfig lo:0 192.168.111.10/32 broadcast 192.168.111.10 up route add -host 192.168.111.10 dev lo:0 IPVS Rule ipvsadm -A -t 192.168.111.10:80 -s rr ipvsadm -a -t 192.168.111.10:80 -r 192.168.111.11 -g ipvsadm -a -t 192.168.111.10:80 -r 192.168.111.12 -g 多服务负载使用同一集群 将共享同一组RS的集群服务同一进行定义 Directior # 使用FWM定义集群 iptables -t mangle -A PREROUTING -d 192.168.111.10 -p tcp -dport 80 -j MARK --set-mark 10 iptables -t mangle -A PREROUTING -d 192.168.111.10 -p tcp -dport 443 -j MARK --set-mark 10 # iptables -t mangle -A PREROUTING -d 192.168.111.10 -p tcp -dport 22 -j MARK --set-mark 10 # 基于FWM定义集群服务 ipvsadm -A -f 10 -s rr ipvs -a -f 10 -r 192.168.111.11 ipvs -a -f 10 -r 192.168.111.12
实例:lvs-dr (RIP,DIP不在同一网段)
1 加一台Route Host两个IP地址,一个能和公网通讯,另外一个是RIP的网关 2 这样即便RIP和DIP不在同一网段,也能经过这台路由器转发数据包 3 路由器既要对DIP到RIP的数据包进行转发,也要对VIP到CIP的数据包进行转发
RealServer高可用
防止:RS宕机而Director还继续对它进行调度 方法:让Director对其作健康状态检测机制,并根据检测的结果自动完成添加或移除等管理功能 总结 1. 基于协议层检测 网络层:icmp 传输层:检测端口的开放状态 应用层:请求获取关键性资源 2. 检查频率 3. 状态判断 下线: success ---> failure ---> failure ---> failure 上线:failure ---> success ---> success ---> success 4. 日志问题 作PV时,健康检测访问Web的日志不该该被算入正常请求日志 5. back server, sorry server 全部RS宕机时,须要反馈用户一些信息 默认sorry server weight为0,当全部RS宕机时sorry为1
解决Session保持问题
session绑定 object source ip hash cookies hash lvs sh 未来自同一个用户IP的请求都定向到同一个Real Server,自行维护一个会话追踪表 lvs persistence 不管ipvs使用何种调度方法,其都能实现未来自同一个Client的请求始终定向至上一次调度时挑选出的RS 需求:持久链接模板,sourceip realserver timer,每一个链接都有一个计数器, 存储在模板中,为LVS提供算法调度的参数 持久链接的实现方式 每一个端口持久:PPC,单服务持久调度 每一个FWM持久:PFWMC,单FWM持久调度 PORT AFFINITY 每一个客户端持久:PCC,单客户端持久调度 Director会将用户的任何请求都识别为集群服务,并向RS进行调度 使用:-p指定超时时间单位s ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] session复制 ... session集群 ... session服务器 ...