LVS(Linux virual server)

一.什么是集群

        集群就是把多个服务器或计算机,组成一个整体,一个独立的系统,每台服务器里的数据和实现的功能都一样。

二.集群分类

1.LB(LoadBalancing 负载均衡)

        通过调度器把流量访问分发给后端多台主机,每个主机只承担一部分访问

2.HA(High Availiablity 高可用)

        拥有主节点和备用节点,当主节点出现故障,备用节点自动代替主节点接管服务

3.HPC(High-performance computing 高性能计算)

        把一个大型的计算任务拆分,分给多个节点并行计算

三.Lvs的作用

1.实现四层负载均衡

        接受客户端的请求,根据目标IP和目标协议及端口将其调度转发至后端的真实主机,根据调度算法来挑选RS

2.调度分发流量

        通过集群来把客户端请求访问流量,分发给后端服务器,提高并发能力

3.自动故障检测

        如果后端有服务器宕机,LVS会自动剔除该节点,不在给它分发流量,保证服务正常运行

四.Lvs的四种模式及原理

1.nat模式

        客户端发送请求数据包,数据包中的CIP访问目标地址VIP和端口,VS服务器接收到客户端的请求,做DNAT把请求数据包中的VIP替换成,RS的RIP和相应端口,如果RS1响应请求发送响应数据包,其中就会包含RIP1和目标CIP的相应端口,VS收到响应数据包则会改变RIP1变为VIP,响应目标端口也会从9000改变为80,再把响应数据包传给客户端。

        弊端:Nat模式接受和返回客户端数据包时都要经过lvs的调度机,所以调度机容易堵塞

2.DR模式

        客户端发送数据帧给调度机,数据帧中包括:客户端IP+MAC,VIP+VIP的MAC,调度机接收到数据帧把帧中的VIP的MAC改为RS1的MAC,发送给RS1,RS1得到数据包做出相应回传数据数据包,数据包中内容不变。

        

3.TUN模式

        不修改请求报文的IP首部,而是在封装一个IP首部:源IP是DIP,目标IP是RIP

        客户端发送请求数据包,包内有源IP+VIP+DPORT,到达调度器后,vs对数据包重新封装添加了IP报文头,新添加的报文头中包含DIP+RSIP1 发送到RS1,RS收到vs调度器发送的数据包作出响应,响应报文中包含VIP+CIP+PORT,回传给客户端。

4.fullnet模式

                通过同时修改请求报文的源IP地址和目标IP地址进行转发

5.总结

NAT模式TUN模式DR模式
RS操作系统不限支持隧道禁用arp
调度器和服务器网络可跨网络可跨网络不可跨网络
调度服务器数量
RS服务器网关指向到调度器DIP指向到路由指向到路由

  • nat和fulllnat:请求和响应报文都经由Director
  • nat:RIP的网关要指向DIP
  • fullnat:RIP和DIP未必在同一IP网络,但必须要能通信
  • dr和tun:请求报文要经由Director,但响应报文由RS直接发往Client
  • dr:通过封装新的MAC首部实现,通过MAC网络转发
  • tun:通过在原IP报文外封装新IP头部实现转发,支持远距离通信

五、Lvs的13种算法

分为静态和动态方法

静态:根据算法本身进行调度,不考虑RS的负载情况

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

1.静态调度算法

  • RR:roundrobin轮询RS分别被调度,当RS配置有差别时不推荐
  • WRR:Weighted RR ,加权轮询根据RS的配置进行加权调度,性能差的RS被调度的次数少
  • SH:Source Hashing,实现session sticky,源IP地址hash;就是同一个用户IP发送的所有请求,永久固定发给同一个后台服务器,作用保持会话稳定不会频繁掉线。
  • DH:Destination Hashing;目标地址哈希,发往同一个目标IP地址的请求,始终转发一台后端服务器,就相当于把资源缓存下来,每个用户访问这个目标地址时,就不用反复下载数据。

