lVS(Linux Virtual Server)

Linux虚拟服务器,是一个虚拟的服务器集群系统。用来实现负载均衡。

一、LVS的三种模式:

1、LVS-DR:直接路由

      此种方式是最常用的方式,所有的Director和RealServer都在同一个物理网络中(交换机)并且都只有一块网卡。

 

lvs服务启动命令 lvs部署安装_服务器

 

2、LVS-TUN:隧道模式

        LVS/TUN与 LVS/DR 类似。只是在报文外面再加一层IP封装,整个过程比LVS/DR模式多一次报文的封装/解封过程。

     不同:LVS/DR只支持本地网络,LVS/TUN却可以跨机房。

lvs服务启动命令 lvs部署安装_调度算法_02

 

 

3、LVS-NAT:地址转换

       数据包来回都要经过NAT转换,所以Director Server(即LVS服务器)将成为系统瓶颈。

        使用NAT模式将需要两个不同网段的IP,一个IP接受外部请求服务,一般为外网ip,此IP称为VIP,

        一个IP与后realserver同一地址段,负责相互通信,称为DIP。后端realserver的网关地址需指向DIP。

        同时需开启linux内核的数据包转发功能。

lvs服务启动命令 lvs部署安装_lvs服务启动命令_03

 

 

 

二、LVS调度算法

1. 轮叫调度 rr

2. 加权轮叫 wrr

3. 最少链接 lc

4. 加权最少链接 wlc

5. 基于局部性的最少连接调度算法 lblc

6. 复杂的基于局部性最少的连接算法 lblcr

7. 目标地址散列调度算法 dh

8. 源地址散列调度算法 sh

(常用前4种)

 

三、DR模式的配置详细

  

三台server的ip

direct_server:192.168.88.49

    real_server1:192.168.88.50

    real_server2:192.168.88.51

    

vip:192.168.254.250 (Virtual ip) 

    

1、direct_server端配置(可以称为boss端)

    yum install ipvsadm    #安装ipvsadm

    ipvsadm -C     #清除所有虚拟服务

添加ipvs规则:

      添加地址为192.168.88.250端口为80的虚拟服务,指定调度算法为rr轮叫调度

            ipvsadm -A -t 192.168.88.250:80 -s rr

     添加真实服务器,指定传输模式为DR

            ipvsadm -a -t 192.168.88.250:80 -r 192.168.88.50:80 -g

            ipvsadm -a -t 192.168.88.250:80 -r 192.168.88.51:80 -g

      { 注意:此处的例子中客户、调度服务器、真实服务器都是位于同一网段的

        -C, --clear:清除所有虚拟服务。

        -A: --add-service增加一个虚拟服务,

        -a, --add-server为虚拟服务添加一个real server(RS)

        -t: --tcp-service service-address, 指定虚拟服务为tcp服务

              IP地址:端口号

        -g, --gatewaying:使用网关(即直接路由DR),此模式是默认模式。

        -s, --scheduler scheduling-method:指定调度算法( rr轮叫调度)

       }

 

    ifconfig ens33:0 192.168.88.250 broadcast 192.168.88.250 netmask 255.255.255.255 up   #添加一个ip

    route add -host 192.168.88.250 dev ens33:0   #添加一条路由,使访问192.168.88.250的时候走ens33:0这个网卡

 

启动服务:

    systemctl start httpd.service

    systemctl start ipvsadm.service

(在/etc/sysconfig/下创建一个ipvsadm文件 不然服务起不来)

 

/etc/sysconfig ipvsadm  #配置文件(实验中不用配置)

2、real_server端配置,server1和2的配置相同(可以称为员工)

1)在真实服务器上添加虚拟IP

    ifconfig lo:0 192.168.88.250 broadcast 192.168.88.250 netmask 255.255.255.255 up     #loopback(本地回环)

    route add -host 192.168.88.250 dev lo:0


2)设置真实服务器的lo接口不做ARP应答

设置这个选项可以使得各个接口只对本接口上的地址进行响应

    echo "1">/proc/sys/net/ipv4/conf/lo/arp_ignore

    echo "2">/proc/sys/net/ipv4/conf/lo/arp_announce

    echo "1">/proc/sys/net/ipv4/conf/all/arp_ignore

    echo "2">/proc/sys/net/ipv4/conf/all/arp_announce

    service httpd restart

    

    arp_ignore:定义接收到ARP请求时的响应级别      

        0:默认,只用本地配置的有响应地址都给予响应       

        1:仅仅在目标IP是本地地址,并且是配置在请求进来的接口上的时候才给予响应

            (仅在请求的目标地址配置请求到达的接口上的时候,才给予响应)

 

   arp_announce:定义将自己的地址向外通告时的级别       

        0:默认,表示使用配置在任何接口的任何地址向外通告       

        1:尽量仅向目标网络通告与其网络匹配的地址       

        2:仅向与本地接口上地址匹配的网络进行通告       

 

real_server端配置(为了让查看信息时候好辨认)

vim /var/www/html/index.html

lvs服务启动命令 lvs部署安装_调度算法_04

 

3、测试

打开另一台虚拟机用curl 192.168.88.250测试是否成功

lvs服务启动命令 lvs部署安装_lvs服务启动命令_05

 

ipvsadm -Ln --stats  查看状态

查看-L

-n:数字格式显示IP地址和端口号

--stats:统计信息

(轮叫调度:负载均衡两台RS访问次数会相等)

lvs服务启动命令 lvs部署安装_服务器_06

 

如果不通:

提示未找到路由或者拒绝连接

1、检查防火墙是否关闭

2、检查DS端ipvsadm服务是否开启

3、检查http服务是否开启,配置文件里listen端口号是否为80 

lvs服务启动命令 lvs部署安装_IP_07

 

 

tun隧道模式

 

    lvs-server

    ifconfig tunl0 192.168.88.250 broadcast 192.168.88.250 netmask 255.255.255.0 up

    route add -host 192.168.88.250 dev tunl0

    ipvsadm -A -t 192.168.88.250:80 -s rr

    ipvsadm -a -t 192.168.88.250:80 -r 192.168.88.18 -i

    ipvsadm -a -t 192.168.88.250:80 -r 192.168.88.19 -i

 

 

    real server

    ifconfig tunl0 192.168.88.250 netmask 255.255.255.255 broadcast 192.168.88.250 up

    route add -host 192.168.88.250 dev tunl0

    echo "1" >/proc/sys/net/ipv4/conf/tunl0/arp_ignore

    echo "2" >/proc/sys/net/ipv4/conf/tunl0/arp_announce

    echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore

    echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce

    echo "0" >/proc/sys/net/ipv4/conf/tunl0/rp_filter

    echo "0" > /proc/sys/net/ipv4/conf/all/rp_filter

 

    0:不开启源地址校验。

    1:开启严格的反向路径校验。对每个进来的数据包,校验其反向路径是否是最佳路径。

        如果反向路径不是最佳路径,则直接丢弃该数据包。

    2:开启松散的反向路径校验。对每个进来的数据包,校验其源地址是否可达,即反向路径是否能通(通过任意网口),

        如果反向路径不同,则直接丢弃该数据包。