Chinaunix首页 | 论坛 | 博客
  • 博客访问: 119677
  • 博文数量: 34
  • 博客积分: 1485
  • 博客等级: 上尉
  • 技术积分: 351
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-10 11:06
文章分类

全部博文(34)

文章存档

2011年(2)

2010年(17)

2009年(4)

2008年(7)

2007年(4)

我的朋友

分类: 虚拟化

2011-04-15 18:09:10

在网上找好好多想关的文章,好多都不够详细(我水平也有限),结合网上别的人的文章写了这么个,以后备查。

 

一系统环境

1系统

Red Hat Enterprise Linux Server release 5.4 xen 虚拟机

相关资源:

 

 

.lvs环境

1.说明

    realserver:192.168.110.1

     realserver:192.168.110.2

    lvs控制机 MASTER:192.168.110.5

              BACKUP:192.168.110.6

    虚拟VIP192.168.110.11

      lvs控制机需要安装:ipvsadmkeepalived

2.lvs控制机安装,主备机分别安装ipvsadm

    实现LVS/DR最重要的两个东西是ipvs内核模块和ipvsadm工具包,现在的系统已经包含ip_vs模块

    1)检查内核模块,看一下ip_vs是否被加载

       # lsmod |grep ip_vs

       如果没有显示,则说明没有加载,执行命令 modprobe ip_vs 就可以把ip_vs模块加载到内核

       # lsmod |grep ip_vs

         ip_vs                 121473  0

    2)安装ipvsadm

      ln -s /usr/src/kernels/2.6.18-164.el5xen-x86_64/ /usr/src/linux

   tar –zxvf ipvsadm-1.24.tar.gz     

make && make install

3.测试lvs/dr功能

lvs/dr脚本lvsdr.sh测试lvs/dr功能,正式使用时用keepalived来实现

#!/bin/bash

       RIP1=192.168.110.1

       RIP2=192.168.110.2

        VIP1=192.168.110.11

       /etc/rc.d/init.d/functions

       case "$1" in

        start)

           echo " start LVS of DirectorServer"

          /sbin/ifconfig eth0:0 $VIP1 broadcast $VIP1 netmask 255.255.255.255 up

          /sbin/route add -host $VIP1 dev eth0:0

          #/sbin/route add -host $VIP2 dev eth0:1

          echo "1" >/proc/sys/net/ipv4/ip_forward

          #Clear IPVS table

          /sbin/ipvsadm -C

          #set LVS

          #Web Apache

          /sbin/ipvsadm -A -t $VIP1:80 -s wlc -p 120

          /sbin/ipvsadm -a -t $VIP1:80-r $RIP1:9050 -g

          /sbin/ipvsadm -a -t $VIP1:80 -r $RIP2:9050 -g

          #Run LVS

          /sbin/ipvsadm

      ;;

      stop)

          echo "close LVS Directorserver"

          echo "0" >/proc/sys/net/ipv4/ip_forward

          /sbin/ipvsadm -C

          /sbin/ifconfig eth0:0 down

      ;;

      *)

          echo "Usage: $0 {start|stop}"

          exit 1

       esac

 

realserver 运行脚本:realserver.sh

#!/bin/bash

        # description: Config realserver lo and apply noarp

        #Written by :NetSeek

       

        SNS_VIP=192.168.110.11

        

        . /etc/rc.d/init.d/functions

        

        case "$1" in

        start)

               ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP

               /sbin/route add -host $SNS_VIP dev lo:0

               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

               sysctl -p >/dev/null 2>&1

               echo "RealServer Start OK"

        

               ;;

        stop)

               ifconfig lo:0 down

               route del $SNS_VIP >/dev/null 2>&1

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

               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"

               ;;

        *)

               echo "Usage: $0 {start|stop}"

               exit 1

        esac

        

        exit 0

启动服务

Vipserver lvsdr.sh start

两台Realserver 上运行 realserver.sh start

测试 ipvs以经工作。

 

 

4.安装keepalived

tar –zxvf keepalived-1.1.19.tar.gz

cd keepalived-1.1.19

./configure --prefix=/usr/local/keepalived/ --sysconf=/etc/

cp /usr/local/keepalived/sbin/keepalived /usr/sbin/

mv /etc/keepalived/keepalived.conf  /etc/keepalived/keepalived.conf.old

vi /etc/keepalived/keepalived.conf

写入以下内容

 

#!/bin/bash

    ! Configuration File for keepalived

global_defs {

   notification_email {

     test@test.com

   }

   notification_email_from root@localhost

   smtp_server 127.0.0.1

   smtp_connect_timeout 30

   router_id LVS_DEVEL

}

 

