Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7694051
  • 博文数量: 637
  • 博客积分: 10265
  • 博客等级: 上将
  • 技术积分: 6165
  • 用 户 组: 普通用户
  • 注册时间: 2004-12-12 22:00
文章分类

全部博文(637)

文章存档

2011年(1)

2010年(1)

2009年(3)

2008年(12)

2007年(44)

2006年(156)

2005年(419)

2004年(1)

分类: LINUX

2005-03-20 23:25:19

LVS+Heartbeat+Ldirectord在Red Hat9.0下的实现

陆 飞(、)
杭州市地方税务局西湖征收管理局
2003年9月


2.6.4. Ldirectord 的安装:

一些文章介绍在ipvs-x.x.x.tar.gz中已包含了Ldirectord,估计该作者并没有进入到相关目录中去仔细查看,该目录中只有一 个README文件,告诉你在哪里可以找到Ldirecrtord的代码。总之我在ipvs-1.0.9.tar.gz中是没有看到Ldirectord 源代码。其实它的源代码是包含在heartbeat-1.0.3.tar.gz中的。所以请到这里下载相关代码:

源代码安装:


cd heartbeat-1.0.3
./ConfigureMe configure
make
make install.

rpm安装:


rpm -ivh --nodeps heartbeat-ldirectord-1.0.3-1.i386.rpm

可以通过命令:rpm -q heartbeat-ldirecrord -d 来检查安装的路径。

为了简化安装步骤,我安装的是Ldirectord for Red Hat 9的rpm包,RedHat和Debian版本的从这里下载:

注意:

/usr/share/doc/heartbeat-ldirectord-1.0.3/ldirectord.cf文件是Ldirectord的配置文件的范例。拷贝该文件到/etc/ha.d/目录下,修改其内容,并另存为xxx.cf(例如:,mail.cf),以便在Heartbeat的配置文件haresources中使用。

范例:(http服务)


#
# Sample ldirectord configuration file to configure various virtual services.
#
# Ldirectord will connect to each real server once per second and request
# /index.html. If the data returned by the server does not contain the
# string "Test Message" then the test fails and the real server will be
# taken out of the available pool. The real server will be added back into
# the pool once the test succeeds. If all real servers are removed from the
# pool then localhost:80 is added to the pool as a fallback measure.

# Global Directives
checktimeout=3
checkinterval=1
fallback=127.0.0.1:80
autoreload=yes
#logfile="/var/log/ldirectord.log"
#logfile="local0"
quiescent=yes

# A sample virual with a fallback that will override the gobal setting
virtual=192.168.7.110:80
real=192.168.7.11:80 gate
real=192.168.7.12:80 gate
real=192.168.7.13:80 gate
fallback=127.0.0.1:80 gate
service=http
request="/.testpage"
receive="Test Page"
scheduler=rr
#persistent=600
#netmask=255.255.255.255
protocol=tcp

然后你必须在每台真实服务器节点的www的根目录上生成以Test Page为内容的.testpage文件。在每台真实服务器节点的www的根目录上执行命令:echo "Test Page" > .testpage

2.6.5. Heartbeat的安装

源代码安装:



cd heartbeat-1.0.3
./ConfigureMe configure
make
make install.

rpm安装:


rpm -ivh --nodeps heartbeat-1.0.3.i386.rpm

为了适应Red Hat 9,我安装的是heartbeat for Red Hat 9的rpm包heartbeat-1.0.3-1.rh.9.1.i386.rpm RedHat和Debian版本rpm的版本从这里下载:

在安装时可能会遇到依赖性的错误,可以用--nodeps参数进行安装。总之把它提示所需要的rpm包(在dependancies目录下)全部装上。在dependancies目录下其它一些其它rpm包,如果不用相关功能可以不装。

配置 Heartbeat

需要配置的有三个文件:ha.cf haresources(在每个节点必须相同) Authkeys,应该将它们放置在/etc/ha.d目录下。范例配置在/usr/shared/doc/heartbeat-1.0.3目录下,你可 以修改后拷贝到/etc/ha.d目录下。

2.6.5.1. 配置ha.cf

这个配置文件告诉heartbeat 使用的是什么介质和如何配置它们。ha.cf 包含你将到的所有的选项,内容如下:

serial /dev/ttyS0

使用串口heartbeat - 如果你不使用串口heartbeat, 你必须选择其它的介质,比如以太网bcast (ethernet) heartbeat。如果你使用其它串口heartbeat,修改/dev/ttyS0 为其它的串口设备。

watchdog /dev/watchdog

