Chinaunix首页 | 论坛 | 博客
  • 博客访问: 111673
  • 博文数量: 27
  • 博客积分: 1163
  • 博客等级: 少尉
  • 技术积分: 240
  • 用 户 组: 普通用户
  • 注册时间: 2005-10-18 15:35
文章分类

全部博文(27)

文章存档

2010年(5)

2009年(5)

2008年(1)

2007年(5)

2006年(4)

2005年(7)

分类: LINUX

2010-09-08 16:20:29

一.使用系统Red Hat Enterprise Linux Server release 5.4

二.安装环境

  1.说明

    realserver:192.168.1.11

    realserver:192.168.1.12

    lvs控制机:192.168.1.100

    虚拟VIP:192.168.1.200

    其中:realserver上只需要简单的安装apache即可

         lvs控制机需要安装:ipvsadm,heartbeat,libnet,perl-MailTools

  2.lvs控制机安装

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

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

       # lsmod |grep ip_vs

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

       # lsmod |grep ip_vs

         ip_vs    35009    0

    2)安装ipvsadm

      先把目录/usr/src/kernels/2.6.18-164.el5-x86_64链接为/usr/src/linux,命令如下

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

      解压ipvsadm-1.24.tar.gz,执行"make;make install完成安装。

    3)libnet安装

       #./configure

       # make

       # make install

    4)heartbeat 安装(里边包含了ldirectord)这里测试只用ldirectord
       # ./ConfigureMe configure
       # make
       # make install
       配置:拷备ldirectord.cf配置文件到/usr/local/etc/ha.d/目录下
       # cp /home/software/heartbeat-2.1.3/ldirectord/ldirectord.cf  /etc/ha.d

       ldirectord.cf配置如下

             checktimeout=20

             #ldirectord 守护进程检查真实服务器健康状况的时间,若没有在checktimeout周期内完成,ldirectord将从IPVS表中删除真实服务器.
             checkinterval=5

             #周期检查时间间隔为5
             #fallback=127.0.0.1:80

             autoreload=yes

             #起用该选项将导致ldirectord 程序周期性计算md5sum来检查此配置文件的变化,并且在更改文件时自动应用它们。这种便利的特性允许您容易地更改集群配置。在保存更改到配置文件后的几秒,运行中的ldirectord 守护线程将看到更改,并应用适当的ipvsadm命令来实现更改.从可用服务器池中删除真实服务器或根据需要添加它们。
             logfile="/data/lvs/ldirectord.log"

             #日志文件
             quiescent=no

             #当节点在节点的checktimeout周期内响应失败时,节点是静态的”(它的权重被设置到0)。当设置此选项时,ldirectord将从IPVS表中删除真实服务器而不是止息它。从IPVS表中删除节点将会导致断开所有现有的客户端连接,并导致LVS丢弃所有的连接跟踪记录和节点的持久性连接模块。如果没有将此项设置到no,当节点崩溃时,对于一些客户端的计算机,集群似乎是出故障了,因为它们在节点崩溃之前分配给了节点,并且连接跟踪记录或持久性连接模块仍将保存在director上。
             # A sample virual with a fallback that will override the gobal setting
             virtual=192.168.1.200:80
                     real=192.168.1.11:80 gate
                     real=192.168.1.12:80 gate
                     fallback=127.0.0.1:80 gate
                     service=http
                     #virtualhost=some.domain.com.au
                     scheduler=rr
                     #persistent=600
                     #netmask=255.255.255.255

                     checktype=negotiate

                     #negotiate 此方法连接到真实服务器,并发送指定的request字符串。如果指定的reply字符串没有在checktimeout周期中从真实服务器接收回来,那么节点就被认为是死亡的。如果本例中所做的一样,可以基于每个节点指定requestreply字符串,或者可以指定应该用于所有有真实服务器的一个request和一个reply字符串,方法是如下所示将添加两个新行到ldirectord配置文件

                     request="index.html"
                     receive="Test Page"
                     protocol=tcp

          

     启动ldirectord

     service ldirectord start

     注:如果报如下错误,安装perl-MailTools即可

     Starting ldirectord... Can't locate Mail/Send.pm in @INC (@INC contains:。。。。。。。。。。。。。。。。。。。

     BEGIN failed--compilation aborted at /usr/local/sbin/ldirectord line 3096.

     5)lvs/dr脚本

       #!/bin/bash
       RIP1=192.168.1.11
       RIP2=192.168.1.12
 
       VIP1=192.168.1.200

 
       . /etc/rc.d/init.d/functions
 
       case "$1" in
 
       start)
           echo " start LVS of DirectorServer"
 
          # set the Virtual IP Address and sysctl parameter
          /sbin/ifconfig eth0:0 $VIP1 broadcast $VIP1 netmask 255.255.255.255 up
          #/sbin/ifconfig eth0:1 $VIP2 broadcast $VIP2 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 rr -p 120
          /sbin/ipvsadm -a -t $VIP1:80 -r $RIP1:80 -g
          /sbin/ipvsadm -a -t $VIP1:80 -r $RIP2:80 -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

 

           说明:

               RIP1和RIP2定义了两个真实服务器IP地址

               VIP1定义了一个虚拟IP地址

               /etc/rc.d/init.d/functions,执行这个系统脚本,以取得运行其他脚本所需的环境和参数

              case语句是一个多路选择,本脚本给出3个:start,stop*,31$1表示脚本带一个参数。

