LVS

Posted bo-ke

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LVS相关的知识,希望对你有一定的参考价值。

LVS是Linux Vritual Server的简写,即Linu虚拟服务器,是一个虚拟的服务器集群系统。

特点: 

        跨平台 :windows linux 

        作用:实现负载均衡

         优点:1 开源 ,免费  2.在网上能找到一些相关技术资源 3.具有软件负载均衡的一些优点

         缺点 :1.最核心的就是没有可靠的技术支持服务,没有人对其结果负责。

                       2.功能比较简单,支持复杂应用的负载均衡能力较差,比如算法较少。

                        3.配置复杂

                       4.主要应用于linux 

                                          

        核心组件

                     ip_vs:linux的内核功能模块,依赖该内核模块实现负载均衡

                     ipvsadm:应用层程序,该程序可以和内核中的ip_vs模块通信,实现对负载均衡的管理和控制

  有关术语

     1 DR 前段负载均衡节点

      2 RS 后端真正的服务器

     3  VIP 作为用户请求目标的ip

     4  DIP 用于内部主机通信的ip

     5  RIP 后端服务器的ip

     6 CIP 访问客户端的ip

LVS的三种工作模型:

DR模型(直接路由模式)

技术分享图片

原理:

        1.客户端的请求会发送到机房,这是只有DR可以接受这个请求(目标IP MAC都是DR)

        2.DR收到请求后,重新封装请求

           a.会通过预先定义好的算法找出一个RS的MAC地址

           b.将这个请求报文的目标MAC改为RS的mac地址,最后将这个修改mac后的请求报文发送出去

        3.由于是内网络,所有节点都可以接受到请求得数据包

          a.节点自己判断IP MAC是否与自己相同,相同才会接收各处理请求

          b.处理完成后,会将处理结果直接发送客户端(不在经过DR)

注意:

  为了让DR RS可以接收请求,要求需要相同的ip即vip,但这样会导致ip冲突,因为多个接点都有vip,因此客户端在请求获取mac地址的时候,就会出现arp争抢问题

解决方式:将vip绑定在本地的回环接口上(lo),在RS上设置arp抑制(目的不让RS对arp请求作出应答)

DR模式总结

1.调度器仅仅修改目标mac

2.响应报文是直接发送给客户端,不经过调度器

3.RS必须要和DR在同一局域网内

4.DR无法修改请求报文中的目标端口。因此RS的端口必须和DR一致

5.DR和所有的RS都要配置VIP

7.RS必须可以直接和外网直接通信

NAT模型

技术分享图片

工作过程

     1.客户端发送请求,请求报文中的目标Ip都是vip

      2.DR接受请求报文,然后通过算法找出一个RS,然后将请求报文中的目标ip改为RS的RIP

     3.RS接受到DR转发的请求之后,会进行处理,然后将处理的结果发送DIP(源ip是RIP,目标ip是CIP),发送给DR

      4.DR收到RS所返回的数据,然后会修改这个数据包,将源IP地址改为VIP,然后就可以发送给客户端

            补充:RS无法直接给客户端返回数据

             解决方式:将DR的内网卡作为所有RS的网关

             注意:DR需要启动路由转发功能

NAT模式总结

调度器在接收客户端的请求的时候,修改的是目标IP;在给客户端返回数据的时候,修改的是源IP
 DIP和RIP必须在同一个网络,而且可以仅仅是一个私有地址
RS不需要连接外网也能正常工作(RS被保护起来)
请求的数据和应答的数据都需要经过DR的处理,所以在高并发的情况下,DR压力较大
NAT模式的使用场景后端节点较少的情况(RS<20)
RS的网关地址必须指向DR的内网卡IP地址
DR需要至少两个网卡(一个连外网,一个连接内网)
DR需要开启路由转发功能

TUNNEL模式

技术分享图片
在原有报文的基础,添加一个新的IP头

FULLNAT模式
这是nat模型的扩展,RS和DR可以不再同一个网络
RIP 和DIP 可以是私有地址,他们也可以不再同一个网络,RS的网关可以不指向DR的内网卡IP

 

