3.2 LVS调试算法

ipvs scheduler:根据其调度时是否考虑各RS当前的负载状态

分为两种:静态方法和动态方法

3.2.1 静态方法

仅根据算法本身进行调度

1、RR:roundrobin,轮询,较常用
2、WRR:Weighted RR,加权轮询,较常用
3、SH:Source Hashing,实现session sticky,源IP地址hash;将来自于同一个IP地址的请求始终发往第一次挑中的RS,从而实现会话绑定
4、DH:Destination Hashing;目标地址哈希,第一次轮询调度至RS,后续将发往同一个目标地址的请求始终转发至第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡,如:Web缓存

3.2.2 动态方法

主要根据每台RS当前的负载状态及调度算法进行调度Overhead=value较小的RS将被调度

1、LC:least connections适用于长连接应用

Overhead=activeconns*256+inactiveconns

2、WLC:Weighted LC,默认调度方法,较常用

Overhead=(activeconns*256+inactiveconns)/weight

3、SED:Shortest Expection Delay,初始连接高权重优先,只检查活动连接,而不考虑非活动连接

Overhead=(activeconns+1)*256/weight

4、NQ:Never Queue,第一轮均匀分配,后续SED

5、LBLC:Locality-Based LC,动态的DH算法,使用场景:根据负载状态实现正向代理,实现WebCache等

6、LBLCR:LBLC with Replication,带复制功能的LBLC,解决LBLC负载不均衡问题,从负载重的复制到负载轻的RS,实现Web Cache等

3.2.3 内核版本4.15版本后新增调度算法:FO和OVF

FO(Weighted Fail Over)调度算法,在此FO算法中,遍历虚拟服务所关联的真实服务器链表,找到还未过载(未设置IP_VS_DEST_F_OVERLOAD标志)的且权重最高的真实服务器,进行调度

OVF(Overflow-connection)调度算法,基于真实服务器的活动连接数量和权重值实现。将新连接调度到权重值最高的真实服务器,直到其活动连接数量超过权重值,之后调度到下一个权重值最高的真实服务器,在此OVF算法中,遍历虚拟服务相关联的真实服务器链表,找到权重值最高的可用真实服务器。—个可用的真实服务器需要同时满足以下条件:

  • 未过载(未设置IP_VS_DEST_F_OVERLOAD标志)
  • 真实服务器当前的活动连接数量小于其权重值
  • 其权重值不为零

3.3 LVS相关软件

3.3.1 程序包:ipvsadm

Unit File:ipvsadm.service

主程序:/usr/sbin/ipvsadm

规则保存工具:/usr/sbin/ipvsadm-save

规则重载工具:/usr/sbin/ipvsadm-restore

配置文件:/etc/sysconfig/ipvsadm-config

ipvs调度规则文件:/etc/sysconfig/ipvsadm

3.3.2 ipvsadm命令

ipvsadm核心功能:

  • 集群服务管理:增、删、改
  • 集群服务的RS管理:增、删、改
  • 查看

ipvsadm工具用法:

# 管理集群服务
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] [-M netmask] [--pe persistence_engine] [-b sched-flags]
ipvsadm -D -t|u|f service-address   # 删除
ipvsadm -C  # 清空
ipvsadm -R  # 重载,相当于ipvsadm-restore
ipvsadm -S [-n] # 保存,相当于ipvsadm-save

# 管理集群中的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
ipvsadm -L|l [options]
ipvsadm -z [-t|u|f service-address]

管理集群服务:增、改、删

增、修改:

ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]

说明

service-address:

-t|u|f:
    -t: TCP协议的端口,VIP:TCP_PORT   如: -t 10.0.0.100:80
    -u: UDP协议的端口,VIP:UDP_PORT
    -f:firewall MARK,标记,一个数字
[-s scheduler]:指定集群的调度算法,默认为wlc

例:

ipvsadm -A -t 10.0.0.100:80 -s wrr

删除:

ipvsadm -D -t|u|f service-address

管理集群上的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:
    rip[:port] 如省略port,不作端口映射
选项:
lvs类型:
    -g: gateway,dr类型,默认
    -i: ipip,tun类型
    -m: masquerade,nat类型
-w weight:权重

例:

ipvsadm -a -t 10.0.0.100:80 -r 10.0.0.8:8080 -m -w 3

清空定义的所有内容:

ipvsadm -C

清空计数器:

ipvsadm -Z [-t|u|f service-address]

查看:

ipvsadm -L|l [options]

说明

--numeric, -n: 以数字形式输出地址和端口号
--exact: 扩展信息,精确值
--connection, -c: 当前IPVS连接输出
--stats: 统计信息
--rate: 输出速率信息

ipvs规则:

/proc/net/ip_vs

ipvs连接:

/proc/net/ip_vs_conn

保存:建议保存至/etc/sysconfig/ipvsadm

ipvsadm-save > /PATH/TO/IPVSADM_FILE
ipvsadm -S > /PATH/TO/IPVSADM_FILE
systemctl stop ipvsadm.service  # 会自动保存规则至/etc/sysconfig/ipvsadm

重载:

ipvsadm-restore < /PATH/FROM/IPVSADM_FILE
systemctl start ipvsadm.service # 会自动加载/etc/sysconfig/ipvsadm中规则