2

LVS的多种调度模式

 2 years ago
source link: https://blog.51cto.com/u_13236892/5584853
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
[root@k8s02 ~]# ipvsadm -h
--scheduler -s scheduler(ˈskejələr调度) one of rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq, the default scheduler is wlc.

-s rr 轮循法
-s wrr 带权重的循环法
-s lc 最少连接法
-s wlc 带权重的最少连接法
-s lblc 基于本地的最少连接法
-s dh 目标散列法
-s sh 源散列法
-s sed 最短预期延迟法
-s nq 永不排队法
注:调度算法配置后立即生效,就像iptables配置规则一样。

2.3.1 每个调度算法详细说明:

1、rr - round robin
--- 在服务器池中无穷的循环中遍历
2、wrr - Weighted Round Robin
--- 基于集群节点可以处理多少来分配给每个节点一个权重值。权重值为2的服务器将收到权重值为1的服务器的两倍的连接数量。如果服务器的权重为0 ,则不会收到新的连接请求(但当前活动的已经建立的连接将不会丢失)。
3、lc - Least-Connection
--- 当新的请求到达director时,director查看活动和非活动的连接数量,以确定把请求分发给哪个服务器。
director将集群节点目前的活动连接数量x256 再加上不活动的连接数量,得到节点的开 销值。最低开销值的节点胜出,被分发给新的入站请求。(如果开销一样,则第一个节点被选中)
4、wlc - Weighted Least-Connection
--- 先如上算出集群节点的开销值,然后除以分配给其的权重值,最小值节点胜出,将入站请求分发给它。
5、lblc - Locality-Based Least-Connection
--- 基于局部的最小连接,当real server是缓存服务器时用得比较多
6、lblcr - Locality-Based Least-Connection with Replication
--- 带复制的基于局部的最小连接,当real server是缓存服务器时用得比较多
7、dh - Destination Hashing
8、sh - Source Hashing
--- 同一个ip的客户端总是分发给同一个real server。
让客户端总是能访问到自己的会话信息,这种机制叫会话保持。
基于ip地址标识客户端的缺点:很多内网用户会伪装成公网ip,来访问服务器,不能人为的控制负载均衡。

比较高级的方法是基于客户端提供我们的session id来实现会话保持。
haproxy(做负载均衡的软件)可以实现基于会话信息来判断保持会话。
扩展:
如何保持会话一致:
1、如果总是保持和一个RS会话,这台RS如果故障了,要确定另一个RS也有会话信息,所有的RS保持数据同步。
会话同步的方法:
1、所有的RS把自己的会话信息保存到数据库当中(memcached软件)。

9、sed - Shortest Expected Delay最短延时预测 (Ci+1)/Ui Ci连接数 Ui权重值
--- 在wlc方法上做了轻微改进,这些服务使用tcp,而且当群节点在处理每个请求时保持
在活动状态。
计算方法: 每个休群节点的开销值是通过将活动的连接数加1计算的。然后开销值除以
分配 给每个节点的权重,以取得SED值,具有最低SED值的集群节点胜出。

10、nq - Never Queue没有队列,分配请求给空闲的服务器,没有空闲的就找响应最快的,
--- 如果集群节点中没有活动的连接 ,不管每个集群节点SED计算值的结果,它始终被
分配置服务的新入站请求。

HTTP的会话(session)信息:
cookies客户端(client)自己保存缓存
会话(session)服务器(server)端保存

2.3.2 实例:

例1:测试LVS 其它调度算法,如LVS-DR wrr diào dù
[root@k8s02 ~]# ipvsadm -C
[root@k8s02 ~]# ipvsadm -A -t 192.168.1.63:80 -s wrr
[root@k8s02 ~]# ipvsadm -a -t 192.168.1.63:80 -r 192.168.1.62 -g -w 10
[root@k8s02 ~]# ipvsadm -a -t 192.168.1.63:80 -r 192.168.1.64 -g -w 20

[root@k8s02 ~]# 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.1.63:80 0 0 0 0 0
-> 192.168.1.62:80 0 0 0 0 0
-> 192.168.1.64:80 0 0 0 0 0

