QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 586|回复: 2

原创翻译:基于heartbeat的高可用性文件服务器

[复制链接]
发表于 2004-1-13 15:43:06 | 显示全部楼层 |阅读模式
原创翻译:基于heartbeat的高可用性文件服务器
基于heartbeat的高可用性文件服务器

Steve Blackmon 和 John Nguyen
翻译:葛行洲

注:本文档遵守gnu协议,可以自由转贴。为尊重他人劳动成果,转贴请保留作者、译者信息。如果发现错误,联系我:[email protected].

保持最大的系统可运行时间对于任一机构都变成日益紧迫的事情。虽然现在有很多现成的高可用性的解决方案,但是很多小公司都没有相应的系统——它们太贵而且需要专门的技术进行维护。本文,我们提供一种使用廉价的硬件,基于公共许可证的免费的软件实现低成本的高可用性系统的解决方案。对于一名网络管理员可以用较少的时间学到使用和搭建本系统。我们会一步步的教你搭建一个为UNIX和windows客户端提供服务的高可用性文件服务器。虽然本文关注于安装文件服务器,但是,对于很多种服务都可以采用此项技术。

硬件机软件组成

硬件

要开始搭建本系统,你需要两台服务器,每台应至少有一块网卡(推荐两块),一个可用的串行口,一个SCSI控制器(SCSI卡),还有一套外接的SCSI存储系统(推荐磁盘阵列柜)。
我们使用两套相同配置的intel ISP 1100服务器(P3 650,128M内存)。每台服务器有两块集成的10M/100M自适应的网卡并且服务器都是机架式的(1U高),有两个内部的IDE接口——我们准备用它来安装操作系统。对于共享磁盘,我们用一套9GB的SCSI磁盘分别连接到两台服务器上。SCSI控制器是Adaptec的AHA-2940AUs。(参见图1)。

Figure 1 Our system setup
软件

操作系统采用红帽6.2(2.2.14-5.0内核),samba版本2.0.6-9(红帽6.2中包含),heartbeat 0.4.9-1(可从http://www.linux-ha.org/download处下载)。
heartbeat是由Alan Robertson写的公共许可软件,提供了任何高可用性系统都应具有的象启动或停止资源(集群服务),监控集群内系统的可用性的功能。heartbeat是一个能够通过串口或网卡或两者兼而有之的方式来监控每一个服务的状态的软件解决方案。当前版本的heartbeat支持两个节点的配置并通过专用的"pings"(广播,组播)命令监测服务的可用性。这是整个linux集群重要的组件。
当前的heartbeat只支持linux,下一个版本将支持Solaris,FreeBSD和OpenBSD。
我们非常感谢Alan写出的这个重要的软件,同时,当我们写这篇文档的时候他还在继续写着。

过程

由于我是根据我们自己的硬件写的过程,所以在你自己动手时需要将相应的硬件改成你自己的硬件。

硬件连接

图一展示的是本集群系统的硬件(网络)连接示意。
两台服务器用串口电缆连接;
用一条交叉五类电缆连接两台服务器的第二个网卡接口;
用SCSI电缆分别连接两台服务器和外部SCSI接口的SCSI存储系统。

更改主系统的SCSI ID

SCSI总线上的每一个组件必须有不同的ID,集成到主板上的SCSI卡通常ID默认为7。因为我们的SCSI总线上有两块SCSI卡和一个外接磁盘,我们需要更改一块SCSI卡的ID。我们更改主节点的SCSI ID至6,剩下的一台仍为7。更改ID必须通过SCSI BIOS。对于Adaptec的SCSI卡,我们可以在系统引导时按<control>+A进入BIOS设置。如果你用的是其他品牌的SCSI卡,可以从说明书中找到更改SCSI ID的方法。

主节点的操作系统的安装

我将两台服务器命名为"ttisrv1"和"ttisrv2";"ttisrv1"是主节点,"ttisrv2"是从节点。你需要给每台服务器的主网卡接口分配一个唯一的局域网内的IP地址。同样,你还应该给每台服务器的第二块网卡分配IP地址,但是,由于第二块网卡要联成一个专用网络(集群系统),所以你必须使用另外网段的ip地址。

如果你选择“定制安装”,别忘了将samba也选进去。

设置外部存储系统

对于外部的存储系统,你需要进行分区和格式化。注意,这项操作只能是在主节点上进行。我们将整个外部存储系统分成一个分区。
用fdisk进行分区:
ttisrv1 # fdisk /dev/sda
磁盘的柱面(cylinders)数设成1116。这样分区没有错误,但大于1024,可以在某些设置导致某些问题,如:
1.引导时运行的软件(象LILO);
2.其它操作系统的引导软件和分区软件(象DOS的FDISK,OS/2的FDISK)

Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-1116, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-1116, default 1116):
Using default value 1116

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: If you have created or modified any DOS 6.x
partitions, please see the fdisk manual page for additional
information.

