LVS

本文深入讲解了LVS(Linux Virtual Server)集群的概念、工作原理及其配置方法。包括LVS的基本介绍、不同工作模式(如NAT、DR和TUN)、调度算法以及如何使用ipvsadm工具进行管理和配置。

LVS

Linux Virtual Server —- Linux 虚拟服务器

作用:当有应用服务需要提供到外网进行访问时,当并发遇到瓶颈时可以用LVS此技术。
优势:灵活的调度,把提供统一服务的所有服务器集中在一起行成一个集成对外提供服务实现对服务器的负载均衡。
缺点:无法进行应用层的调度

Linux Cluster – 讲LVS前我们先说下Cluster
  • LB :Load Balancing 负载均衡
  • HA :High Availiablity 高可用
    • MTBF:Mean Time Between Faiilure 平均无故障时间
    • MTTR : Mean Time To Restoration ( repair ) 平均恢复前时间
    • A=MTBF/( MTBF+MTTR)
      • 99% , 99.9% , 99.99% , 99.999% , 99.9999%
  • HPC:High-performance computing 高性能
LB Cluster

硬件

- F5 Big-IP
- Citrix Netscaler
- A10 A10

软件

-Lvs : 本次讲的 
-nginx: 比较流行,支持七层的调度
-haproxy:比较流行,支持七层的调度
... 等等

LVS

负载调度器,集成到Linux内核。
这里写图片描述

LVS中的术语:

  • VS: Load balancing 负责调度的服务器
    RS: Real Server 提供给用户访问的服务器
    CIP: 客户IP Client IP
    VIP:Virtual server IP 也就是VS的外网IP
    DIP:Director IP VS内网的IP
    RIP:Real Server IP 提供服务的服务器IP
    访问流程:CIP <–> VIP <==>DIP <–>RIP

LVS集群可配置多种类型

  • lvs-nat : 通过修改请求报文的目标地址为根据调度算法所挑选出的某RS的RIP来进行转发
  • lvs-dr :每台RS都配置两个IP一个VIP地址一个RIP,请求报文通过MAC进行转发,回应报文通过RIP出去
  • lvs-tun :
  • lvs-fullnat :
调度算法
  • 静态方法:
    • RR — 轮询
    • WRR – 权重轮询 如性能比较好的让它多负担点访问请求
    • SH — 源IP地址相同的请求统一分配至第一次分配的RS
    • DH —目票地址相同的请求统一分配至第一次分配的RS
  • 动态方法 – 根据每个RS当前的负载状态及调度算法进行调度 Overhead值小的RS将被调度
    • LC– least connections 最少连接算法 Overhead=activeconns*256+inactiveconns
    • WLC – weighted LC 权重最少连接算法 Ovehead=(activeconns*256+inactiveconns)/weight (这算法是默认的)
    • SED –初始连接高权重优先算法 Ovehead=(activeconns+1)*256/weight
    • NQ – 第一次均匀分配,后续SED
    • LBLC –动态的DH算法
    • LBLCR – 带复制功能的LBLC解决LBLC负载不均衡问题,从负载重的复制到负载轻的RS
LVS的工具
  • ipvsadm: 用户空间的命令行工具,规则管理器
    • ipvsadm-save 保存命令 ipvsadm-save > /PATH/TO/IPVS_FILE
    • ipvsadm-restore 加载命令 ipvsadm-restore < /PATH/TO/IPVS_FILE
  • ipvs:内核空间的组件

  • ipvsadm命令

    • -A|E|D :应用在VS上的 A表示添加,E表示修改,D表示删除
    • -t|u|f :VS 和添加RS都使用 t 是 TCP u是UDP f是打的标签(如iptables 的mangle表里打的标签)
    • -s :指定调度算法,默认的是WLC
    • -a|e|d :应用在VS上用来添加修改或删除RS的

    • 指定类型

      • -g :指定为lvs-dr类型
      • -i :指定为lvs-tun类型
      • -m :指定为lvs-nat类型
  • -w :设定权重数 越大负载分配越多
  • -C :清空所有ipvsadm设定
  • -Z :清空调度的计数器
  • -L|l :查看调度配置 使用时必须放至前面 后面还可以添加扩展选项
    • -(L|l)n :显示地址和端口号
    • -(L|l) –exact : 查看精确的配置信息
    • -(L|l) –connection|-c :查看当前RS的访问信息
    • -(L|l)–stats :查看RS的访问统计信息
    • -(L|l)–rate:查看当前访问的输出速率信息
lvs-nat

lvs-nat的工作模式 : 本质是多目标IP的DNAT,通过将请求报文中的目标地址和目
标端口修改为某挑出的RS的RIP和PORT实现转发

下图做的一个简单的实验环境:
这里写图片描述
图中实验环境:

1.1 VS的网络配置

