Chinaunix首页 | 论坛 | 博客
  • 博客访问: 315954
  • 博文数量: 50
  • 博客积分: 3052
  • 博客等级: 中校
  • 技术积分: 710
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-03 12:13
文章分类
文章存档

2009年(10)

2008年(40)

我的朋友

分类: LINUX

2008-05-10 15:53:23

上次总结了我使用ldirectord实现对后端服务器进行健康检查及lvs的功能,今天有时间,看了一下ha的实现,通过使用heartbeat软件解决LB单点的问题,由于家里电脑配置的关系,我只使用了两个虚拟机linux01,linux02,这两台既做RS又做LB
结构如下


linux01(vip:153.128)-------------------linux02(vip:153.128)
(192.168.153.129)                      (192.168.153.130)
     (master)                                (slave)


两台机器均是独立网卡
操作系统我使用的是centos4.4

yum -y install ipvsadm
heartbeat的安装参考我上篇文章,这里不在写出

安装完heartbeat后
cp heartbeatsrc/doc/authkeys heartbeatsrc/doc/ha.cf heartbeatsrc/doc/haresources /etc/ha.d/

vi /etc/ha.d/ha.cf,将如下参数前的注释去掉,并根据自己的实际要求进行调整

debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility local0
keepalive 2
deadtime 30
warntime 10
initdead 120
udpport 694
bcast eth0 # Linux
auto_failback on
node linux01   #通过uanme -n得到
node linux02
 
ping_group group1 192.168.153.129 192.168.153.130
respawn hacluster /usr/lib/heartbeat/ipfail

vi /etc/ha.d/haresources文件,加入

linux01 closetunl 192.168.153.128 ldirectord::ldirectord.cf starttunl

vi /etc/ha.d/authkeys,将如下两行的注释去掉

# crc adds no security, except from packet corruption.
# Use only on physically secure networks.
#
auth 1
1 crc
#2 sha1
#3 md5

chomd 600 /etc/ha.d/authkeys

mkdir -p /etc/ha.d/conf
vi /etc/ha.d/conf/ldirectord.cf

# Global Directives
checktimeout=30
checkinterval=10
#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=yes
 
# Sample for an http virtual service
virtual=192.168.153.128:80
        real=192.168.153.129:80 ipip
        real=192.168.153.130:80 ipip
        service=http
        request="index.html"
        scheduler=rr
        #persistent=600
        #netmask=255.255.255.255
        protocol=tcp
        checktype=negotiate
        checkport=80
        request="index.html"

到此,一台机器就配置完毕,在另外一台上使用相同的配置
并在/etc/ha.d/resource.d下建立closetunl脚本,内容如下

#!/bin/sh


VIP=192.168.153.128

case "$1" in
  start)
        # close tunl0 interface

        echo $"Close tunl0 interface"
        /sbin/route del -host $VIP dev tunl0
        /sbin/ifconfig tunl0 down
        echo "0">/proc/sys/net/ipv4/conf/all/arp_announce
        echo "0">/proc/sys/net/ipv4/conf/all/arp_ignore
        echo "0">/proc/sys/net/ipv4/conf/tunl0/arp_announce
        echo "0">/proc/sys/net/ipv4/conf/tunl0/arp_ignore
        ;;
  stop)
        # start tunl0 interface

        echo $"Start tunl0 interface"
        /sbin/ifconfig tunl0 $VIP/32 broadcast $VIP up
        /sbin/route add -host $VIP dev tunl0
        echo "2">/proc/sys/net/ipv4/conf/all/arp_announce
        echo "1">/proc/sys/net/ipv4/conf/all/arp_ignore
        echo "2">/proc/sys/net/ipv4/conf/tunl0/arp_announce
        echo "1">/proc/sys/net/ipv4/conf/tunl0/arp_ignore
        ;;
  *)
        echo $"Usage: $0 (start|stop)"
        exit 1
        ;;
esac

/etc/ha.d/resource.d下建立starttunl脚本,

#!/bin/sh

VIP=192.168.153.128

case "$1" in
  stop)
        # close tunl0 interface

        echo $"Close tunl0 interface"
        /sbin/route del -host $VIP dev tunl0
        /sbin/ifconfig tunl0 down
        echo "0">/proc/sys/net/ipv4/conf/all/arp_announce
        echo "0">/proc/sys/net/ipv4/conf/all/arp_ignore
        echo "0">/proc/sys/net/ipv4/conf/tunl0/arp_announce
        echo "0">/proc/sys/net/ipv4/conf/tunl0/arp_ignore
        ;;
  start)
        # start tunl0 interface

        echo $"Start tunl0 interface"
        /sbin/ifconfig tunl0 $VIP/32 broadcast $VIP up
        /sbin/route add -host $VIP dev tunl0
        echo "2">/proc/sys/net/ipv4/conf/all/arp_announce
        echo "1">/proc/sys/net/ipv4/conf/all/arp_ignore
        echo "2">/proc/sys/net/ipv4/conf/tunl0/arp_announce
        echo "1">/proc/sys/net/ipv4/conf/tunl0/arp_ignore
        ;;
  *)
        echo $"Usage: $0 (start|stop)"
        exit 1
        ;;