可选项:watchdog功能提供了一种方法能让系统在出现故障无法提供"heartbeat"时,仍然具有最小的功能,能在出现故障1分钟后重启 该机器。这个功能可以帮助服务器在确实停止心跳后能够重新恢复心跳。如果你想使用该特性,你必须在内核中装入"softdog" 内核模块用来生成实际的设备文件。想要达到这个目的, 首先输入 "insmod softdog" 加载模块。然后,输入"grep misc /proc/devices" 注意显示的数字 (should be 10). 然后, 输入"cat /proc/misc | grep watchdog" 注意输出显示出的数字(should be 130)。现在你可以生成设备文件使用如下命令:"mknod /dev/watchdog c 10 130" 。

bcast eth1

指定使用的广播heartbeat 的网络接口eth1(修改为eth0, eth2, 或你所使用的接口)

keepalive 2

设置心跳间隔时间为2两秒。

warntime 10

在日志中发出最后心跳"late heartbeat" 前的警告时间设定。

deadtime 30

在30秒后明确该节点的死亡。

initdead 120

在一些配置中,节点重启后需要花一些时间启动网络。这个时间与"deadtime"不同,要单独对待。 至少是标准死亡时间的两倍。

hopfudge 1

可选项: 用于环状拓扑结构,在集群中总共跳跃节点的数量。

baud 19200

串口波特率的设定(bps).

udpport 694

bcast和ucast通讯使用的端口号694 。这是缺省值,官方IANA 使用标准端口号。

nice_failback on

可选项:对那些熟悉Tru64 Unix, 心跳活动就像是"favored member"模式。主节点获取所有资源直到它宕机,同时备份节点启用。一旦主节点重新开始工作, 它将从备份节点重新获取所有资源。这个选项用来防止主节点失效后重新又获得集群资源。

node linuxha1.linux-ha.org

强制选项:通过`uname -n`命令显示出的集群中的机器名。

node linuxha2.linux-ha.org

强制选项:通过`uname -n`命令显示出的集群中的机器名。

respawn userid cmd

可选项:列出可以被spawned 和监控的命令。例如:To spawn ccm 后台进程,可以增加如下内容:
respawn hacluster /usr/lib/heartbeat/ccm
通知heartbeat 重新以可信任userid身份运行(在我们的例子中是hacluster) 同时监视该进程的"健康"状况,如果进程死掉,重启它。例如ipfail, 内容如下:
respawn hacluster /usr/lib/heartbeat/ipfail
NOTE: 如果进程以退出代码100死掉, 这个进程将不会respawned。

ping ping1.linux-ha.org ping2.linux-ha.org ....

可选项:指定ping 的节点。 这些节点不是集群中的节点。它们用来检测网络的连接性,以便运行一些像ipfail的模块。

2.6.5.2. 配置 haresources

一旦你配置好了ha.cf文件,下面就需要设置haresources文件,这个文件指定集群所提供的服务以及谁是缺省的主节点。注意,该配置文件在所有节点应该是相同的。

在我们的例子中,我们的HA集群提供的是负载均衡服务(LVS)和服务监控服务(Ldirectord)。这里集群的IP(虚拟)地址是必须配置的,不要在haresources文件以外的地方配置该IP地址。所以我们应该添加如下一行:

linuxha1 IPaddr::192.168.7.110/24/192.168.7.255 ipvsadm ldirectord::www ldirectord::mail

::前的表示服务脚本名称(IPaddr),你可以在目录/etc/ha.d/resource.d下找到一个脚本名叫 Ipaddr,后面的表示输入的参数。

Heartbeat 会在下面的路径搜索同名的启动脚本:
/etc/ha.d/resource.d
/etc/rc.d/init.d

这里的服务脚本的使用是符合Init标准语法,所以你可以在这里通过Heartbeat方便地运行、停止/etc/rc.d/init.d下标准的服务后台进程。

2.6.5.3. 配置 Authkeys

配置加密认证算法,有三种算法:CRC, md5,sha1。你会问我们应该用哪种呢?

如果你的heartbeat运行在一个安全的网络,例如CAT5交叉线,你可以用CRC,从资源开销上来说,这是最节省开销的。如果网络是不可靠 的,而且你也不是一个网络安全痴狂者或者你十分关心CPU资源的最小开销,就用md5,最后如果你关心的是安全而不是CPU资源的开销,那么建议你使用 sha1,你将会得到最佳的安全度,很难被黑客所破解。

格式如下:auth []

例: /etc/ha.d/authkeys

使用sha1
auth 1
1 sha1 key-for-sha1-any-text-you-want

使用md5
auth 1
1 sha1 key-for-md5-any-text-you-want

使用CRC
auth 2
2 crc