/sbin/ifconfig eth0:0 $VIP1 broadcast $VIP1 netmask 255.255.255.255 up把web服务所需的ip地址(虚拟地址)绑定在辅助接口eth0:0。在LVS方案中,虚拟ip地址与普通网络接口大大不同,这点需要特别注意。虚拟ip地址的广播地址是它本身,子网掩码是255.255.255.255。为什么要这样呢?因为有若干机器要使用同一个ip地址,用本身做广播地址和把子网掩码设成4255就不会造成ip地址冲突了,否则lvs将不能正常转发访问请求。

/sbin/route add -host $VIP1 dev eth0:0添加主机路由,这2条可有可无,较新的linux发行版能正确路由这个主机地址。

echo "1" >/proc/sys/net/ipv4/ip_forward启用ip转发功能

/sbin/ipvsadm –C清空ipvs转发表

/sbin/ipvsadm -A -t $VIP1:80 -s wlc -p 120 添加一个虚拟服务,服务协议是tcp(-t);服务类型是web$VIP1:80);-s 表示采用wlc这种调度算法转发数据包(调度算法包括:rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq);-p表示连接的持续时间为120秒,这个会话时间是根据实际情况调整的,如果这个值设置得不合理,用户将得到非常糟糕的访问效果。下面举例简单说明一下:

从上图我们可以看出,随着时间的变化,用户的请求将可能被lvs转发到不同的服务器,而那些需要保持会话的请求将被丢失,导致访问不能进行。

/sbin/ipvsadm -a -t $VIP1:80 -r $RIP1:80 –g 以直接路由的方式把请求转发到LVS后面的真实服务器RIP1

/sbin/ipvsadm -a -t $VIP1:80 -r $RIP2:80 –g 以直接路由的方式把请求转发到LVS后面的真实服务器RIP2

运行这个脚本,LVS/DR控制器部分就算配置好了。

# sh lvsdr start

显示如下

# ipvsadm -l
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  TJSJHL258-251.opi.com:http rr
  -> TJSJHL258-242.opi.com:http   Route 1 0 0        
  -> TJSJHL258-241.opi.com:http   Route 1 0 0

6)真实服务器配置

运行脚本如下

#!/bin/bash
#description:start realserver
#chkconfig
VIP1=192.1268.1.200

. /etc/rc.d/init.d/functions
case "$1" in
start)
echo " start LVS of REALServer"
/sbin/ifconfig lo:0 $VIP1 broadcast $VIP1 netmask 255.255.255.255 up
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
;;
stop)
/sbin/ifconfig lo:0 down
echo "close LVS Directorserver"
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 "Usage: $0 {start|stop}"
exit 1
esac

说明:

两台真是服务器配置相同

/sbin/ifconfig lo:0 $VIP1 broadcast $VIP1 netmask 255.255.255.255 up LVS/DR控制器一样,广播地址设置为虚拟地址本身,子网掩码4255,不同的是,虚拟ip地址被绑定在环回(loopback)子接口,而不是物理接口的子接口。

echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore 一共四行,其目的是关闭arp响应。

三.启动服务并测试

1.在真实服务器上启动realsvr脚本和apache服务

# sh realsvr start

2.启动LVS-DR控制机lvsdr脚本

# sh lvsdr start

3.使用IE访问虚拟IP,查看结果

# ipvsadm -l
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  TJSJHL258-251.opi.com:http rr persistent 120
  -> TJSJHL258-242.opi.com:http   Route   1 0 0        
  -> TJSJHL258-241.opi.com:http   Route   1 1 0 

参考:http://hi.baidu.com/chesterphp/blog/item/38e3bb9668313b6054fb96a8.html
阅读(2152) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~