现在,在分好的分区上创建文件系统(格式化):
ttisrv1# mkfs /dev/sda1
为格式化完的分区创建装载点:
ttisrv1# mkdir /ttidisk
确认你能装载该分区:
ttisrv1# mount /dev/sda1 /ttidisk
建一目录存放samba的认证文件:
ttisrv1# mkdir /ttidisk/smb
建一个全局目录用于文件共享并设置适当的权限:
ttisrv1# mkdir /ttidisk/public
ttisrv1# chmod 1775 /ttidisk/public
卸掉这个分区(heartbeat会为你装载):
ttisrv1# umount /ttidisk

下载并安装heartbeat

下载heartbeat后,在主节点上安装:
ttisrv1# rpm -ivh <download_path>/heartbeat-0.4.9-1.i386.rpm

配置heartbeat

heartbeat的配置过程可以在/usr/share/doc/packages/heartbeat中找到比较好的操作指导和例子。我们只告诉你本例的配置方法,如果你想要更多的帮助,可以参阅上面给出的路径中的文档。
要让heartbeat工作,你需要配置3个文件:authkeys, ha.cf, and haresources。

配置/etc/ha.d/authkeys文件

这个文件设定了整个集群的认证密钥,每个节点必须保持一致。你可以从三种认证方案中选择一个:crc,md5或sha1,这取决于你的安全的需要。我们选择md5.这是我们的/etc/ha.d/authkeys文件:
# 使用md5认证方式,密钥为"ttikey"
auth 3
3 md5 ttikey
authkeys文件必须只能被root读取,否则heartbeat不会启动。创建这个文件后别忘了设置相应的权限:
# chmod 600 /etc/ha.d/authkeys

配置/etc/ha.d/ha.cf文件

这个文件设定了集群中的节点和heartbeat用来监测服务器是否运行的接口.文件如下:
# 定义集群中的节点
node ttisrv1
node ttisrv2

# 从节点检测不到主节点处于活跃状态多长时间,从节点接管共享介质(单位:秒)
deadtime 5

# 设定串行心跳线链路的频率
serial /dev/ttyS0
baud 19200

# 网络心跳线配置
udp eth1

配置/etc/ha.d/haresources文件

这个文件记录了被heartbeat管理的资源。一般这些资源就像/etc/rc.d/init.d中的启动、停止脚本一样控制着服务的启动、停止。记住,heartbeat会在/etc/rc.d/init.d和/etc/ha.d/resource.d 目录中寻找脚本。下面是我们的/etc/ha.d/haresources文件:
# 将ttisrv1设置为主节点,使用192.168.0.100作为集群系统的共享IP
ttisrv1 192.168.0.100 Filesystem::/dev/sda1::/ttidisk::ext2 \
smb nfslock nfs
这几行告诉heartbeat在ttisrv1上用192.168.0.100这个共享ip上启动资源(集群服务),将/dev/sda1装载到/ttidisk装载点上并启动samba和NFS服务。

配置/etc/hosts文件

你的/etc/hosts文件应该包含整个集群系统中的每个节点信息和集群系统的ip。这是我们的ttisrv1上的/etc/hosts文件(两台系统的这个文件应保持一致。):
127.0.0.1 ttisrv1 localhost.localdomain localhost
192.168.0.99 ttisrv2
192.168.0.100 ttisrv

配置samba:

samba2.0.6已经包含在redhat 6.2的发行版中。当你安装系统时没有将samba选中,可以用RPM从安装光盘上安装:
ttisrv1# rpm -Uvh /mnt/cdrom/RedHat/RPMS/samba-*.rpm
如果你的机器上的CD装载点不是/mnt/cdrom,请用你的路径替换掉。