[root@localhost ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
[root@localhost network-scripts]# ipvsadm -A -t 172.18.6.50:80 -s rr
[root@localhost network-scripts]# ipvsadm -a -t 172.18.6.50:80 -r 192.168.3.4 -m
[root@localhost network-scripts]# ipvsadm -a -t 172.18.6.50:80 -r 192.168.3.5 -m

1.2 RS1和R2的路由指向DIP

[root@localhost ~]#route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.3.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1003   0        0 eth1
0.0.0.0         192.168.3.3     0.0.0.0         UG    0      0        0 eth0

1.3 Client的测试结果

[root@localhost ~]# curl 172.18.6.50
this is RS1 website
[root@localhost ~]# curl 172.18.6.50
this is RS2 website
[root@localhost ~]# curl 172.18.6.50
this is RS1 website
[root@localhost ~]# curl 172.18.6.50
this is RS2 website
[root@localhost ~]# curl 172.18.6.50
this is RS1 website
[root@localhost ~]# curl 172.18.6.50
this is RS2 website
[root@localhost ~]# curl 172.18.6.50
this is RS1 website
lvs-dr

这里写图片描述
vs的配置:

[root@VS ~]# cat lvs_vs.sh 
#!/bin/bash
#
#
#
#############################################
vip='192.168.3.200'
iface='ens33:1'
mask='255.255.255.255'
port='80'
rs1='192.168.3.4'
rs2='192.168.3.5'
scheduler='wrr'
type='-g'
case $1 in

start)
    ifconfig $iface $vip netmask $mask broadcast $vip up
    iptables -F

    ipvsadm -A -t ${vip}:${port} -s $scheduler
    ipvsadm -a -t ${vip}:${port} -r ${rs1} $type -w 1
    ipvsadm -a -t ${vip}:${port} -r ${rs2} $type -w 1
    echo "The VS Server is Ready!"
    ;;

stop)

    ipvsadm -C
    ifconfig $iface down
    echo "The VS Server is Canceled!"
    ;;
*)
    echo "Usage: $(basename $0) start|stop"
    exit 1
    ;;
esac

RS1和RS的统一配置

[root@localhost ~]#route add default gw 192.168.3.2
[root@localhost ~]#route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.3.200   0.0.0.0         255.255.255.255 UH    0      0        0 lo
192.168.3.0     0.0.0.0         255.255.255.0   U     0      0        0 eth2
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth2
0.0.0.0         192.168.3.2     0.0.0.0         UG    0      0        0 eth2
统一配置路由指向192.168.3.2


[root@localhost ~]#cat lvs.sh 
#!/bin/bash
#
#
#####################################
vip='192.168.3.200'
mask='255.255.255.255'
dev='lo:1'
case $1 in

start)
      echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
      echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
      echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
      echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
      ifconfig $dev $vip netmask $mask broadcast $vip up
      route add -host $vip dev $dev
      ;;

stop)
      ifconfig $dev down
      echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
      echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
      echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
      echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce
      ;;
*)
      echo "Usage:$(bosename $0)start|stop"
      exit 1
      ;;
esac
ldirectord + lvs-dr

ldirectord的作用是当RS出现故障时,会自动将RS推出集群,做到故障机器的排除而且代替ipvsadm命令进行配置
这里我们做用到的包 ldirectord-3.9.6-0rc1.1.1.x86_64.rpm
链接:http://pan.baidu.com/s/1i4YMhz3 密码:8dpn

搭建图
这里写图片描述

这里我们其它配置不做变动,只是稍微修改了下VS的配置

[root@ localhost ha.d]# rpm -ql ldirectord
/etc/ha.d
/etc/ha.d/resource.d
/etc/ha.d/resource.d/ldirectord
/etc/init.d/ldirectord
/etc/logrotate.d/ldirectord
/usr/lib/ocf/resource.d/heartbeat/ldirectord
/usr/sbin/ldirectord
/usr/share/doc/ldirectord-3.9.6
/usr/share/doc/ldirectord-3.9.6/COPYING
/usr/share/doc/ldirectord-3.9.6/ldirectord.cf
/usr/share/man/man8/ldirectord.8.gz
[root@ localhost ha.d]# cp /usr/share/doc/ldirectord-3.9.6/ldirectord.cf /etc/ha.d/  -->ldirectord的服务启动需要一个配置文件的,这边拷贝到/etc/ha.d/下的文件就是模板配置文件


[root@ localhost ha.d]# vim /etc/ha.d/ldirectord.cf 
# Global Directives
checktimeout=3                               -->这里是检测超时 33秒
checkinterval=1                              -->这里是检测间隔时间 
#fallback=192.168.3.3:80                     -->这里是错误返回页面
#fallback6=[::1]:80
autoreload=yes                               -->这个是自动加载配置文件 开启后所配置的项将自动加载
#logfile="/var/log/ldirectord.log"
#logfile="local0"
#emailalert="admin@x.y.z"
#emailalertfreq=3600
#emailalertstatus=all
quiescent=no
# Sample for an http virtual service
virtual=192.168.3.200:80                     --> VIP地址及端口
        real=192.168.3.4:80 gate             --> RS地址及端口 gate是LVS-DR模式
        real=192.168.3.5:80 gate
#       real=192.168.6.6:80 gate
#       fallback=127.0.0.1:80 gate
        service=http
        scheduler=wrr
        #persistent=600
        #netmask=255.255.255.255
        protocol=tcp
        checktype=negotiate
        checkport=80                         --> 这里是检查RS的端口
        request="index.html"                 --> 请求的RS默认HTML页面
        receive="this"                       --> 检测页面包含此字符否,如果检测失败将会剔除失败的RS
        virtualhost=www.x.y.z

[root@ localhost ha.d]#systemctl start ldirectord.service      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值