LVS其他集群
除了 NAT 和 DR 模式以外,还有两种模式的 LVS 集群:TUN 和 FULLNAT
lvs-TUN
不修改请求报文的IP首部(源IP为CIP,目标IP为VIP),而在原IP报文之外再封装一个IP首部(源IP是DIP,目标IP是RIP),将报文发往挑选出的目标RS;RS直接响应给客户端(源IP是VIP,目标IP是CIP)
(1) DIP, VIP, RIP都应该是公网地址
(2) RS的网关一般不能指向DIP
(3) 请求报文要经由Director,但响应不能经由Director
(4) 不支持端口映射
(5) RS的OS须支持隧道功能
lvs-FULLNAT不了解,日后接触到相关技术再补充。
FireWall Mark与持久连接
FireWall Mark
借助于防火墙标记来分类报文,而后基于标记定义集群服务;可将多个不同的应用使用同一个集群服务进行调度。
在 LVS 上设置 iptables 为特定的报文标记标签
[root@CentOS74 ~]# iptables -t mangle -A PREROUTING -d 10.0.0.74 -p tcp -m multiport --dport 80,443 -j MARK --set-mark 8000
[root@CentOS74 ~]# iptables -t mangle -vnL
Chain PREROUTING (policy ACCEPT 550 packets, 44502 bytes)
pkts bytes target prot opt in out source destination
172 10914 MARK tcp -- * * 0.0.0.0/0 10.0.0.74 multiport dports 80,443 MARK set 0x1f40
将 iptables规则 记录在 mangle 表上,是因为 mangle 表为修改数据表记位规则表。
语法:iptables -t mangle -A PREROUTING -d lvs地址 -p tcp -m multiport --dport 端口号 -j MARK --set-mark 标记数
其中,标记数可为 0xffff 格式,表示十六进制数字。
使用 -f 选项设置 ipvs 规则
[root@CentOS74 ~]# ipvsadm -A -f 8000 -s wlc
[root@CentOS74 ~]# ipvsadm -a -f 8000 -r 192.168.30.75 -g -w 3
[root@CentOS74 ~]# ipvsadm -a -f 8000 -r 192.168.30.174 -g -w 1
[root@CentOS74 ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
FWM 8000 wlc
-> 192.168.30.75:0 Route 3 0 0
-> 192.168.30.174:0 Route 1 0 0
持久连接
持久连接( lvs persistence )模板:实现无论使用任何调度算法,在一段时间内(默认360s ),能够实现将来自同一个地址的请求始终发往同一个RS。
使用 ipvsadm 的 -p 选项设置集群的超时时长
[root@CentOS74 ~]# ipvsadm -E -f 8000 -s rr -p 5
[root@CentOS74 ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
FWM 8000 rr persistent 5
-> 192.168.30.75:0 Route 3 0 0
-> 192.168.30.174:0 Route 1 0 0
持久连接实现方式:
每端口持久(PPC):每个端口对应定义为一个集群服务,每集群服务单独调度。每防火墙标记持久(PFWMC):基于防火墙标记定义集群服务;可实现将多个端口上的应用统一调度,即所谓的port Affinity。
每客户端持久(PCC):基于0端口(表示所有服务)定义集群服务,即将客户端对所有应用的请求都调度至后端主机,必须定义为持久模式。(危险)
ldirectord
[root@CentOS74 ~]# cp /usr/share/doc/ldirectord/ldirectord.cf /etc/ha.d/
修改配置文件
[root@CentOS74 ~]# cat /etc/ha.d/ldirectord.cf
# Global Directives
checktimeout=3 #超时时长
checkinterval=1 #查询间隔
#fallback=127.0.0.1:80
#fallback6=[::1]:80
autoreload=yes #,当服务启动时,保存配置文件后自动加载
logfile="/var/log/ldirectord.log" #日志文件路径
logfile="local0" #日志规则
#emailalert="admin@x.y.z"
#emailalertfreq=3600
#emailalertstatus=all
quiescent=no #当RS宕机,yes会将该RS的权值修改为0,no为删除RS记录
virtual=10.0.0.74:80 #VIP地址
servicename=Web Site
comment=Test load balanced web site
real=192.168.30.174:80 gate 1 #RS地址,模式,权值
real=192.168.30.75:80 gate 3
fallback=127.0.0.1:80 gate #宕机备份主机地址
service=http #服务名
scheduler=wrr #调度算法
#persistent=600
#netmask=255.255.255.255
protocol=tcp #传输协议
checktype=negotiate
checkport=80 #查询端口
request="index.html" #查询文件
receive="RS" #判断关键字
在启动 ldirectord 服务后,ldirectord 会
自动在 ipvs 规则中创建新的 ipvs 规则,无需再次使用 ipvsadm 命令创建 lvs 集群规则。