配置smb.conf:

检查一下samba服务是否已经启动,输入:
ttisrv1# /etc/rc.d/init.d/smb status
如果samba没有启动,你应看到:
smbd is stopped
nmbd is stopped
如果samba已经运行了,你会看到:
smbd (pid 5103) is running...
nmbd (pid 5114 5112) is running...
注意:这与你的机器上的PID不会一样。如果samba已经运行,停掉它:
ttisrv1# /etc/rc.d/init.d/smb stop
实际上samba是否运行并不重要。我们对samba的配置会被它马上启用,因为,默认的情况下,samba会每过60秒钟检查一下它的配置文件。出于连贯性的原因,我们希望samba在我们完成配置的更改后再运行。记住保存一下配置文件的原件以备万一你返回来重新配置。锁定etc/smb.conf (或/etc/samba/smb.conf)文件,我们开始对它进行配置。
安装Samba是一个简单的过程。你可以在安装你的redhat时将它选定或者用RPM方式单独安装。但是配置过程比较麻烦。我们不想将本文变成samba的配置指南,可以通过O'Reilly & Associates的using samba一书来研究一下这个课题,我们推荐你读一下这本书来增加一下对samba的理解。
接下来,listing 1列出了我们将一台linux主机变成samba服务器所作的更改。我们从系统安装后默认的smb.conf文件着手将它修改成我们需要的一套配置。请注意,listing 1不是完整的smb.conf文件,它只是列出了我们已经更改的部分。你可以将原始文件的其它部分添进去。



完成samba

完成smb.conf的配置后,你应该检查并确认你的配置文件已经正确配置:
ttisrv1# /usr/bin/testparm -s
如果没有错误,你可以继续下去了。但是,不要现在启动samba服务,heartbeat会自动启动它。
接下来,给你的samba口令文件增加一个用户,这个用户应该是你的linux的合法用户(也就是说,这个帐户应该在/etc/passwd中存在),如果不是,samba会拒绝增加该用户。例如,我们要增加一个新用户steve,首先,装载文件系统:
ttisrv1# mount /dev/sda1 /ttidisk
增加用户:
ttisrv1# /usr/bin/smbpasswd -a steve
samba会提示输入该用户的SMB口令;输入它,卸掉该分区(heartbeat会替你装载):
ttisrv1# umount /ttidisk
注意,当系统配置完成后共享的文件系统被heartbeat控制后装载或卸载/ttidisk完全是多余的。这是提供给你samba服务器的一个示范。

配置NFS

确认你没有在操作系统启动时启动NFS服务:
ttisrv1# /sbin/chkconfig --del nfs
在关机或重启时增加以下命令杀掉NFS:
ttisrv1# /sbin/chkconfig --level 016 nfs off
这几步是必要的因为我们想让heartbeat控制NFS的启动。增加以下行至/etc/exports文件中,如果这个文件不存在就创建它:
#标示共享磁盘, 允许读写访问,并同步I/O 没有写的延迟
/ttidisk 192.168.0.*(rw,sync,no_wdelay)

测试heartbeat

在主节点中输入以下命令启动heartbeat:
ttisrv1# /etc/rc.d/init.d/heartbeat start
Starting High-Availability services: [ OK ]
如果失败了,在/var/log/messages文件中确定原因并纠正。heartbeat启动成功后,你应该看到一个新的网卡并且拥有你在ha.cf文件中配置的IP。这个网卡是虚拟的,所以你应该看到类似于如下的信息:
ttisrv1# ifconfig

<...clipped output...>

eth0:0 Link encap:Ethernet HWaddr 000:B7:00:B5:09
inet addr:192.168.0.100 Bcast:192.168.0.255 \
Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Interrupt:7 Base address:0x7000
注意:hearteat初始化会有一个短时间的延迟。你应该看到预先设置的磁盘已被装载:
ttisrv1# df -k

Filesystem 1k-blocks Used Available Use% Mounted on
/dev/hda1 2016016 42612 1870992 2% /
/dev/hda6 11385128 376292 10430500 3% /usr
/dev/sda1 8823404 552 8374644 0% /ttidisk
检查samba和NFS是否成功运行:
ttisrv1# /etc/rc.d/init.d/smb status