lvs的调度算法
【所谓的算法:DR按照什么规则来从多个RS中筛选出来一个给用户提供服务】
动态算法:DR会实时的检测后端的RS的负载情况,将新用户的请求调度到一个负载较少的RS之上
静态算法:无论后端的RS当前的服务器负载情况怎么样,都安装固定的方式来给RS分配用户请求

静态算法

1.) 轮叫调度 rr (Round Bobin)

这种算法是最简单的,就是按依次循环的方式将请求调度到不同的服务器上,调度器会将所有的请求平均分配给每个真实服务器,不管后端 RS 配置和处理能力,非常均衡地分发下去。

2. )加权轮叫 wrr (Weighted Round Bobin)
这种算法可以给 RS 设置权重,权重越高,分发的请求数越多,权重的取值范围 0 – 100。主要是对rr算法的一种优化和补充, LVS 会考虑每台服务器的性能,并给每台服务器添加要给权值,如果服务器A的权值为1,服务器B的权值为2,则调度到服务器B的请求会是服务器A的2倍。权值越高的服务器,处理的请求越多。

3.)地址散列调度算法 sh

源地址的哈希调度,基于用户的ip地址做哈希表,实现将同一个客户端调度到相同的RS之上

与目标地址散列调度算法类似,但它是根据源地址散列算法进行静态分配固定的服务器资源。

 

动态算法

4 )最少链接 lc
这个算法会根据后端 RS 的连接数来决定把请求分发给谁,比如 RS1 连接数比 RS2 连接数少,那么请求就优先发给 RS1,最小连接数调度,本质是调度到当前负载最低的主机上

5.少链接 wlc
这个算法比 lc 多了一个权重的概念,加权最小连接数调度,本质是调度到当前负载最低的主机上

6.)局部性的最少连接调度算法 lblc

这个算法是请求数据包的目标 IP 地址的一种调度算法,该算法先根据请求的目标 IP 地址寻找最近的该目标 IP 地址所有使用的服务器,如果这台服务器依然可用,并且有能力处理该请求,调度器会尽量选择相同的服务器,否则会继续选择其它可行的服务器基于目标地址的最小连接数调度,这种算法那是lc和dh的组合,适应于cache场景

7)复杂的基于局部性最少的连接算法 lblcr

带有复制功能的lblc

8.)标地址散列调度算法 dh

目标地址哈希调度,基于用户所请求的地址做哈希表,实现将对于相同的地址的请求调度到同一个RS之上,适应于前端是一个DR,后端是多个cache的时候

该算法是根据目标 IP 地址通过散列函数将目标 IP 与服务器建立映射关系,出现服务器不可用或负载过高的情况下,发往该目标 IP 的请求会固定发给该服务器

 

部署LVS-DR实践

1、实验环境

三台机器:

  • Director节点(DR1):  (eth0 10.220.5.192 vip eth0:0 10.220.5.233)
  • Real server1(web1): (eth0 10.220.5.190 vip lo:0 10.220.5.233)
  • Real server2(web2): (eth0 10.220.5.191 vip lo:0 10.220.5.200)

实现思路
DR1上安装lvs,并配置调度规则和算法
web1 web2上只需要安装web服务器,并分别准备一个测试页面

安装步骤
一、安装各种依赖

[[email protected] ~]# yum install libnl* popt* kernel-devel ipvsadm -y

二、给安装的内核开发库做连接

[[email protected] ~]# ln -sv /usr/src/kernels/2.6.32-754.el6.x86_64/ /usr/src/linux
(如果这里不做连接,那么在使用ipvsadm的时候,需要手动指定/usr/src/kernels/2.6.32-754.el6.x86_64/)

三、安装lvs

[[email protected] ~]# yum install ipvsadm -y

ipvsadm常用的使用格式:

ipvsadm -A:添加一个虚拟服务(添加vip)

                -E:编辑修改一个虚拟服务
               -D:删除虚拟服务
-C:清空规则表
-R:从标准输入恢复规则表
--save|-S:将当前内存中的规则保存到标准输出

-a:指定在虚拟服务中添加RS节点
-e:指定在虚拟服务中编辑修改RS节点
-d:指定在虚拟服务中删除RS节点

-L|-l:显示lvs中的规则表
-Z:将计数器清零