chmod 600 Authkeys

在 本文介绍的方案中,正如前面所提到的,集群中的真实节点可以是Linux系统,也可以是WindowsNT/2K或其它支持的系统,在本文例举的 VS/DR方式下,支持WindowsNT/2K做为RealServer,提是你必须安装了MS Lookback Adapter。如果你没有在NT/2K上安装MS Lookback Adapter Driver,你可以选择添加新硬件,添加网络适配器,选择Microsoft,选择Lookback Adapter. 你可能会需要NT的安装盘。然后添加VIP (Virtual IP) 地址在 MS Loopback Adapter上, 不要输入网关gateway IP地址。子网掩码 255.255.255.255 在MS NT/2K会被认为是无效的。你有两种解决方法:

  1. 你先接受缺省的netmask, 然后进入MS-DOS 提示符,删除外部路由

    c: route delete

    这将改变包的发送方向到其它的网络界面,而不是MS Loopback interface. 因此在这里设置网络掩码为255.0.0.0 同样可以工作。

  2. 可以通过修改注册表设置子网掩码为255.255.255.255, 这在我的DR系统中工作良好。而且这比每次启动时删除外部路由的方法要方便的多。

    在Windows 2000,中 网络界面(interfaces)在:

    HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters\Interfaces

    找到适当的网络界面IP地址,修改它的子网掩码,(注意修改方式)不需要重启,只需重新激活该网络界面即可。

本人强烈建议您使用第二种方法,这将带来极大的方便。

4.1. 启动:


cd /etc/rc.d/rc0.d ; ln -s ../init.d/heartbeat K05heartbeat
cd /etc/rc.d/rc3.d ; ln -s ../init.d/heartbeat S75heartbeat
cd /etc/rc.d/rc5.d ; ln -s ../init.d/heartbeat S75heartbeat
cd /etc/rc.d/rc6.d ; ln -s ../init.d/heartbeat K05heartbeat

如果你安装的是rpm的版本,该连接已经被建立,就不需要手工建立以上连接了。

注意:

如果你使用watchdog 功能,你必须在启动的时候装入该模块。你可以在 /etc/rc.d/rc.sysinit 文件中加如一句:

/sbin/insmod softdog

4.2. 测试:

测试分为三部分测试

1)HA负载调度器测试

可以用telnet服务来验证HA负载调度器是否正常工作,方法:

修改haresources为:linuxha1.linux-ha.org IPaddr::192.168.7.110/24/192.168.7.255 telnet

在客户机上telnet到192.168.7.110上,你将会看到linuxha1,然后宕掉linuxha1, 再telnet到192.168.7.110上,你将会看到linuxha2,说明HA工作正常。中间间隔时间10秒左右。如果超过30秒仍无法正常工 作,说明有问题存在。在测试中要保证至少有一条心跳线连接良好,否则重新连上心跳线后会引起资源上的混乱。

2)HA+LVS测试

如果HA负载调度器可以正常工作,那么就可以进行HA+LVS测试,方法类似:

修改haresources为:

linuxha1.linux-ha.org IPaddr::192.168.7.110/24/192.168.7.255 ipvsadm

设置ipvsadm中相关http的规则。

在RealServers上打开httpd服务。然后在不同的RealServer www首页上以内容区分开来。然后在客户机上进行测试,客户机上的浏览器由于缓冲的缘故,你可能需要刷新几次。

再做宕机测试。看备份Director能否正常接管,并且使RealServers继续提供服务。

3)HA+LVS+Ldirectord测试

方法类似。修改haresources为:

linuxha1 IPaddr::192.168.7.110/24/192.168.7.255 ipvsadm ldirectord::www

加入ldirectord服务监控进程。宕掉部分RealServers上的服务,进行测试。你可以通过运行ipvsadm查看ipvs的路由表来确定宕掉服务的RealServer的相关该服务路由信息是否被更改。

如果以上测试都能正常通过,恭喜你,你的心血没有白费。你将会得到一个高可用、高性能、高可伸缩性的服务集群。

到此,本文已接近尾声,希望通 过对本文的阅读,能够让你了解什么是Linux下的集群技术,更重要的是让你知道如何一步步地亲自去构建Linux下的集群。锻炼你理论与实际相结合工作 的能力,能给你带来工作中的乐趣与收获。同时希望能与大家一起交流Linux下的相关技术,互相促进,相互提高。

  • 章文嵩博士的相关撰文:LVS 系列文章
  • 上相关文档
  • 上相关文档

陆飞,杭州市地方税务局西湖征收管理局, 欢迎与我联系。我的电子邮箱是:、。

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