CC00009.LBCHAC——|LBC构建.V3|——|2台server|

一、通用算法-调度
1、通用算法:
### --- 固定算法(静态调度算法):
~~~     只根据算法本身去调度,不考虑服务器本身;消耗的资源比较少

### --- 动态算法(动态调度算法):
~~~     出了考虑算法本身,还要考虑服务器状态;消耗的资源比较大
~~~     调度算法也就意味着后期我们配置调度策略的规则

### --- 负载调度器:
~~~     就是将不同的压力请求分散到不同的服务器
2、静态调度算法:
### --- RR 轮询:
~~~     将每次用户的请求分配给后端的服务器,从第一台服务器开始到第N台结束,然后循环

### --- WRR加权轮询:
~~~     按照权重的比例实现在多台主机之间进行调度:睡的权重越高,就负责的是当前的权重。

### --- SH(source hash)源地址散列:
~~~     将同一个IP的用户请求,发送给同一个服务器:  根据源判断

### --- DH(destination hash)目标地址散列:
~~~     将同一个目标地址的用户请求发送给同一个真是服务器(提高缓存的命中率)根据用户请求去判断
3、SH状态信息
### --- HTTP   HTTPS:无状态协议:一次性传输:
~~~     每次发起连接的时候,都不知道上一次发送的信息是什么

### --- www.taobao.com    用户信息 :若是无状态协议:
~~~     刷新后状态就消失。
4、解决方案:    
### --- cookie  :用户端持久化:
~~~     在客户端上添加一些cookie信息,若服务器端响应的话,
~~~     拿我的请求加上我的cookie数据,
~~~     web服务器就会知道客户端访问过的信息是什么样的,都会有记录的,
~~~     cookie是存在客户端本机的,cookie信息是不安全的。 

### --- session:服务器端持久化:
~~~     对于服务器来说更希望把数据存储在服务端。
~~~     理解为客户端持久化数据保存在了服务器端而已;
~~~     每次连接后会保存我们需要的信息是什么;可以存储在数据库里面,
~~~     可以存储在缓存里,也可以存储在分布式存储里面
### --- 不把session存储在后端服务器,

~~~     直接存储在存储服务器中
~~~     这样所有的数据读取不是从服务器中读取,而是从存储服务器读取
~~~     以上为标准解决方案,这样就不要SH算法,
~~~     若开发没有在nginx服务器上没有定义把session定义在后端的数据库中,
~~~     我们只能吧session存放在临时的单独的服务器,不管客户端怎么访问,
~~~     都会到session服务器中调用
二、DH的调度算法
### --- SQUID:
~~~     后端的缓存服务器,它后端还有源服务器,有请求要缓存,缓存说没有,
~~~     那它就会向源服务器要数据,SQUID服务器会把这个数据缓存在本机,并反馈给用户。
~~~     若再来一个用户想访问这个数据,那它就可以直接把这个数据给客户端,
~~~     而不用去向源服务器去要数据,减轻后端服务器压力。
~~~     可以大大提高缓存并读率,客户端把数据提交给SQUID服务器,