测试:
在物理机上,刷新9次这个链接:http://192.168.1.63/
查看:
[root@k8s02 ~]# 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.1.63:80 9 45 0 6111 0
-> 192.168.1.62:80 3 15 0 2037 0
-> 192.168.1.64:80 6 30 0 4074 0
# 一共9次连接, xuegod62:xuegod64 是 1:2 关系。 说明权重越大,获得的连接说越多。

例2:如果一个real server 的权重是0,将不再分配给他客户端的请求
[root@k8s02 ~]# ipvsadm -C
[root@k8s02 ~]# ipvsadm -A -t 192.168.1.63:80 -s wrr
-s wrr 加权轮循
[root@k8s02 ~]# ipvsadm -a -t 192.168.1.63:80 -r 192.168.1.62 -g -w 0
[root@k8s02 ~]# ipvsadm -a -t 192.168.1.63:80 -r 192.168.1.64 -g -w 20
在物理机上,刷新9次这个链接:http://192.168.1.63/

查看:
root@k8s02 ~]# 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.1.63:80 8 40 0 5432 0
-> 192.168.1.62:80 0 0 0 0 0 #62的请求数为0
-> 192.168.1.64:80 8 40 0 5432 0

另外:
ipvsadm -L -n --stats
发现进来的包是有的,但是出去的包为0
InPkts OutPkts
有 0
因为数据包出去时,直接交给了real server,而没有交给Director

扩展:
ipvsadm 更多参数说明
-L -n ==> 查看规则,显示内核虚拟服务器表
-L -n -c ==> 查看客户端连接分发器和real server 的情况
例1:[root@k8s02 ~]# ipvsadm -L -n -c
IPVS connection entries
pro expire state source virtual destination
TCP 01:33 TIME_WAIT 192.168.1.100:49698 192.168.1.70:80 192.168.1.62:80
TCP 01:26 TIME_WAIT 192.168.1.100:49690 192.168.1.70:80 192.168.1.64:80
TCP 01:57 TIME_WAIT 192.168.1.100:49739 192.168.1.70:80 192.168.1.62:80

-L -n --stats ==> 查看分发情况
-L -n --rate ==> 查看速率
• -Z --zero 虚拟服务表计数器清零(清空当前的连接数量等)
例1:[root@k8s02 ~]# ipvsadm -Z
[root@k8s02 ~]# ipvsadm -L -n --stats
IP Virtual Server version 1.2.1 (size=4096)

实例2:删除一条记录
[root@k8s02 ~]# ipvsadm -d -t 192.168.1.63:80 -r 192.168.1.64
[root@k8s02 ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.1.63:80 rr
-> 192.168.2.62:80 Masq 1 0 0

-C --clear 清除内核虚拟服务器表中的所有记录。

例3: 清空所有记录
[root@k8s02 ~]# ipvsadm -C

其他查看方式:
--stats 显示统计信息
[root@k8s02 ~]# 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.1.63:80 0 0 0 0 0
-> 192.168.2.62:80 0 0 0 0 0

--rate 显示速率信息
[root@k8s02 ~]# ipvsadm -L -n --rate
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port CPS InPPS OutPPS InBPS OutBPS
-> RemoteAddress:Port
TCP 192.168.1.63:80 0 0 0 0 0
-> 192.168.2.62:80 0 0 0 0 0

-c --connection 显示LVS 目前的连接
[root@k8s02 ~]# ipvsadm -L -n -c
IPVS connection entries
pro expire state source virtual destination

LVS的规则配置文件:/etc/sysconfig/ipvsadm
配置文件方法:
[root@k8s02 ~]# ipvsadm-save>/etc/sysconfig/ipvsadm 可以保存。
LVS的规则存储配置文件:/etc/sysconfig/ipvsadm
[root@k8s02 ~]# cat /etc/sysconfig/ipvsadm
-A -t 192.168.1.63:80 -s rr
-a -t 192.168.1.63:80 -r 192.168.1.62:80 -m -w 1
-a -t 192.168.1.63:80 -r 192.168.1.64:80 -m -w 1

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK