LVS-ipvsadm 实现负载均衡(以keepalive为基础)

上篇记录了keepalive的安装和双机热备的实现,今天记录下lvs负载均衡的配置搭建(DR模式--Direct Routing)

1、安装ipvsadm
  下载ipvsadm,下载时需注意对应自己的内核版本。
  ipvsadm下载网址:http://www.linuxvirtualserver.org/software/
  本文使用的是FC8系统,内核版本2.6.23.1,对应ipvsadm版本1.24。
  安装时需要Linux内核源码,如果安装系统时没有安装源码,需要再下载内核源码。本文使用的内核是linux-2.6.23.1.tar.bz2。把内核解压到/usr/src/linux-2.6.23.1。下面开始

编译安装:(centos默认就已经安装)
  建立内核快捷方式:ln -s /usr/src/linux-2.6.23.1 /usr/src/linux
  解压ipvsadm:
  tar zxvf ipvsadm-1.24.tar.gz
  安装ipvsadm:
  cd ipvsadm-1.24
  make
  make install
  安装完成后,下一步我们开始配置IPVS

2、配置keepalive

主要就是修改conf,增加virtual_server模块:

virtual_server 192.168.0.200 80
<pre name="code" class="plain">virtual_server 192.168.0.200 22
virtual_server 192.168.0.200 6379
分别是HTTP、ssh、redis的端口,都是TCP 的(UDP还没实验)
 
 

! Configuration File for keepalived
global_defs {
    notification_email {
        [email protected]
    }
    notification_email_from [email protected]
    smtp_server 127.0.0.1
    smtp_connect_timeout 30
    router_id LVS_DEVEL
}