-t service-address[:port]:该规则是对tcp协议的请求做调度
-u service-address[:port]:该规则是对udp协议的请求做调度
-f:表示这个请求是经过iptables所标记过的服务类型
-r: 指定真实服务器的地址
-s scheduler:指定该规则要用的调度算法(rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq)
-p [time]:指定在多次时间以内,将相同的客户端调度到相同的后端节点之上,默认时间300s
-w:设置RS节点的权重
-g:指定用DR模式(默认)
-i:指定用tunnel模式
-m:指定用nat模式

配置DR1

一、添加一个vip

[[email protected] ~]# ifconfig eth0:0 10.220.5.233/24 up

二、在lvs中添加一个虚拟服务(vip)

[[email protected] ~]# ipvsadm -A -t 10.220.5.233:80 -s rr 

三、在虚拟服务中添加真实服务器

[[email protected] ~]# ipvsadm -a -t 10.220.5.233:80 -r 10.220.5.190:80 -w 1 -g
[[email protected] ~]# ipvsadm -a -t 10.220.5.233:80 -r 10.220.5.191:80 -w 1 -g

查看一下RS的信息

[[email protected] ~]# service ipvsadm status
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.220.5.233:80 rr persistent 80
  -> 10.220.5.190:80              Route   1      0          0         
  -> 10.220.5.191:80              Route   1      0          0         

四、保存规则

[[email protected] ~]# service ipvsadm save
ipvsadm: Saving IPVS table to /etc/sysconfig/ipvsadm:      [  OK  ]

查看状态

[[email protected] ~]# ipvsadm -L -n --stats
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port               Conns   InPkts  OutPkts  InBytes OutBytes
  -> RemoteAddress:Port
TCP  10.220.5.233:80                     0        0        0        0        0
  -> 10.220.5.190:80                     0        0        0        0        0
  -> 10.220.5.191:80                     0        0        0        0  

配置RS

一、安装配置web服务(本次用httpd)

[[email protected] ~]# cd /var/www/html/
[[email protected] html]# echo "190">index.html
在191上做同样的步骤,echo "190">index.html改为echo "190">index.html
之后都启动httpd

二、给RS绑定VIP(所有的RS都需要做)

[[email protected] ~]# ifconfig lo:0 10.220.5.233/32 up

三、在RS做ARP抑制(设置不对某些arp请求做应答)190 和191都做

[[email protected] ~]# echo "1">/proc/sys/net/ipv4/conf/lo/arp_ignore
[[email protected] ~]# echo "1">/proc/sys/net/ipv4/conf/all/arp_ignore 
[[email protected]localhost ~]# echo "2">/proc/sys/net/ipv4/conf/lo/arp_announce
[[email protected] ~]#  echo "2">/proc/sys/net/ipv4/conf/all/arp_announce

四  用浏览器测试

http://10.220.5.233

如果每刷新一次数值在190和191之间来回切换,说明部署成

******************************关于arp抑制***************************

作用:设置不对某些arp请求做应答
实现原理:修改内核参数 /proc/sys/net/ipv4/conf/

控制方式1:arp_ignore
0:默认,表示的当该主机收到arp请求,只有该主机有所请求的哪个IP地址,就会给对方做成应答
1:只对哪些请求的目标IP是当前主机的网卡接口(这个接口就是插着网线的接口)上的地址的时候,才会做出应答

控制方式2:arp_announced
作用:限制当前主机做arp应该的条件(也就是限制当用户所请的ip是哪个IP的时候,才做arp应答)
0:默认值,表示在任意网络接口上的IP都可以做arp应答
1:优先使用本地的接口做arp应答
2:优先使用子接口做arpm应答

******************************关于arp抑制***************************

 

















































以上是关于LVS的主要内容,如果未能解决你的问题,请参考以下文章

负载均衡集群相关LVS介绍LVS调度算法LVS NAT模式搭建

LVS配置

LVS负载均衡地址转换使用轮询算法实验(结尾代码随记)

LVS四层负载均衡器原理和DR模式的搭建

LVS的工作模式介绍和NAT模式&DR模式实验步骤

linux,centos7上搭建LVS负载均衡