vrrp_instance VI_1 {

    state MASTER

    interface eth0

    virtual_router_id 51

    priority 100

    advert_int 1

    authentication { 

        auth_type PASS

        auth_pass 111

    }

    virtual_ipaddress {

        192.168.110.11

    }

}

 

virtual_server 192.168.110.11 9050 {

    delay_loop 2          

    lb_algo wrr

    lb_kind DR

    persistence_timeout 600

    protocol TCP

 

  real_server 192.168.110.1 80 {

        weight 1

        TCP_CHECK {

            connect_timeout 3   

            nb_get_retry 3           

            delay_before_retry 3

        }

    }

  real_server 192.168.110.2 80 {

        weight 1

        TCP_CHECK {

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

        }

    }

}

 

Keepalived备份服务器,

然后更改以下两项,其他安装和配置和主LVS一样。
1.state MASTER-----
àstate BACKUP
2.priority 100-----
àpriority 99(这个数学比100小就行)

关闭测试用ipvs服务realserver服务保留

Lvsdr.sh stop

启动主从keepalived

/etc/init.d/keepalived start

关闭主keepalived 还能正常访问

 

三、调度算法 (http://linuxbpm.blog.51cto.com/1823930/388243)
Director在接收到来自于Client的请求时,会基于"schedule"RealServer中选择一个响应给Clientipvs支持以下调度算法:(12为静态调度算法,345678为动态调度算法)
1
、轮询(round robin, rr),加权轮询(Weighted round robin, wrr)——
新的连接请求被轮流分配至各RealServer;算法的优点是其简洁性,它无需记录当前所有连接的状态,所以它是一种无状态调度。轮叫调度算法假设所有服务器处理性能均相同,不管服务器的当前连接数和响应速度。该算法相对简单,不适用于服务器组中处理性能不一的情况,而且当请求服务时间变化比较大时,轮叫调度算法容易导致服务器间的负载不平衡。

2、目标地址散列调度(Destination Hashingdh

算 法也是针对目标IP地址的负载均衡,但它是一种静态映射算法,通过一个散列(Hash)函数将一个目标IP地址映射到一台服务器。目标地址散列调度算法先 根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。


3
、源地址散列调度(Source Hashingsh

算 法正好与目标地址散列调度算法相反,它根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。它采用的散列函数与目标地址散列调度算法 的相同。除了将请求的目标IP地址换成请求的源IP地址外,它的算法流程与目标地址散列调度算法的基本相似。在实际应用中,源地址散列调度和目标地址散列 调度可以结合使用在防火墙集群中,它们可以保证整个系统的唯一出入口。

 

4、最少连接(least connected, lc), 加权最少连接(weighted least connection, wlc)——
新的连接请求将被分配至当前连接数最少的RealServer;最小连接调度是一种动态调度算法,它通过服务器当前所活跃的连接数来估计服务器的负载情况。调度器需要记录各个服务器已建立连接的数目,当一个请求被调度到某台服务器,其连接数加1;当连接中止或超时,其连接数减一。
lc256*A+I=当前连接数  wlc:(256*A+I/W=当前连接数   A:活动连接数  I:非活动连接数 W:权重值】
5
、基于局部性的最少链接调度(Locality-Based Least Connections Schedulinglblc)——
针对请求报文的目标IP地址的负载均衡调度,目前主要用于Cache集群系统,因为在Cache集群中客户请求报文的目标IP地址是变化的。这里假设任何后端服务器都可以处理任一请求,算法的设计目标是在服务器的负载基本平衡情况下,将相同目标IP地址的请求调度到同一台服务器,来提高各台服务器的访问局部性和主存Cache命中率,从而整个集群系统的处理能力。LBLC调度算法先根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于其一半的工作负载,则用“最少链接”的原则选出一个可用的服务器,将请求发送到该服务器。
6
、带复制的基于局部性最少链接调度(Locality-Based Least Connections with Replication Schedulinglblcr

——也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。它与LBLC算法的不同之处是它要维护从一个目标IP地址到一组服务器的映射,而 LBLC算法维护从一个目标IP地址到一台服务器的映射。对于一个“热门”站点的服务请求,一台Cache 服务器可能会忙不过来处理这些请求。这时,LBLC调度算法会从所有的Cache服务器中按“最小连接”原则选出一台Cache服务器,映射该“热门”站点到这台Cache服务器,很快这台Cache服务器也会超载,就会重复上述过程选出新的Cache服务器。这样,可能会导致该“热门”站点的映像会出现在所有的Cache服务器上,降低了Cache服务器的使用效率。LBLCR调度算法将“热门”站点映射到一组Cache服务器(服务器集合),当该“热门”站点的请求负载增加时,会增加集合里的Cache服务器,来处理不断增长的负载;当该“热门”站点的请求负载降低时,会减少集合里的Cache服务器数目。这样,该“热门”站点的映像不太可能出现在所有的Cache服务器上,从而提供Cache集群系统的使用效率。LBLCR算法先根据请求的目标IP地址找出该目标IP地址对应的服务器组;按“最小连接”原则从该服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载;则按“最小连接”原则从整个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。
7
、 最短的期望的延迟(Shortest Expected Delay Scheduling ,sed
sed: (A+1)/w=当前连接数
8
、最少队列调度(Never Queue Scheduling ,nq
无需队列。如果有台realserver的连接数=0就直接分配过去,不需要在进行sed运算

四、关于LVS追踪标记fwmark
如果LVS放置于多防火墙的网络中,并且每个防火墙都用到了状态追踪的机制,那么在回应一个针对于LVS的连接请求时必须经过此请求连接进来时的防火墙,否则,这个响应的数据包将会被丢弃。

 

 

五、命令选项解释
有两种命令选项格式,长的和短的,具有相同的意思。在实际使用时,两种都可
以。
-A add-service 在内核的虚拟服务器表中添加一条新的虚拟服务器记录。也
就是增加一台新的虚拟服务器。
-E edit-service 编辑内核虚拟服务器表中的一条虚拟服务器记录。
-D delete-service 删除内核虚拟服务器表中的一条虚拟服务器记录。
-C clear 清除内核虚拟服务器表中的所有记录。
-R restore 恢复虚拟服务器规则
-S save 保存虚拟服务器规则,输出为-R 选项可读的格式
-a add-server 在内核虚拟服务器表的一条记录里添加一条新的真实服务器
记录。也就是在一个虚拟服务器中增加一台新的真实服务器
-e edit-server 编辑一条虚拟服务器记录中的某条真实服务器记录
-d delete-server 删除一条虚拟服务器记录中的某条真实服务器记录
-L|-l list 显示内核虚拟服务器表
-Z zero 虚拟服务表计数器清零(清空当前的连接数量等)
set tcp tcpfin udp 设置连接超时值
start-daemon 启动同步守护进程。他后面可以是master backup,用来说
LVS Router master 或是backup。在这个功能上也可以采用keepalived
VRRP 功能。
stop-daemon 停止同步守护进程
-h help 显示帮助信息
其他的选项:
-t tcp-service service-address 说明虚拟服务器提供的是tcp 的服务
[vip:port] or [real-server-ip:port]
-u udp-service service-address 说明虚拟服务器提供的是udp 的服务
[vip:port] or [real-server-ip:port]
-f fwmark-service fwmark 说明是经过iptables 标记过的服务类型。
-s scheduler scheduler 使用的调度算法,有这样几个选项
rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,
默认的调度算法是: wlc.
-p persistent [timeout] 持久稳固的服务。这个选项的意思是来自同一个客
户的多次请求,将被同一台真实的服务器处理。timeout 的默认值为300 秒。
-M netmask netmask persistent granularity mask
-r real-server server-address 真实的服务器[Real-Server:port]
-g gatewaying 指定LVS 的工作模式为直接路由模式(也是LVS 默认的模式)
-i ipip 指定LVS 的工作模式为隧道模式
-m masquerading 指定LVS 的工作模式为NAT 模式
-w weight weight 真实服务器的权值
mcast-interface interface 指定组播的同步接口
-c connection 显示LVS 目前的连接 如:ipvsadm -L -c
timeout 显示tcp tcpfin udp timeout 值 如:ipvsadm -L timeout
daemon 显示同步守护进程状态
stats 显示统计信息
rate 显示速率信息
sort 对虚拟服务器和真实服务器排序输出
numeric -n 输出IP 地址和端口的数字形式

查看lvs

1查看LVS上当前的所有连接
# ipvsadm -Lcn   
或者
#cat /proc/net/ip_vs_conn
2查看虚拟服务和RealServer上当前的连接数、数据包数和字节数的统计值,则可以使用下面的命令实现:
# ipvsadm -l --stats
3查看包传递速率的近似精确值,可以使用下面的命令:
# ipvsadm -l –rate

六、ipvsadm使用中应注意的问题
默认情况下,ipvsadm在输出主机信息时使用其主机名而非IP地址,因此,Director需要使用名称解析服务。如果没有设置名称解析服务、服务不可用或设置错误,ipvsadm将会一直等到名称解析超时后才返回。当然,ipvsadm需要解析的名称仅限于RealServer,考虑到DNS提供名称解析服务效率不高的情况,建议将所有RealServer的名称解析通过/etc/hosts文件来实现;

阅读(2269) | 评论(0) | 转发(0) |
0

上一篇:linux shell使用if时判断参数介绍

下一篇:没有了

给主人留下些什么吧!~~