LVS 之 algorithm and NAT model

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)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。它采用的散列函数与目标地址散列调度算法的相同。它的算法流程与目标地址散列调度算法的基本相似


wKiom1MuSBSDcIeEAACjecyD9ZA945.jpg

应用场景:
   用于实现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)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空
图形描述:


wKiom1MuSDTQQJvvAADCKvaMDpY220.jpg


应用场景:
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]

演练:

wKioL1MuSMeAYt4-AAEdN_3mN80804.jpg

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

wKioL1MuSROR4PJxAAB57sDpaak330.jpg

wKiom1MuSUbCYRiEAAB3knfJUqM371.jpg

结果:

[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

wKioL1MuSZ6BxuiPAAB57sDpaak878.jpg

wKiom1MuSdCRRD6yAAB3knfJUqM873.jpg

结果

[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


你可能感兴趣的:(LVS,NAT)