vrrp_instance lnmp {
    state MASTER          #默认master,其它director机器改为<span><span> BACKUP</span></span>
    interface eth0
    virtual_router_id 100
    priority 170
    advert_int 5
    track_interface {
        eth0
    }

    authentication {
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
        192.168.0.200 eth0
    }
    virtual_server 192.168.0.200 80 {
    delay_loop 6  //隔6秒查询
    lb_algo wrr   //lvs算法
    lb_kind DR    //(Direct Route)
    persistence_timeout 60  //同一IP的连接60秒内被分配到同一台realserver
    inhibit_on_failure  //当web挂掉的时候,前面请求的用户,可以继续打开网页,但是后面的请求不会调度到挂掉的web上面。
    protocol TCP   //用TCP协议检查realserver状态
    real_server 192.168.0.157 80 {
    weight 3    //权重
    TCP_CHECK {
    connect_timeout 10   //10秒无响应超时
    nb_get_retry 3
    delay_before_retry 3
    }
    }
    real_server 192.168.0.162 80 {
    weight 1
    TCP_CHECK {
    connect_timeout 10
    nb_get_retry 3
    delay_before_retry 3
    }
    }


    virtual_server 192.168.0.200 22 {
    delay_loop 6  //隔6秒查询
    lb_algo wrr   //lvs算法
    lb_kind DR    //(Direct Route)
    persistence_timeout 60  //同一IP的连接60秒内被分配到同一台realserver
    inhibit_on_failure  //当web挂掉的时候,前面请求的用户,可以继续打开网页,但是后面的请求不会调度到挂掉的web上面。
    protocol TCP   //用TCP协议检查realserver状态
    real_server 192.168.0.157 22 {
    weight 3    //权重
    TCP_CHECK {
    connect_timeout 10   //10秒无响应超时
    nb_get_retry 3
    delay_before_retry 3
    }
    }
    real_server 192.168.0.162 22 {
    weight 1
    TCP_CHECK {
    connect_timeout 10
    nb_get_retry 3
    delay_before_retry 3
    }
    }

    virtual_server 192.168.0.200 6379 {
    delay_loop 6  //隔6秒查询
    lb_algo wrr   //lvs算法
    lb_kind DR    //(Direct Route)
    persistence_timeout 60  //同一IP的连接60秒内被分配到同一台realserver
    inhibit_on_failure  //当web挂掉的时候,前面请求的用户,可以继续打开网页,但是后面的请求不会调度到挂掉的web上面。
    protocol TCP   //用TCP协议检查realserver状态
    real_server 192.168.0.157 6379 {
    weight 3    //权重
    TCP_CHECK {
    connect_timeout 10   //10秒无响应超时
    nb_get_retry 3
    delay_before_retry 3
    }
    }
    real_server 192.168.0.162 6379 {
    weight 1
    TCP_CHECK {
    connect_timeout 10
    nb_get_retry 3
    delay_before_retry 3
    }
    }
}

有几个地方解释一下:

 state MASTER :表示是主服务器

 priority 101    : 主的权重要高于从

 virtual_ipaddress :对外提供的虚拟IP

 lb_algo rr :    LVS有8种调度算法:

    1. 轮叫(Round Robin)
      调度器通过"轮叫"调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载。

    2. 加权轮叫(Weighted Round Robin)
      调度器通过"加权轮叫"调度算法根据真实服务器的不同处理能力来调度访问请求。这样可以保证处理能力强的服务器处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。

    3. 最少链接(Least Connections)
      调度器通过"最少连接"调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用"最小连接"调度算法可以较好地均衡负载

    4. 加权最少链接(Weighted Least Connections)
      在集群系统中的服务器性能差异较大的情况下,调度器采用"加权最少链接"调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。

    5. 基于局部性的最少链接(Locality-Based Least Connections)
      "基于局部性的最少链接" 调度算法是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器 是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用"最少链接"的原则选出一个可用的服务 器,将请求发送到该服务器。

    6. 带复制的基于局部性最少链接(Locality-Based Least Connections with Replication)
      "带复制的基于局部性最少链接"调度算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。它与LBLC算法的不同之处是它要维护从一个 目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。该算法根据请求的目标IP地址找出该目标IP地址对应的服务 器组,按"最小连接"原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器,若服务器超载;则按"最小连接"原则从这个集群中选出一 台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的 程度。

    7. 目标地址散列(Destination Hashing)
      "目标地址散列"调度算法根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。

    8. 源地址散列(Source Hashing)
      "源地址散列"调度算法根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空

lb_kind :LVS的3种包转发模式:

NAT(网络地址映射)、IP Tunneling(IP隧道)、Direct Routing(直接路由)
NAT: Net Address Translation
原理:通过网络地址转换,调度器(Load Balancer)重写请求报文的目标地址,根据预设的算法,将请求分配给后端的真是服务器;真实服务器响应给Load Balancer;在返回给客户端;(由于请求和响应都要经过LoadBalance,所以Load Balance有性能瓶颈)
IP Tunneling:
原理:Load Balance 把请求报文通过IP隧道 转发给真实服务器,真实服务器直接返回给客户端。
Direct Routing:
DR通过改写报文的MAC地址,将请求发送给真实服务器,真实服务器直接返回给客户端。要求Load Balance和真实服务器在同一个网段上。

protocol TCP: 采用TCP/UDP协议

real_server:    物理服务器


权重问题:当lvs配置文件lvs-dr.sh改变权重以及keepalived配置文件keepalived.conf修改权重后,哪个文件重新启动,哪个文件的权重生效。同时权重在master和backup上面可以设置不同。
当 算法是rr的时候,权重没有作用,但是当算法是wlc和wrr的时候,必须设置权重,可以根据服务器的性能和配置,来确定权重的大小,当权重大的时 候,lvs调度的服务也就多,同时权重高的服务器先收到链接。当小的时候,lvs调度的比较少。当权重为0的时候,表示服务器不可用


3、配置lvs

1)开启路由转发
# vi /etc/sysctl.conf
net.ipv4.ip_forward = 1
# sysctl -p

2)在Director上新增一个IP(192.168.0.200),命名为eth0:1(用lo也行),作为Virtual IP,否则会丢弃数据包。

ifconfig eth0:1 192.168.0.200 broadcast 192.168.0.200 netmask 255.255.255.255 up

或者更完善一点用脚本

VIP = 192.168.0.200   
/etc/rc.d/init.d/functions  
case $1 in  
start)
 echo "Start Realserver"
 /sbin/ifconfig eth0:1 $vip broadcast $vip netmask 255.255.255.255 up
 echo "1" > /proc/sys/net/ipv4/conf/eth0/arp_ignore
 echo "2" > /proc/sys/net/ipv4/conf/eth0/arp_announce
 echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
 echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce  