### --- 缓存并读率:
~~~     它到底有有多大缓存不需要到后端去要, 
~~~     采用DH算法之后可以大大提高缓存服务的缓存并读率,更便于整个并发提升。
三、动态调度算法:(不仅考虑算法本身,还需要考虑服务器的当前的状态,
### --- 动态的算法http连接分为两种:

### --- http活动连接:
~~~     正在传输数据,正在握手或者传输数据呢;远大于非活动连接的资源消耗。

### --- http非活动连接:
~~~     刚建立连接,还没有传输数据,或者刚传输完数据,还没有来得及断开。
### --- 动态调度算法分类

### --- LC(lest-connection)最少连接:
~~~     将新的连接请求,分配给连接数最少的服务器,活动连接X256+非活动连接

### --- WLC加权最少连接:
~~~     特殊的最少连接算法,权重越大承担的请求数越多(活动连接X256+非活动连接)/权重

### --- SED最短期望延迟:
~~~     特殊的WLC算法(活动连接+1)*256/权重NQ永不排队,
~~~     特殊的SED算法,无需等待,如果有真实服务器的连接数等于0那就直接分配不需要运算;
~~~     LVS能确定那台服务器的连接数等于0的情况下,会把请求直接分配过去。
### --- LBLC特殊的DH算法:

~~~     即能提高缓存命中率,又要考虑服务器性能;没有问题的原因是没有考虑并发,
~~~     前端时间鹿晗和关晓彤的恋情爆料,导致新浪服务器宕机,若1.jpeg访问量很大,
~~~     采用了DH算法的话,访问1.jpeg的压力全部集中在SQUID中,SQUID很可能会导致宕机。
~~~     若不采用SQUID的话,采用LBLCR LBLC算法。若访问量比较大的情况下,
~~~     感觉SQUID的压力比较大的情况下,会再选一台SQUID的服务器作为缓存,
~~~     可以持续添加,既可以保障缓存并读率,又可以防止某一台SQUID服务器压力比较大而导致宕机。
### --- LBLCR LBLC+缓存:

~~~     竟可能提高负载均衡缓存命中率的折中方案;
~~~     我们不管吧请求发送给那一台服务器,它直接是想后端的Apache服务器去要数据的。
~~~     若开启LBLC的话,我们的缓存数据可以在多台SQUID服务器之间进行同步,
~~~     而不再想后端的Apache去要。
### --- LC最少连接
~~~     第一台服务器  10   1000    2560+1000       
~~~     第二台服务器  8    8000     8x256  8000

### --- WLC
~~~     第一台服务器 1       0                0           
~~~     第二台服务器  2        0                0
四、LVS持久连接:扩展知识
### --- HTTPS
~~~     安全/配置复杂/费用高/消耗性能/ssl握手设备(硬件设备)          
### --- HTTPS:
~~~     现在不可或缺的技术。

### --- http:
~~~     Apple的app-store在所有的应用数据传输的时候必须走https协议;
~~~     http不允许商家;chrome也会把https的规则添加进去了
~~~     https:消耗的资源还是较多。
### --- 拓扑说明

~~~     假设连接的端口是443,走的是https连接,
~~~     第一次数据请求获取后,那下一次的请求就有可能被LVS负载到了第二台Apache服务器,
~~~     有需要进行握手,又要消耗资源。一次类推。
~~~     这样的情况对Apache来说不太友好。消耗的最远非常大。
~~~     可否第一次握手后,第一建立连接后,后期直接交给第一次后去数据的服务器,
~~~     这样服务器性能的损耗会相对减少。
### --- 持久化连接

~~~     持久化连接  LVS     类似于:  SH  但它又不等同于SH算法
~~~     优先于 LVS算的或者通用算法RR、LBLC
~~~     先匹配到持久化连接,在匹配到通用算法。
~~~     持久化连接会普遍的应用在https相关集群中。
~~~     持久化连接:类似于ssh,在内存中扉页中采用了一块缓存,
~~~     记录了我们的客户端数据与我们分配真实服务器的相关对应数据。
~~~     保证客户端每一次连接都能建立持久化连接。
~~~     这里的持久化是建立在固定的时间内,假设设置的是200秒,在200秒内可以进行持久化连接。
~~~     最大不超过200秒。时间结束后不会再我们连接里不会再有持久化连接,
~~~     在此连接的话又会是一个新的连接
~~~     在设置lvs持久化连接的时候换需要定义一个时间。
### --- 第一点:功能类似于SH,
### --- 第二点:它优先级最大,高于通用算法,先匹配它,再匹配通用算法。
### --- 第三点:普遍应用于https连接中。
### --- LVS持久连接

### --- PCC(持久客户端连接):
~~~     没客户端持久:将来自于同一个客户端的所有请求统统定向至此前选定的RS,
~~~     也就是只要IP相同,分配的服务器始终相同:

### --- example:ipvsadm -A -t 172.16.0.8:0 -s wlc -p 120        :0——>所有端口
~~~     就是客户端访问LVS集群,LVS可以代理多个不同的多个集群。
~~~     代理80的,代理443的集群。一般不会这样去配置。
~~~     只要客户端访问过来。都把他递给同一台服务器(持久化),
~~~     每一个客户端都会有一个模板,客户端都要匹配上,端口也需要匹配上。
### --- PPC(持久端口连接):每端口持久:
~~~     将来自于同一个客户端对同一个服务(端口)的请求,始终定向至此前选定的RS:

### --- example:ipvsadm -A -t 172.16.0.:80 -s rr -p 120         :80——>80端口    
~~~     假设客户端访问80端口,把它递给第一台服务器。
~~~     假设客户端访问的是443端口,把它递给第二台服务器。
~~~     若是在此访问的是80 ,还会递给第一台服务器。
~~~     若再次访问443,若是一个新的连接,它可能会递给第一台服务器或者第二台服务器
~~~     每一个端口都会有一模板
### --- PFMC:持久防火墙标记连接,将来自于同一客户端对指定服务(端口)的请求,

~~~     始终定向至此选定的RS;不过它可以将两个毫不相干得端口定义为一个集群服务器
~~~     防火墙会把每一个请求打一个标签,然后把它转给LVS集群,
~~~     LVS再根据它的标签去判断是交给那台RS服务器。
### --- LVS持久连接构建
~~~     -t mangle:mangle表中
~~~     -A PREROUTING:PREROUTING列里,OREROUT是路由器
~~~     -d 172.16.0.8:目的地址
~~~     -p tcp:tcp协议
~~~     -dport 80:目标端口是80 打个标记,MAC值为10;如果来了个连接,它的值为10的话,就建立持久化连接。
~~~     -j MARK:
~~~     --set-mark 10:

iptables -t mangle  -A PREROUTING  -d 172.16.0.8 -p tcp --dport 80 -j MARK --ser-mark 10
iptables -t mangle  -A PREROUTING  -d 172.16.0.8 -p tcp --dport 443 -j MARK --ser-mark 10
service iptables save
ipvsadm -A -f  10 -s  wlc  -p  120
五、实验专题:配置建立持久化连接
### --- 配置建立持久化连接:硬件规划

~~~     Windows:10.10.10.240:本地物理笔记本
~~~     HA-server1:10.10.10.11:LVS持久化连接
### --- 在LVS-NAT集群中,配置持久化连接。
### --- 删除LVS-NAT集群

[root@server11 ~]#  ipvsadm -D -t 20.20.20.11:80
[root@server11 ~]#  ipvsadm -Ln --stats
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port               Conns   InPkts  OutPkts  InBytes OutBytes
  -> RemoteAddress:Port
### --- 设置持久化连接集群;配置LVS

[root@server11 ~]#  ipvsadm -A -t 20.20.20.11:80 -p 120 -s rr
[root@server11 ~]#  ipvsadm -Ln --stats
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port               Conns   InPkts  OutPkts  InBytes OutBytes
  -> RemoteAddress:Port
TCP  20.20.20.11:80                      0        0        0        0        0
### --- 添加集群RS端
[root@server11 ~]#  ipvsadm -a -t 20.20.20.11:80 -r 10.10.10.12:80 -m
[root@server11 ~]#  ipvsadm -a -t 20.20.20.11:80 -r 10.10.10.13:80 -m

### --- 获取帮助信息
[root@server11 ~]#  ipvsadm --help |grep conn
### --- 查看持久化连接的

[root@server11 ~]#  ipvsadm -Ln --persistent-conn
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port            Weight    PersistConn ActiveConn InActConn 
  -> RemoteAddress:Port
TCP  20.20.20.11:80 rr persistent 120                                       // 120表示持久化连接时间
  -> 10.10.10.12:80               1         0           0          0         
  -> 10.10.10.13:80               1         0           0          0
### --- 查看当前的连接信息

[root@server11 ~]#  ipvsadm -Ln -c
IPVS connection entries
pro expire state       source//客户端     virtual //LVS集群  destination //RS目标主机
TCP 00:01  CLOSE       20.20.20.22:54801  20.20.20.11:80     10.10.10.13:80
TCP 00:01  CLOSE       20.20.20.22:54802  20.20.20.11:80     10.10.10.13:80
TCP 00:02  CLOSE       20.20.20.22:54805  20.20.20.11:80     10.10.10.13:80
TCP 00:02  CLOSE       20.20.20.22:54806  20.20.20.11:80     10.10.10.13:80
附录一:持久防火墙标记连接
### --- 持久防火墙标记连接
### --- 定义:

~~~     将来自于统一客户端对指定服务(端口)的请求,始终定向至此选定RS,
~~~     不过它可以将两个毫不相干的端口定义为一个集群服务
### --- 构建代码:
### --- 添加一个防火墙规则,当目标地址为172.16.0.8并且目标端口为80时给数据包打一个标记,设置Mark值为10
iptables -t mangle -A PREROUTING  -d 172.16.0.8 -p tcp --dport 80 -j MARK --set-mark 10

### --- 添加一个防火墙规则,当目标地址为172.16.0.8并且目标端口为443 时给数据包打一个标记,设置Mark值为10
iptables -t managle -A PREROUTING -d 172.16.0.8 -p tcp -dport 443 -j MARK --set-mark 10

### --- 添加一个负载调度器,当Mark值为10 时进行负载均衡使用wlc算法,持久化生效时间为120s
service iptables save       //保存防火墙规则持久化生效
ipvsadm -A -f 10 -s wlc  -p 120
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yanqi_vip

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值