smbd (pid 5729) is running...
nmbd (pid 5740 573 is running...

ttisrv1# /etc/rc.d/init.d/nfs status

rpc.mountd (pid 5825) is running...
nfsd (pid 5841 5840 5839 5838 5837 5836 5835 5834) is running...
rpc.rquotad (pid 5816) is running...

配置第二个节点

第二个节点的配置过程是第一台的配置过程的一个子集。相对于第一个节点,第二个节点的配置过程非常简单。
首先,用上面提到的安装第一个节点的操作系统一样来安装第二个节点的操作系统。接着,使用相同的方法安装第二个节点的heartbeat。我们推荐在配置时将第一个节点的配置文件直接拷贝过来。你也可以用手工的方式按照第一个节点的配置方法重新配置,但那样的话太浪费时间,并且容易出错。你可以用以下的命令将相关文件制成一个tar包:
ttisrv1# cd /
ttisrv1# tar cvf <path>/hafiles.tar /etc/smb.conf \
/etc/ha.d/haresources /etc/ha.d/ha.cf /etc/ha.d/authkeys \
/etc/exports
作完tar包后,用FTP或其他的你喜欢的方法将该文件传到第二个节点上(你可以在主节点上装载共享磁盘,将tar文件考上,再卸载掉,然后再第二个节点上装载装载该共享磁盘并取出文件),用以下命令解压:
ttisrv2# cd /
ttisrv2# tar xvf <path>/hafiles.tar
记住,在/etc/hosts文件内加上主节点的ip和共享ip.

连通性测试

到现在,两个系统应该已经完全准备好了,在进行失败——转接(failover)测试前应当做一下测试以确保所有的基础性配置都是正确的。首先,确保你可以在一个节点上两个网卡都能ping通另一个节点,你还必须保证你的串行连接也是起作用的。
在ttisrv1上:
ttisrv1# cat < /dev/ttyS0
在ttisrv2上:
ttisrv2# echo "TTY test" > /dev/ttyS0
你应该在ttisrv1上看到该文件。你也应该将这个测试过程反过来做一遍以保证双方通信正常。我们现在测试一下第二个节点能否装载上外部磁盘。首先,创建装载点:
ttisrv2# mkdir /ttidisk
确认你可以装载上文件系统:
ttisrv2# mount /dev/sda1 /ttidisk
卸载掉该文件系统:
ttisrv2# umount /ttidisk

在第二个节点上启动heartbeat服务:

如果你能完成这一步没出问题,那你就成功了!现在,我们剩下的所有的事情,就是在第二个节点上启动heartbeat,然后我们可以测试以确认所有的(节点)都在工作。
在第二个节点上启动heartbeat:
ttisrv2# /etc/rc.d/init.d/heartbeat start

测试故障——切换(Failover)

在主节点上测试故障——切换,只需简单的将heartbeat服务停掉即可:
ttisrv1 # /etc/rc.d/init.d/heartbeat stop
你应该在30秒内或更少的时间内看到第二个节点上的所有的服务会自动启动。如果没有,查一下/var/log/messages文件找出问题并解决掉。故障排除后,你可以再次启动heartbeat。heartbeat总是尽可能的优先运行在主节点上。

警告

在我们记述的这个实例配置中,我们只用了外接SCSI硬盘,这是一个单点故障点。更优越的方案是,用一个硬件的RAID设备(磁盘阵列)或两块互相镜像的磁盘,如果我们在把这些东西的使用加进去的话,就超出了本文的讨论范围。我们在一套磁盘阵列上测试了所有的本文的配置,没有出现任何异常。虽然我们没有用软件的RAID1(磁盘镜像)测试,但是我们相信它会很好的工作的。我们也想指出当发生故障——切换时,没有完成磁盘写的操作的进程可能失败,这取决于(该进程的)默认的延迟时间(指的是time-out,译者注)的安排,再次尝试该操作能够正常执行。
当两个节点同时以读/写方式装载外部的SCSI磁盘时,可能会导致磁盘中的数据损坏。这种情况就是裂脑(split brain),你必须采取措施防止这种情况发生。如果两个节点同时以读/写方式装载磁盘系统,两台机器都会保持自己的超级数据块(superblock)的同步,而不关心另一台服务器做的更改。这会导致数据损坏。减小这个风险的最佳办法是采用多根心跳线检测,这样,heartbeat就会准确的监测集群系统内部的其他服务器的状态。如果你只用一根UTP交叉电缆作心跳线,而心跳线连接的网卡损坏,heartbeat就会认为这台服务器down了并尝试将共享磁盘交接到另一台服务器上。用一根UTP电缆和一根RS232线同时做心跳线,这样,即使集群系统也有发生裂脑的可能性,但在裂脑发生后,集群系统会至少经历两处故障(你不会是n年再检查一下系统吧?——译者注)。

其他用户

对于你为什么要用heartbeat做一个高可用性集群系统可能有无穷多个可能性。hartbeat在提供web服务和一些对只读性文件访问服务时表现的非常显著。例如,如果你有很多的CD要提供给用户使用,你应该会购买一个带有多CD驱动器的SCSI设备,然后通过samba或NFS方式共享出去(这个例子目前对国内的用户来说好像吸引力不大——译者注)。

总概

我们提供了一个利用便宜的硬件和免费的软件搭建的非常有效和高可用地解决方案,容易使用并且相对简单的安装过程。关于怎样将符合你需要的其他组件扩展进这个简单的系统内的问题,你只受你的想象力所限制。我们希望通过这篇文章提高你搭建你自己的高可用性项目的兴趣。你可以自由的发给我们你的补充和注释。


Steve Blackmon在1999年作为Transparent Technologies公司的创始人之一。作为一名软件工程师和系统管理员已经14年了。他通常在亚特兰大区域提供关于高可用性、SAN和IT基础性建设方面的咨询性建议。你可以通过这个E-mail联系他: [email protected]

John Nguyen取得佛罗里达州墨尔本的佛罗里达理工学院的学士学位。他是一名具有14年的开发经验的应用程序程序员。他对计算机、哲学和古典文学感兴趣。他可以通过[email protected]来联系。

葛行洲,目前在大连的一家企业做网络管理,可通过 [email protected]联系。
 楼主| 发表于 2004-1-13 15:44:02 | 显示全部楼层
图1

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复

使用道具 举报

 楼主| 发表于 2004-1-13 15:44:28 | 显示全部楼层
本例中的smb.conf



[global]

# workgroup = NT-Domain-Name or Workgroup-Name
workgroup = TTI

# netbios name
netbios name = ttisrv

# server string is the equivalent of the NT Description field
server string = Samba Server

# This option is important for security. It allows you to
# restrict connections to machines that are on your local network.
# The following example restricts access to one C class network
# and the “loopback” interface. For more examples of the syntax
# see the smb.conf man page
hosts allow = 192.168.0. 127.

# Put a capping on the size of the log files (in Kb).
max log size = 50

# You may wish to use password encryption. Please read
# ENCRYPTION.txt, Win95.txt and WinNT.txt in the Samba
# documentation. Do not enable this option unless you
# have read those documents.
encrypt passwords = yes
smb passwd file = /ttidisk/smb/smbpasswd

# Configure Samba to use multiple interfaces. If you have
# multiple network interfaces then you must list them here.
# See the man page for details. Note that we are using our
# shared IP address.
interfaces = 192.168.0.100/24

# Browser Control Options:
# set local master to no if you don’t want Samba to become a
# master browser on your network. Otherwise the normal election
# rules apply
local master = yes

# Preferred Master causes Samba to force a local browser election
# on startup and gives it a slightly higher chance of winning
# the election
preferred master = yes

# Enable this if you want Samba to be a domain logon server for
# Windows95 workstations.
domain logons = yes

# Windows Internet Name Serving Support Section:
# WINS Support - Tells the NMBD component of Samba
# to enable its WINS Server
wins support = yes

# A publicly accessible directory, read/write to all users. Note
# that all files created in the directory by users will be owned
# by the default user, so any user with access can delete any
# other user’s files. Obviously this directory must be writable
# by the default user. Another user could of course be specified,
# in which case all files would be owned by that user instead.

[public]
path = /ttidisk/public
public = yes
only guest = yes
writable = yes
printable = no
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-15 06:02 , Processed in 0.073456 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表