LVS调度方法:
静态(fixed method):关注起点公平,不考虑 后端Real Server 的连接数
rr, wrr, sh, dh
rr
wrr
sh: Source Hashing
dh: Destination Hashing
动态(Dynamic method):关注结果公平,要考虑 后端Real Server 的连接数
连接分为:Active(established) 与 Inactive(非 established)
Inactive连接的 开销 要比 Active的开销 小得多,因此考虑结果公平时,Active比重 要大得多
lc, wlc, sed, nq, lblc, lblcr
Overhead小的Real Server 胜出 接收用户连接
lc: Least Connection
Overhead=Active*256+Inactive ,
wlc: Weighted
Overhead=(Active*256+Inactive)/Weight ,出于服务器性能考虑,加入权重
sed: Shortest Expect Delay
Overhead=(Active+1)*256/Weight , 排除了wlc中 Active =0,Inactive=0时,选择的不智能问题,
但却引人了 另一个问题:在某段时间内,权重太小的服务器 ,很空闲
nq: Never Queue
对sed 的改进 ,上来就 一个给一个 ,然后再按 sed 算法 给
dh算法 ,用在 后端服务器 是 缓存服务器的 场景中
lblc: (dh+lc) Locality-based Least Connection
能够考虑 后端服务器 连接数状况
lblcr: Replicated and Locality-based Least Connection
基于本地的带复制的 最少连接 ,对lblc的改进,大致相当于: 缓存服务器 之间,是可以实现 基于某种协
议使 后端的各Real Server 可以互相 复制 缓存对象 ,使得 对于LB 的效果 损害 降到 最低
rr: Round-Robin,轮叫,轮调
一人分一个的轮这来
wrr: Weighted Round-Robin, 加权轮叫
考虑到 某些服务器的性能比较强 ,可以多分担 请求 而给予 权重 ,服务器权重 5:1 那么分给请求量 5:1
sh: Source Hashing
概念解释:
源地址hash ,以源地址为标准,将来自同一地址的用户转发给同一网络,算法正好与目标地址散列调度算法相反,它根据请求的源IP地址,作为散列键(HashKey)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。它采用的散列函数与目标地址散列调度算法的相同。它的算法流程与目标地址散列调度算法的基本相似
应用场景:
用于实现LVS的持久性 ,在Director上创立一个 会话表(session表,保存会话时间 比较久) ,记录 Client IP:Real Server IP
是以hash 的 Key:Value 存储,Client IP 是KEY Real Server IP 是Value ,这样保证了 Client 与 Real Server 映射关系。
因为 hash 的是 Client IP 所以叫
Source Hashing
缺点:会损害 LB 效果
例子:
因为用户访问Web Server 的 会话信息 保存服务器1上 ,所以我们必须 使得 用户的请求 一直 分给 服务器1 ,而http 又是无状态的,所以 每一的刷新 ,它的请求 都会被 从新分配 ,怎么解决 持久会话 的问题?
1.共享会话
A.通过广播或组播 连接 服务器 ,一旦 有会话建立 ,那么 通知其他 服务器 过来 copy 一份 。缺点:广播 组播 很耗带宽,所以 此方案 适用场景:小场景(节点很少)
B.把session会话保存不保存在本地 ,保存在 一个 公共位置 ,例如 具有持久存储能力的缓存:redis
C.使 同一个用户的请求,一直 指向 同一个服务器 。例如: sh 算法
dh: Destination Hashing
概念:
目标地址hash算法以目标地址为标准,针对目标地址的请求进行定向转发,能够实现来自 不同用户的同一请求转发到同一台服务器上(基于缓存的架构,能够提高缓存的命中率),它通过一个散列(Hash)函数将一个目标IP地址映射到一台服务器。目标地址散列调度算法先根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空
图形描述:
应用场景:
1. 缓存服务器
2.
源地址散列调度和目标地址散列调度可以结合使用在防火墙集群中,它们可以保证整个系统的唯一出入口。
查看内核编译时 对 ipvs的支持状况
[root@nod2 ~]# grep --color=auto -C 20 -i ipvs /boot/config-2.6.32-358.el6.x86_64
#
# IPVS transport protocol load balancing support //ipvs 支持的传输协议
#
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
#
# IPVS scheduler //ipvs 支持的算法 10种
#
CONFIG_IP_VS_RR=m
CONFIG_IP_VS_WRR=m
CONFIG_IP_VS_LC=m
CONFIG_IP_VS_WLC=m
CONFIG_IP_VS_LBLC=m
CONFIG_IP_VS_LBLCR=m
CONFIG_IP_VS_DH=m
CONFIG_IP_VS_SH=m
CONFIG_IP_VS_SED=m
CONFIG_IP_VS_NQ=m
#
# IPVS application helper
#
CONFIG_IP_VS_FTP=m
装上 在用户空间 运行的 ipvsadm 的规则编辑器,变身 Director
[root@nod2 ~]# yum install ipvsadm -y
ipvsadm 使用方法:
NAME
ipvsadm - Linux Virtual Server administration
SYNOPSIS
ipvsadm -A|E -t|u|f service-address [-s scheduler]
[-p [timeout]] [-M netmask]
ipvsadm -D -t|u|f service-address
ipvsadm -C
ipvsadm -R
ipvsadm -S [-n]
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 -L|l [options]
ipvsadm -Z [-t|u|f service-address]
ipvsadm --set tcp tcpfin udp
ipvsadm --start-daemon state [--mcast-interface interface]
[--syncid syncid]
ipvsadm --stop-daemon state
ipvsadm -h
对集群服务的操作
定义编辑一个集群服务
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] [-O] [-M netmask]
commands
-A, --add-service:添加
-E, --edit-service:编辑
parameters
-t, --tcp-service service-address
-u, --udp-service service-address
-f, --fwmark-service integer
-s, --scheduler scheduling-method 指定调度方法
marks
service-address: VIP:Port
e.g
ipvsadm -A -t 172.16.100.3:80 -s rr
删除集群服务
ipvsadm -D -t|u|f service-address
-D, --delete-service: 删除
对Real Server 操作
往集群服务里面 添加 Real Server
ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight] [-x upper] [-y lower]
commands
-a, --add-server
-e, --edit-server
description
-r, --real-server server-address
parameters
-w, --weight weight
marks
server-address : IP[:port] 指定realserver地址 ,port 只能用于NAT 模式
packet-forwarding-method 指定lvs类型:
-g, --gatewaying dr模型,默认
-i, --ipip tun模型
-m, --masquerading nat模型
e.g
ipvsadm -a -t 172.16.100.3:80 -r 192.168.10.7 -m
ipvsadm -a -t 172.16.100.3:80 -r 192.168.10.8 -m
从集群服务中 删除 Real Server
ipvsadm -d -t|u|f service-address -r server-address
-d, --delete-server: 删除realserver
e.g
ipvsadm -d -t 172.16.100.3:80 -r 192.168.10.7
对规则的操作
保存
规则
service ipvsadm save
/etc/sysconfig/ipvsadm
ipvsadm -S, --save
ipvsadm -S > /paht/to/ipvsadm.rules
ipvsadm -R < /path/to/ipvsadm.rules
恢复规则
ipvsadm -R, --restore
查看
规则
ipvsadm -L, -l, --list -n
清空规则
ipvsadm -C, --clear
服务状态查看
状态
--stats
连接数
-c, --connection
持久连接数
--persistent-conn
速度
--rate
清空计算器
ipvsadm -Z, --zero [-t|u|f service-address]
演练:
rr算法
[root@nod 1~]# ipvsadm -A -t 192.168.195.150:80 -s rr
[root@nod1 ~]# ipvsadm -a -t 192.168.195.150:80 -r 10.10.10.10 -m
[root@nod1 ~]# ipvsadm -a -t 192.168.195.150:80 -r 10.10.10.11 -m
[root@nod1 ~]# sysctl -w net.ipv4.ip_forward=1
net.ipv4.ip_forward = 1
结果:
[root@nod2 ~]# ipvsadm -l -n --stats
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Conns InPkts OutPkts InBytes OutBytes
-> RemoteAddress:Port
TCP 192.168.195.150:80 41 195 147 18657 13292
-> 10.10.10.10:80 20 118 80 13165 7644
-> 10.10.10.11:80
wrr算法
[root@nod2 ~]# ipvsadm -E -t 192.168.195.150:80 -s wrr
[root@nod2 ~]# ipvsadm -e -t 192.168.195.150:80 -r 10.10.10.10 -m -w 3
[root@nod2 ~]# ipvsadm -Z
结果
[root@nod2 ~]# ipvsadm -l -n --stats
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Conns InPkts OutPkts InBytes OutBytes
-> RemoteAddress:Port
TCP 192.168.195.150:80 28 167 111 19367 10876
-> 10.10.10.10:80 21 125 83 14404 7593
-> 10.10.10.11:80
最后:
[root@nod2 ~]# service ipvsadm save
ipvsadm: Saving IPVS table to /etc/sysconfig/ipvsadm: [ OK ]
这样开机 就会读取 里面的rules