美文网首页
第四十二节、LVS负载均衡服务

第四十二节、LVS负载均衡服务

作者: 妄语莫言 | 来源:发表于2018-01-17 17:28 被阅读0次

    LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集
    目前主流的负载均衡服务有以下三种:LVS、Haproxy、Nginx
    LVS基于4层网络层效率较高
    Haproxy基于7层应用层,都适用于高并发网站,对机器要求高

    特点
    • 可伸缩网络服务的几种结构,它们都需要一个前端的负载调度器(或者多个进行主从备份)。我们先分析实现虚拟网络服务的主要技术,指出IP负载均衡技术是在负载调度器的实现技术中效率最高的。在已有的IP负载均衡技术中,主要有通过网络地址转换(Network Address Translation)将一组服务器构成一个高性能的、高可用的虚拟服务器,我们称之为VS/NAT技术(Virtual Server via Network Address Translation)
    • 在分析VS/NAT的缺点和网络服务的非对称性的基础上,我们提出了通过IP隧道实现虚拟服务器的方法VS/TUN (Virtual Server via IP Tunneling),和通过直接路由实现虚拟服务器的方法VS/DR(Virtual Server via Direct Routing),它们可以极大地提高系统的伸缩性VS/NAT、VS/TUN和VS/DR技术是LVS集群中实现的三种IP负载均衡技术
    工作原理
    • 用户请求LVS VIP,LVS根据转发方式和算法,将请求转发给后端服务器,后端服务器接受到请求,返回给用户。-
      对于用户来说,看不到WEB后端具体的应用
    • LVS转发方式有三种,分别是NAT、DR、TUN模式,常用算法:RR(round-robin)、LC(least_connection)、W(weight)RR、WLC模式等(RR为轮询模式,LC为最少连接模式,WRR为权重模式)
      NAT修改数据包的IP,DR修改MAC,TUN也是修改MAC但多列一层隧道加密
    • LVS NAT原理:用户请求LVS到达director,director将请求的报文的目标地址改成后端的realserver地址,同时将报文的目标端口也改成后端选定的realserver相应端口,最后将报文发送到realserver,realserver将数据返给director,director再把数据发送给用户。(两次请求都经过director,所以访问大的话,director会成为瓶颈),realserver上需要配置网关,网关地址就是LVS的VIP
    • LVS DR原理:用户请求LVS到达director,director将请求的报文的目标MAC地址改成后端的realserver MAC地址,目标IP为VIP(不变),源IP为用户IP地址(保持不变),然后Director将报文发送到realserver,realserver检测到目标为自己本地IP,如果在同一个网段,然后将请求直接返给用户。如果用户跟realserver不在一个网段,则通过网关返回用户。(此种转发效率最高),realserver和LVS上配置相同的VIP地址,但是realserver上会限制ARP响应,防止realserver直接向用户提供服务,而是只接收LVS转发的请求提供服务.
    • LVS TUN原理:跟LVS DR类似,也是改变封装MAC地址,多了一层隧道加密。实施环境复杂,比LVS DR模式效率略低。
    服务安装

    LVS技术是基于ip_vs内核模块(ip虚拟技术),需要先安装软件包ipvsadm-1.2.4.tar.gz,注意软件版本和内核版本的对应关系,内核2.6对应ipvs1.24版本

    #查看系统内核版本是2.6.32
    [root@localhost src]# uname -a
    Linux localhost.localdomain 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
    #下载ipvsadm-1.2.4
    [root@localhost src]# wget -c http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz
    --2018-01-07 14:10:33--  http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz
    正在解析主机 www.linuxvirtualserver.org... 173.255.202.51, 2600:3c00::f03c:91ff:fe96:fcc2
    正在连接 www.linuxvirtualserver.org|173.255.202.51|:80... 已连接。
    已发出 HTTP 请求,正在等待回应... 200 OK
    长度:36598 (36K) [application/x-gzip]
    正在保存至: “ipvsadm-1.24.tar.gz”
    100%[=======================================================================>] 36,598      23.4K/s   in 1.5s    
    2018-01-07 14:10:36 (23.4 KB/s) - 已保存 “ipvsadm-1.24.tar.gz” [36598/36598])
    #解压源码包后切换到解压目录
    [root@localhost src]# tar zxvf ipvsadm-1.24.tar.gz
    [root@localhost src]# cd ipvsadm-1.24
    [root@localhost ipvsadm-1.24]# ls
    config_stream.c  debian           ipvsadm.8        ipvsadm-restore.8  ipvsadm.sh       libipvs   SCHEDULERS
    config_stream.h  dynamic_array.c  ipvsadm.c        ipvsadm-save       ipvsadm.spec     Makefile  TAGS
    contrib          dynamic_array.h  ipvsadm-restore  ipvsadm-save.8     ipvsadm.spec.in  README    VERSION
    

    ipvsadmin软件包需要先做好软链接编译进内核然后直接进入解压目录安装

    #做软链接
    [root@localhost src]# ln -s /usr/src/kernels/2.6.32-431.el6.x86_64/  /usr/src/linux
    [root@localhost src]# ll
    总用量 10052
    drwxr-xr-x. 2 root root    4096 9月  23 2011 debug
    drwxr-xr-x  5 root root    4096 1月   7 14:15 ipvsadm-1.24
    -rw-r--r--  1 root root   36598 12月 11 2005 ipvsadm-1.24.tar.gz
    drwxr-xr-x. 3 root root    4096 12月 16 20:10 kernels
    lrwxrwxrwx  1 root root      39 1月   7 14:18 linux -> /usr/src/kernels/2.6.32-431.el6.x86_64/
    #进入ipvsadmin解压目录后安装
    [root@localhost src]# cd ipvsadm-1.24
    [root@localhost ipvsadm-1.24]# make 
    [root@localhost ipvsadm-1.24]# make install
    

    查看安装是否成功ipvasdm

    [root@localhost ipvsadm-1.24]# ipvsadm
    IP Virtual Server version 1.2.1 (size=4096)   #显示ipvs版本信息及转发表的大小
    Prot LocalAddress:Port Scheduler Flags
      -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
    
    ipvs服务配置通过命令直接配置
    • A 增加一台虚拟服务器地址
    • t 虚拟服务器提供的是tcp服务
    • s 使用的调度算法
    • a 在虚拟服务器中增加一台后端真实服务器
    • r 指定真实服务器地址
      -m 设置当前转发方式为NAT模式;-g为直接路由模式;-i 为隧道模式
    • w 后端真实服务器的权重
      配置的步骤有两步,第一步为定义端口服务,第二步为添加realserver后端服务
    #添加虚拟的VIP192.168.15.202,端口80,调度算法rr轮询
    [root@localhost ~]# ipvsadm -A -t 192.168.15.202:80 -s rr
    #添加后端服务器realserver192.168.15.172,直接路由模式,权重2
    [root@localhost ~]# ipvsadm -a -t 192.168.15.202:80 -r 192.168.15.172 -g -w 2
    #查看参数打印列表Ln
    [root@localhost ~]# 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.15.202:80 rr
      -> 192.168.15.172:80            Local   2      0          0   
      -> 192.168.15.173:80            Local   2      0          0   
    #使用文件定向符保存ipvs配置
    [root@localhost ~]# ipvsadm-save >/tmp/ipvs.txt
    #加载恢复ipvs配置
    [root@localhost ~]# ipvsadm-restore </tmp/ipvs.txt
    
    在realserver后端真实服务器上配置VIP
    #将VIP绑定到loopback本地回还地址上不会和其他网卡冲突
    [root@localhost ~]# VIP=192.168.15.202
    [root@localhost ~]# ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
    [root@localhost ~]# ifconfig
    lo:0      Link encap:Local Loopback  
              inet addr:192.168.15.202  Mask:255.255.255.255
              UP LOOPBACK RUNNING  MTU:16436  Metric:1
    #添加网关地址
    [root@localhost ~]# /sbin/route add -host $VIP dev lo:0
    [root@localhost ~]# route -n
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
    192.168.15.202  0.0.0.0         255.255.255.255 UH    0      0        0 lo
    192.168.15.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
    0.0.0.0         192.168.15.1    0.0.0.0         UG    0      0        0 eth0
    
    realserver不仅仅要绑定VIP,还要通过以下脚本抑止自己的arp响应
    [root@localhost ~]#  vim auto_realserver.sh
    #!/bin/sh
    #LVS Client Server
    VIP=192.168.15.202                       #定义VIP
    case  $1  in                                                                                                                                                                                                                                                           
    start)                                                                                                                                                                                                                                            
        ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP   #lo:0绑定vip
        /sbin/route add -host $VIP dev lo:0                                            #添加网关地址
        echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore         #下面4句就是抑止arp响应的语句
        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
        sysctl -p >/dev/null 2>&1                                            #使上述配置生效
        echo "RealServer Start OK"
        exit 0
    ;;                                                                                                                                                                                                                                         
    stop)
        ifconfig lo:0 down      
        route del $VIP >/dev/null 2>&1                                   #删除路由信息
        echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore          #恢复arp响应
        echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
        echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
        echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
        echo "RealServer Stoped OK"
        exit 1
    ;;
    *)
        echo "Usage: $0 {start|stop}"
    ;;
    esac
    #授予执行权限并启动脚本
    [root@localhost ~]#  chmod 0+x auto_realserver.sh
    [root@localhost ~]#  sh  auto_realserver.sh  start
    RealServer Start OK
    
    LVS服务器故障排查思路
    • 1、ping网站的域名www.jfedu.net,能解析到IP,证明域名服务器没问题,nslookup、ping、dig
    • 2、登录LVS服务器,查看ipvsadm -Ln信息以及日志信息tail -fn 100 /var/log/messages,看客户端realserver的80端口是否启动
    • 3、看zabbix监控服务器,有无异常报警
    • 4、看keepalived.conf配置文件是否错误,进程
    • 5、看客户端的auto_realserver.sh脚本VIP是否启动
    • 6、使用tcpdump -nn port80 and host XXXXip抓包
    LVS和keepalived综合运用

    所有操作都直接定义在keepalived的配置文件中即可

    [root@localhost ~]# vim /etc/keepalived/keepalived.conf    
    #######global conf####  全局配置定义发送接受的邮箱及路由信息等保持不变
    ! Configuration File for keepalived
    global_defs {
       notification_email {
          wgkgood@139.com
       }
       notification_email_from wgkgood@139.com
       smtp_server 127.0.0.1
       smtp_connect_timeout 30
       router_id LVS_DEVEL
    }
    ######## VIP1  VRRP CONF  第一个VRRP实例作为LVS的MASTER该部分也不变化
    vrrp_instance VI_1 {
        state MASTER
        interface eth0                                #通信端口
        lvs_sync_daemon_inteface eth0  #lvs通信端口类似心跳线功能
        virtual_router_id 151                     #路由ID
        priority 100                                    #优先级   
        advert_int 5                                   #发送广播时间间隔
        nopreempt                                     #设置为不抢占
        authentication {
            auth_type PASS
            auth_pass 2222
        }
        virtual_ipaddress {
            192.168.15.201                         #定义LVS的虚拟VIP
        }
    }
    ############虚拟服务器配置部分增加LVS配置代码
    virtual_server 192.168.15.201 80{
        delay_loop 6                    #健康检查时间间隔
        lb_algo wrr                       #LVS算法权重轮询模式
        lb_kind DR                       #LVS转发方式为直接路由DR还可以是NAT/TUN
        persistence_timeout 60   #60秒内会话保持在后端同一台服务器
        protocol TCP                    #v转发协议tcp
        real_server 192.168.15.172 80 {    #这里的realserver是后端的服务器1
            weight 100
            notify_down /data/sh/mysql.sh
            TCP_CHECK {
            connect_timeout 10
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
            }
        }
     real_server 192.168.15.173 80 {      #这里的realserver是后端的服务器2
            weight 100
            notify_down /data/sh/mysql.sh
            TCP_CHECK {
            connect_timeout 10
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
            }
        }
    }
    
    • LVS及后端的realserver上都配置VIP,而realserver上配置脚本抑止arp响应是为了当路由器广播时只有LVS主机响应,而LVS接到数据包后修改完目的MAC地址后能把数据包直接转发到后端服务器
    • 虚拟VIP绑定到本地回环地址lo上是为了防止虚拟的VIP在交换机端口上产生MAC地址表,而且lo上可绑定多个虚拟VIP
    [root@localhost ~]# VIP=XXXX.XXXX.XXXX.XXXX
     [root@localhost ~]# ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
    

    相关文章

      网友评论

          本文标题:第四十二节、LVS负载均衡服务

          本文链接:https://www.haomeiwen.com/subject/cruyoxtx.html