网络通信 频道

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

  一 环境介绍

  试验2台机器上的apache负载平衡,总计使用3台机器。

  调度机: 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

  如果看到上面的说明已经加载成功

  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中,可以使用server ipvsadm来启动

  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=http://download.opensuse.org/repositories/server:/ha-clustering/CentOS_5/

  gpgcheck=1

  gpgkey=http://download.opensuse.org/repositories/server:/ha-clustering/CentOS_5/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=www.x.y.z

  4 启动ldirectord

  service ldirectord start

  3 配置后面2台realserver 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

  三 测试验证

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

  2 使用浏览器输入http://192.168.1.230, 按 F5是否页面也来回变化,上面我们选择的轮询方式是rr

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

  4 先开启ldirectord,后面一台机器模拟当机,这时候应该不会被分配到当机的机器上

0