;;  
stop)
 echo "Stop Realserver"
 /sbin/ifconfig eth0:1 down
 echo "0" > /proc/sys/net/ipv4/conf/eth0/arp_ignore
 echo "0" > /proc/sys/net/ipv4/conf/eth0/arp_announce
 echo "0" > /proc/sys/net/ipv4/conf/all/arp_ignore
 echo "0" > /proc/sys/net/ipv4/conf/all/arp_announce  
;;  
*)
 echo "Usage: $0 (start | stop)"  
exit 1  
esac


ifconfig 看看是否有设备eth0:1了


3)在ipvsadm配置

创建一个配置脚本,方便在多台Director机器(安装有keepalive)上进行配置,

#vi lvsdr.sh

#!/bin/bash
VIP=192.168.0.200             #虚拟IP ,对外提供,所有director使用统一的
RIP1=192.168.0.157
RIP2=192.168.0.162            #realserver有几个,这里配几个
/sbin/rc.d/init.d/functions   #报不存在,不知道原因
case "$1" in
start)
       echo "start LVS of DirectorServer"
       #Set the Virtual IP Address
       /sbin/ifconfig eth0:1 $VIP broadcast $VIP netmask 255.255.255.0 up
       /sbin/route add -host $VIP dev eth0:1
       #Clear IPVS Table
       /sbin/ipvsadm -C
       #Set Lvs
       /sbin/ipvsadm -A -t $VIP:80 -s wrr               #增加服务 HTTP
       /sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g       #增加服务的真实服务器记录
       /sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g
        /sbin/ipvsadm -A -t $VIP:22 -s wrr              #增加服务 SSH
        /sbin/ipvsadm -a -t $VIP:22 -r $RIP1:22 -g
        /sbin/ipvsadm -a -t $VIP:22 -r $RIP2:22 -g
        /sbin/ipvsadm -A -t $VIP:6379 -s wrr            #增加服务 Redis
        /sbin/ipvsadm -a -t $VIP:6379 -r $RIP1:6379 -g
        /sbin/ipvsadm -a -t $VIP:6379 -r $RIP2:6379 -g

         #Run Lvs
       /sbin/ipvsadm
;;
stop)
echo "Close LVS Directorserver"
/sbin/ifconfig eth0:1 down
/sbin/ipvsadm -C
;;
*)
echo "Usage0{start|stop}"
exit 1
esac


查看调用情况:

ipvsadm -L --stats  或 ipvsadm -ln


几点说明一下:

  -C:清除虚拟内核服务器表中记录

  -A: 添加虚拟服务器

  -s:使用的调度算法,有这样几个选项rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,默认的调度算法是:wlc

  -a:-add-server    在内核虚拟服务器表的一条记录里添加一条新的真实服务器记录。也就是在一个虚拟服务器中增加一台新的真实服务器

  -r:   真实的服务器

  -g:--gatewaying      指定LVS 的工作模式为直接路由模式(也是LVS 默认的模式)


4、配置HTTP服务业面

#vi /var/www/html/index.html

内容:<h1>WEB1 / 192.168.0.157</h1>

备注:不同的realServer把内容中的IP对应改一下

5、启动服务

service keepalived restart
./lvsdr.sh start
因为配置里有时间设置,以及网络协商, 有时可能需要等一会才能生效

然后就测试吧!!!


如果连不通,请查看iptables、selinx




//参考:

http://jingpin.jikexueyuan.com/article/27180.html

http://www.myexception.cn/vsts/440810.html

http://blog.csdn.net/beyondlpf/article/details/17963907

http://www.it165.net/admin/html/201305/1274.html

http://www.tuicool.com/articles/jaeY7nA

http://blog.chinaunix.net/uid-26893610-id-3196774.html

http://www.cnblogs.com/mchina/archive/2012/08/27/2644391.html


 

你可能感兴趣的:(linux,LVS,负载均衡,KeepAlive,ipvsadm)