esac

以上两个文件在另外一台机器的相同文件夹下copy一份
至此,两台机器的配置工作就完成了,下面进行测试
首先在两台机器上执行/etc/ha.d/resource.d/starttunl start命令
然后使用/etc/init.d/heartbeat start来启动ha
使用ifconfig查看一下执行结果
linux01的

eth0 Link encap:Ethernet HWaddr 00:0C:29:D8:12:CA
          inet addr:192.168.153.129 Bcast:192.168.153.255 Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fed8:12ca/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
          RX packets:2894 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3394 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:333960 (326.1 KiB) TX bytes:488387 (476.9 KiB)
          Interrupt:185 Base address:0x1400
 
eth0:0 Link encap:Ethernet HWaddr 00:0C:29:D8:12:CA
          inet addr:192.168.153.128 Bcast:192.168.153.255          Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
          Interrupt:185 Base address:0x1400
 
lo Link encap:Local Loopback
          inet addr:127.0.0.1 Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING MTU:16436 Metric:1
          RX packets:1031 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1031 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:105022 (102.5 KiB) TX bytes:105022 (102.5 KiB)
 
tunl0 Link encap:IPIP Tunnel HWaddr
          inet addr:192.168.153.128 Mask:0.0.0.0
          UP RUNNING NOARP MTU:1480 Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)

linux02的

eth0 Link encap:Ethernet HWaddr 00:0C:29:D7:3C:D2
          inet addr:192.168.153.130 Bcast:192.168.153.255 Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fed7:3cd2/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
          RX packets:1614 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1563 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:190618 (186.1 KiB) TX bytes:232555 (227.1 KiB)
          Interrupt:185 Base address:0x1400
 
lo Link encap:Local Loopback
          inet addr:127.0.0.1 Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING MTU:16436 Metric:1
          RX packets:288 errors:0 dropped:0 overruns:0 frame:0
          TX packets:288 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:30359 (29.6 KiB) TX bytes:30359 (29.6 KiB)
 
tunl0 Link encap:IPIP Tunnel HWaddr
          inet addr:192.168.153.128 Mask:0.0.0.0
          UP RUNNING NOARP MTU:1480 Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)

由此可以发现在linux02中并没有eth0:0的接口
测试方法:
在linux01上执行/etc/init.d/heartbeat stop命令
在使用ifconfig命令查看接口
linux01

eth0 Link encap:Ethernet HWaddr 00:0C:29:D8:12:CA
          inet addr:192.168.153.129 Bcast:192.168.153.255 Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fed8:12ca/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
          RX packets:3329 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3836 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:394140 (384.9 KiB) TX bytes:552075 (539.1 KiB)
          Interrupt:185 Base address:0x1400
 
lo Link encap:Local Loopback
          inet addr:127.0.0.1 Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING MTU:16436 Metric:1
          RX packets:1359 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1359 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:138060 (134.8 KiB) TX bytes:138060 (134.8 KiB)
 
tunl0 Link encap:IPIP Tunnel HWaddr
          inet addr:192.168.153.128 Mask:0.0.0.0
          UP RUNNING NOARP MTU:1480 Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)

发现linux01上没有了eth0:0的接口了,在用ipvsadm看下

IP Virtual Server version 1.2.0 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port Forward Weight ActiveConn InActConn

没有了table
现在用ifconfig看下linux02上的接口

eth0 Link encap:Ethernet HWaddr 00:0C:29:D7:3C:D2
          inet addr:192.168.153.130 Bcast:192.168.153.255 Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fed7:3cd2/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
          RX packets:2760 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2697 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:346756 (338.6 KiB) TX bytes:406694 (397.1 KiB)
          Interrupt:185 Base address:0x1400
 
eth0:0 Link encap:Ethernet HWaddr 00:0C:29:D7:3C:D2
          inet addr:192.168.153.128 Bcast:192.168.153.255 Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
          Interrupt:185 Base address:0x1400
 
lo Link encap:Local Loopback
          inet addr:127.0.0.1 Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING MTU:16436 Metric:1
          RX packets:876 errors:0 dropped:0 overruns:0 frame:0
          TX packets:876 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:92925 (90.7 KiB) TX bytes:92925 (90.7 KiB)
 
tunl0 Link encap:IPIP Tunnel HWaddr
          inet addr:192.168.153.128 Mask:0.0.0.0
          UP RUNNING NOARP MTU:1480 Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)

eth0:0的接口出现了,说明linux02接管了linux01的服务,在看下ipvsadm的情况

[root@linux02 resource.d]# ipvsadm
IP Virtual Server version 1.2.0 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.153.128:http rr
  -> 192.168.153.129:http Tunnel 1 0 0
  -> 192.168.153.130:http Local 1 0 0

linux02同样接管了lvs的服务

具体ldirectord的测试我就不做了,结论应该和我上篇文章是相同的

参考文章:



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