2.动态调度算法

  • LC:least connections 最少链接

        公式:负载值=活动链接×256+非活动链接

        原理:谁当前连接数最少就给谁

        适合场景:长连接

  • WLC:Weighted LC 权重最少链接

        公式:负载值 =(活跃连接 ×256 + 空闲连接) ÷ 权重

        原理:在链接数少的基础上,加上服务器性能,性能好的分配到的请求会更多

        适合场景:最常用

  • SED:Shortest Expection Delay 最短预期延迟

        公式:负载值 =(活跃连接 + 1 + 空闲连接)×256 ÷ 权重

        原理:解决了WLC出现空闲高性能服务器没有新请求的情况,相当于提前预判请求给予服务器的压力,优先分给高权重机器

  • NQ Never Queue 永不排队

        原理:第一轮,只要有服务器完全空闲,就分配,等所有服务器都有链接,再进行SED算法

  • LBLC   Locality-Based LC  基于本地的最少连接

        原理:智能版DH目标哈希,原版 DH:死死绑定目标地址,不管服务器卡不卡,LBLC:优先保证同一个目标地址流量尽量走同一台 RS(方便缓存); 如果这台服务器负载太高,就打破绑定,转发到别的空闲节点

  • LBLCR LBLC with Replication 带复制的 LBLC

        原理:解决LBLC 问题:缓存只存在固定一台机器,节点压力过大,LBLCR 还是优先同一目标走同一个服务器,不同的是当服务器负载太高,会把缓存复制给空闲服务器,多个服务器共同承载同一目标地址的流量

3. 4.15版本内核以后新增的调度算法

  • FQ  Weighted Fai Over 加权故障转移

        原理:它会给服务器打上过载标记,如果一个服务器有过载标记,则直接跳过该台服务器,不给它分配新连接,会去找没被打上过载标记+权重最大的服务器,会把所有新连接分给它,直到它被打上过载标记,才会去找下一台。

  • OVF Overflow-connection 溢出连接调度

       规则:

        1.优先找权重最高、没过载、权重不为 0 的服务器
        2.持续往这台机器分发连接,直到它活跃连接数 ≥ 权重数值(达到上限)
        3.满了之后,换下一个权重最高的服务器继续承接流量

六、Lvs的多端口轮询问题解决方案

1.设定实验环境

[root@lvs ~]# ipvsadm -A -t 192.168.0.200:80 -s rr
[root@lvs ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.20 -g
[root@lvs ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10 -g
[root@lvs ~]# ipvsadm -A -t 192.168.0.200:443 -s rr
[root@lvs ~]# ipvsadm -a -t 192.168.0.200:443 -r 192.168.0.10 -g
[root@lvs ~]# ipvsadm -e -t 192.168.0.200:443 -r 192.168.0.10:443 -g
[root@lvs ~]# ipvsadm -a -t 192.168.0.200:443 -r 192.168.0.20:443 -g
[root@lvs ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.0.200:80 rr
  -> 192.168.0.10:80              Route   1      0          0         
  -> 192.168.0.20:80              Route   1      0          0         
TCP  192.168.0.200:443 rr
  -> 192.168.0.10:443             Route   1      0          0         
  -> 192.168.0.20:443             Route   1      0          0

设定两个端口的策略

2.错误示例

http和https两种协议访问的页面是一样的

3.解决方案

[root@lvs system-connections]# iptables -t mangle -A PREROUTING -d 192.168.0.200 -p tcp -m multiport --dports 80,443 -j MARK --set-mark  6666


[root@lvs system-connections]# ipvsadm -A -f 6666 -s rr
[root@lvs system-connections]# ipvsadm  -a -f 6666 -r 192.168.0.10 -g
[root@lvs system-connections]# ipvsadm  -a -f 6666 -r 192.168.0.20 -g


#测试
[root@localhost ~]# curl  192.168.0.200;curl -k https://192.168.0.200
RS2 - 192.168.0.20
RS1 - 192.168.0.10

七、Lvs的会话粘滞解决方案

1.设置调度策略

[root@lvs ~]# ipvsadm -A -f 6666 -s rr -p 1

[root@lvs ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
FWM  6666 rr persistent 1
  -> 192.168.0.10:0               Route   1      0          0
  -> 192.168.0.20:0

2.测试

[root@localhost ~]# curl  192.168.0.200
RS1 - 192.168.0.10
[root@localhost ~]# curl  192.168.0.200
RS1 - 192.168.0.10

3.观察

[root@lvs ~]# watch -n 1 ipvsadm -Lnc
IPVS connection entries
pro expire state       source             virtual            destination
TCP 01:56  FIN_WAIT    172.25.254.99:42420 192.168.0.200:80   192.168.0.20:80
IP  00:57  ASSURED     172.25.254.99:0    0.0.26.10:0        192.168.0.20:0
TCP 01:54  FIN_WAIT    172.25.254.99:46216 192.168.0.200:80   192.168.0.20:80
TCP 01:55  FIN_WAIT    172.25.254.99:46222 192.168.0.200:80   192.168.0.20:80

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值