Chinaunix首页 | 论坛 | 博客
  • 博客访问: 642177
  • 博文数量: 95
  • 博客积分: 2091
  • 博客等级: 大尉
  • 技术积分: 982
  • 用 户 组: 普通用户
  • 注册时间: 2007-09-05 19:34
文章分类

全部博文(95)

文章存档

2017年(1)

2016年(20)

2015年(10)

2014年(6)

2013年(4)

2012年(1)

2011年(9)

2010年(6)

2009年(20)

2008年(17)

2007年(1)

我的朋友

分类: LINUX

2009-10-28 11:24:07

LVS(DR)+ldirectord 实现负载平衡

waynewu 2009-10-28
MSN:waynewush@yahoo.com.cn Email: waynewush@gmail.com

一  环境介绍
   试验apache负载平衡,总计使用3台机器,使用LVS DR(直接路由)方式.

调度机: 192.168.1.238
vip1:   192.168.1.230
realip: 192.168.1.235
readip: 192.168.1.236

系统: RHEL 5.3

二 安装配置过程

 1 安装和配置调度机lvs

1  RHEL5 光盘中中已经带了LVS安装软件,直接到光盘的Cluster目录中可以找到.
#  rpm -ivh rpm -ivh ipvsadm-1.24-8.1.i386.rpm

2  检查lvs模块是否已经加载
   lsmod|grep ip_vs
    ip_vs        77313  0
   如果看到上面的说明已经加载成功. 如果没有出现,请手动加载modprobe ip_vs 或直接重启机器

3 配置lvs,编辑脚本 lvsdr.sh
   [root@ddmap ~]# cat lvsdr.sh
#!/bin/bash
RIP1=192.168.1.235
RIP2=192.168.1.236
VIP1=192.168.1.230

/sbin/ifconfig eth0:0 $VIP1 broadcast $VIP1 netmask 255.255.255.255 up
/sbin/route add -host $VIP1 dev eth0:0
echo "1" >/proc/sys/net/ipv4/ip_forward
/sbin/ipvsadm -C
#set LVS apache
/sbin/ipvsadm -A -t $VIP1:80 -s rr
/sbin/ipvsadm -a -t $VIP1:80 -r $RIP1:80 -g
/sbin/ipvsadm -a -t $VIP1:80 -r $RIP2:80 -g

4  执行脚本,sh lvsdr.sh 这样调度器的规则已经启用了,可以使用ipvsadmin -l查看.
[root@ddmap ~]# ipvsadm -l
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.1.230:http rr
  -> 192.168.1.236:http           Route   1      0          0        
  -> 192.168.1.235:http           Route   1      0          0      


5  完成后将ipvs的规则保存到/etc/sysconfig/ipvsadm中,将ipvsadm加入开机启动。

# chkconfig ipvsadm on
# ipvsadm-save >/etc/sysconfig/ipvsadm



2  安装和配置ldirectord ,LVS只负责分发,不负责健康检查,所以,当后面一台机器挂掉,有可能继续将请求分配已经挂掉的机器上, 所以我们需要使用ldirectord 自动将挂掉的机器从转发队列中移除.

ldirectord是heartbeat中的一部分,当我们安装了heartbeat就带了ldirectord

1  先配置个可用的安装ldirectord和heartbeat的源
[root@ddmap ~]# cat /etc/yum.repos.d/ha-clustering.repo
[server_ha-clustering]
name=High Availability/Clustering server technologies (CentOS_5)
#type=rpm-md
baseurl=
gpgcheck=1
gpgkey=repodata/repomd.xml.key
enabled=1

2 安装ldirectord
 # yum install ldirectord

3  配置ldirectord
  # cp /usr/share/doc/ldirectord-1.0/ldirectord.cf /etc/ha.d/.
  # vim /etc/ha.d/ldirectord.cf

# Global Directives
checktimeout=3
checkinterval=1
#fallback=127.0.0.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.1.230:80
        real=192.168.1.235:80 gate
        real=192.168.1.236:80 gate
        fallback=127.0.0.1:80 gate
        service=http
        scheduler=rr
        #persistent=600
        #netmask=255.255.255.255
        protocol=tcp
        checktype=negotiate
        checkport=80
        request="index.html"
#       receive="Test Page"
#       virtualhost=

4 启动ldirectord
 
service ldirectord start
注:如果启动的时候提示“shellfuncs no found" 这时候将heartbeat安装上去就好

# yum install heartbeat

 




3  配置后面2台realserver 192.168.1.235/236
 


1  建立一个执行脚本lvsrl.sh
#!/bin/bash
VIP1=192.168.1.230

/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

2 在2台机器上分别执行lvsrl.sh

3 加入到rc.local,使下次开机自动启动

# vim /etc/rc.local

touch /var/lock/subsys/local

sh /root/lvsrl.sh




三 测试验证

1  后面2台real server分别启动apache,并在index.heml分别写入一些标记,以便识别.

2 使用浏览器输入 按 F5是否页面也来回变化,上面我们选择的轮询方式是rr,正确的结果应该是按一次会变化一次

3 先不开启ldirectord, 后面的一台机器关闭apache或者重启,模拟当机,看是否按F5的时候会被分配到挂掉的机器上

4 开启ldirectord,再模拟一部机器当机,这时候正确的结果应该不会被分配到当机的机器上.

四  网络上一些可以参考和借鉴的文章

  1. http://blog.163.com/herod_xiao/blog/static/87188399200991635444342/
  2. http://sery.blog.51cto.com/10037/54645
  3. ldirectord参数的详细描述:  http://blog.freebug.org/archives/337.html
  4. ipvsadm命令详解: 

阅读(2053) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~