持续连接
1)持久连接(lvs persistence)模板:
实现无论使用任何调度算法,在一段时间内(默认360s),能够实现将来自同一个地址的请求始终发往同一个RS ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] -p # :定义持久时长 2)持久连接实现方式: 每端口持久(PPC):每个端口对应定义为一个集群服务,每个集群服务单独调度,同一服务持久 每防火墙标记持久(PFWMC ):基于防火墙标记定义集群服务,可实现将多个端口上的应用统一调度,即所谓的port Affinity,同一防火墙标记持久 每客户端持久(PCC ):基于0端口(表示所有服务)定义集群服务,即将客户端对所有应用的请求都调度至后端主机,必须定义为持久模式,所有服务持久将vip的端口定义为0,则表示所有请求都将发送后台服务器。 3)具体实现 在VS上进行如下操作 [root@centos7 ~]#ipvsadm -E -f 12 -s rr -p 300 [root@centos7 ~]#ipvsadm -Ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn FWM 12 rr persistent 300 -> 192.168.74.129:0 Route 1 0 0 -> 192.168.74.133:0 Route 1 0 0
session保存机制(会话机制)
session绑定(session sticky)
始终将同一个请求者的请求发送到同一台RS(第一次请求由算法调度)
缺陷:没有容错能力,若此RS宕机,则会话丢失,并且将同一请求发送到同一RS有损均衡效果。
session复制(session cluster)
在RS之间同步session,因此每个RS都保持集群中的所有session
缺陷:增加了RS的负担,对大规模的集群不适用
session服务器(session server),redis:
用单独一组服务器来管理session
LVS的高可用
1.Director 不可用,整个系统将不可用,SPoF Single Point of Failure 解决方案:高可用 keepalived heartbeat/corosync 2.某RS不可用时,Director 依然会调度请求至此RS 解决方案:由Director 对各RS健康状态进行检查,失败时禁用,成功时启用 keepalived heartbeat/corosync, ldirectord 检测方式: (a) 网络层检测,icmp (b) 传输层检测,端口探测 (c) 应用层检测,请求某关键资源 RS 全不用时:back server, sorry server ldirectord ldirectord :监控和控制LVS 守护进程,可管理LVS 规则 包名:ldirectord-3.9.6-0rc1.1.1.x86_64.rpm 文件: /etc/ha.d/ldirectord.cf 主配置文件 /usr/share/doc/ldirectord-3.9.6/ldirectord.cf 配置模版 /usr/lib/systemd/system/ldirectord.service 服务 /usr/sbin/ldirectord 主程序 /var/log/ldirectord.log 日志 /var/run/ldirectord.ldirectord.pid pid 文件 ldirectord 配置文件示例 checktimeout=3 如果3秒没有反应就认为是有故障了 checkinterval=1 表示一秒检查一次后端的服务器 autoreload=yes 自动加载配置文件,不用重启就可以生效 logfile=“/var/log/ldirectord.log“ 日志文件 quiescent=no down 时yes权重为0 ,no为删除 virtual=5 指定VS的FWM或IP:port real=172.16.0.7:80 gate 2 gate表示dr模式,2表示权重为2 real=172.16.0.8:80 gate 1 权重为1 fallback=127.0.0.1:80 gate