2010年(10)
分类: LINUX
2010-04-11 17:38:10
HeartBeat 双机热备逻辑系统架构
采用免费开源的机遇Linux HA项目下的Heartbeat搭建一个HA的平台,其工作模式为主/从(Active/Standby)。即主服务器工作,从服务器处于监控状态。当Heaatbeat检测到主服务器宕机的时候,从服务器接管主服务器的工作。当主服务器恢复正常后,系统能将服务自动切换到主服务器上运行。系统采用两台PC server,服务器配置双网卡。两台服务器的eth0都介入外部网络,供饮用程序使用。Eth1通过交叉线彼此相连,配置IP 做Heartbeat的心跳线。此方案能实现关键是在主/从服务器宕机切换时,对客户端来讲是透明的。Heartbeat采用虚拟ip地址映射技术来实现这个功能,系统原理拓扑图,请参考下面拓扑:
HA集群通讯机制
集群内部通讯机制用于确保数据的完整性并实现如下:
1、 控制系统合适能成为集群成员
2、 决定集群系统状态
3、 当问题发生的时候控制集群的行为
Heartbeat是用来检查另一台服务器是否仍然正常运行的机制,集群成员之间由点对点的Ethernet来进行联机监测。每一个集群成员将会定期的通过Ethernet发送heartbeat(ping)信号,Linux-HA使用这个信号信息来帮助找出成员的状态,并确保正确的 Linux-HA操作。
配置Linux下的高可用集群试验
1、 准备工作
首先需要2台PC server,建议硬件环境相同。为了传输心跳信号,需要在节点之间存在一条或多条的介质链路,能有效的保证单点失效()。
硬件完成之后,需要安装操作系统及配置网络,要求主机都有两块网卡,一块用于外部网络服务,另一块用于Heartbeat。详细如下:
主服务器主机名为linuxha1 IP地址为:10.128.132.5 IP:192.168.0.5
从服务器主机名为linuxha2 外部IP地址为:10.128.132.6 Heartbeat IP:192.168.0.6
2、 下载安装软件包
可以从网站下载Heartbeat,其中也有rpm二进制软件。当然也可以选择源码安装。取得源码的话,将其释放到某个目录,然后在该目录中执行./ConfigureMe configure生成makefile之后,我们执行make和make install。
如果下载的是rpm二进制软件包就相对简单。需要如下的软件包:
Ipfail:一个能在探子服务器IP失效后立即抓取服务器IP的软件。
Stonith:在任何server停止时,能确保剩下的server不会被正在运行的server所影响,可以选择强制停止一些server的解决方案。
Ldirector:负载平衡的调度程序。
安装命令如下:
#rpm –ivh -pils-*.rpm
#rpm –ivh heartbeat-stonith-*.rpm
#rpm –ivh heartbeat-*i386.rpm
也可以使用yum命令在线安装,可以不用考虑软件之间的依赖关系。
具体方法如下:
解决方法:
#rpm -qa yum
yum-3.0.5-1.el5.
可以看到已经安装了的yum软件,卸载它,
rpm -e yum-3.0.5-1.el5
然后我们下载一个新的可以让我们使用的yum网址:
安装之后,我们再设置yum源:
vim /etc/yum.repos.d/CentOS-Base.repo
[base]
name=CentOS-$releasever - Base
baseurl=
gpgcheck=1
gpgkey=RPM-GPG-KEY-centos5
#released updates
[update]
name=CentOS-$releasever - Updates
baseurl=
gpgcheck=1
gpgkey=
[addons]
name=CentOS-$releasever - Addons
baseurl=/
gpgcheck=1
gpgkey=
[extras]
name=CentOS-$releasever - Extras
baseurl=
gpgcheck=1
gpgkey=
vim /etc/yum.repos.d/dag.repo
添加如下:
[dag]
name=Dag RPM Repository for RHEL5
baseurl=
enabled=1
gpgcheck=1
gpgkey=RPM-GPG-KEY-CentOS-5
然后导入KEY
rpm --import RPM-GPG-KEY-CentOS-5
安装heartbeat
#yum install heartbeat
配置主服务器的heartbeat
/usr/share/heartbeat
/usr/share/doc/heartbeat-2.1.3/ hesiod-3.1.0/(可用Tab键补齐)
在启用heartbeat之前要配置3个配置文件,有可能需要手工创建,即
ha.cf,haresources和authkeys。存在源码目录的doc目录中。
ha.cf文件包括配置为heartbeat使用何种介质和如何配置其信息。在源码目录中的ha.cf文件包含以下可以使用的全部选项。
1),serial /dev/ttyS0 使用串口heartbeat,如果未使用,则必须使用其他介质,如bcast(以太网)并用适当的设备文件代替/dev/ttyS0。
2),watchdog /dev/watchdog
该选项是可选配置,可以获得提供最少更能的系统。该系统部提供heartbeat,可以在持续一分钟的不正常状态后重新启动系统。该功能有助于避免一台机器在被认定已经死亡之后恢复heartbeat的情况。如果这种情况发生,并且磁盘挂载因为故障而迁移(failover),则可能有两个节点同事挂载一块磁盘。如果要是用这项功能,除了这行之外,还需要加载softdog内核模块,并创建相应的设备文件。方法是使用命令insmod softdog内核模块,并创建相应的设备文件,然后执行grep misc /proc/devices 并记住得到的数字,一般为10。输入cat /proc/misc|grep watchdog记录输出的数字,一般为130。根据以上的参数,我们可以创建设备文件。执行mknod /dev/watchdog c 10 130
3),bcast eth1
该选项表示在eth1接口上使用广播heartbeat(注意,我们可以使用其他的网络接口做heartbeat)。从服务器通过广播bcast来与主服务器进行监听。
4),keepalive 2
该选项表示heartbeat之间间隔为2秒。
5),warntime
该选项在日志中发出late heartbeat 警告之前等待的时间,单位为妙。
6),deadtime 30
该选项在30妙后宣布节点死亡。
7),initdead 120
在某些配置下,重启后网络需要一定时间才能正常工作。这个单独的deadtime可以处理这种情况,并取值至少应该为deadtime的两倍。
8),baud 19200
串口的波特率。
9),udpport 694
该选项是用udp协议的694端口实现bcast和ucast通讯,这是默认在IANA官方注册的端口号。
10),auto_failback on
该选项是必须配置的,heartbeat工作方式类似于failover member方式。在failover之前,haresources文件中列出的主节掌握的所有资源,之后从节点接管这些资源。当 auto_failback on的时候,一旦主节点重新恢复联机,将从从节点取回所有的资源;若设置为off,主节点便不会重新获得资源。该选项和作废的 选项相似。如果要从一个设置nice_failback为off的集群升级到更新的版本,特别要注意一些事项,防止flash cut.具体可以参考linux-HA的FAQ。
11),node primary.mydomain.com
该选项必须配置,集群中的主机名要和uname –n 命令的相同。
12),node backup.mydomain.com
同上。
例如:
node NodeA.liukang NodeB.liukang
13),respawn
可选配置,用于列出将要执行和监控的命令。例如执行ipfail守护进程,这要添加如下内容:
Heartbeat用hacluster用户身份来执行并监视该进程的执行情况。如果其死亡,则重新启动这个进程。对于ipfail,应该是下面的语法:
Respawn hacluster /usr/lib/heartbeat/ipfail
配置haresources
该文件列出集群所提供的服务以及服务默认的所有者,两个集群节点上的该文件应该相同。
集群的IP 地址是必须要配置的,不能在该文件以外配置该地址。该文件用于指定双机系统的主节点、集群IP、子网掩码、广播地址、启动的服务等。配置语法如下:
Node-name network-config
主机名 IP地址 服务名
例如:
NodeA.liukang 192.168.0.98 httpd
其中 node-name指定主节点,取值必须和 ha.cf文件中node选项设定的主机名中的一个。node选项中的另一个主机名成为从节点;network-config用于配置网络、包括指定集群的IP、子网掩码、广播地址等;resource-group用于设定heartbeat启动的服务,该服务最终由双机系统通过集群IP对外提供。本实验假设我们要配置HA服务为apache和samba。
在该文件中包含如下行:
10.128.132.4 httpd smb
该行指定在启动时节点linuxha1的到的IP地址为10.128.132.5,并启动httpd和samba。再停止的时候首先停止samba,然后停止 httpd,最后释放IP地址10.128.132.5。这里需要注意的是,Primary.mydomain.com是使用uname –a输出的主机名。
正确配置该文件后,将该文件拷贝到/etc/ha.d目录中。
配置authkeys
Authkeys文件决定认证密钥,一共有三种认证方式:crc、md5、sha1。如果heartbeat运行于安全的网络之上,如本实验的eth1通过交叉线相连,可以使用crc。因为这是代价最低的方法。如果网络并不安全,但也想低的CPU占用,则使用md5;如果想得到最好的认真,而不考虑CPU的占用情况,可以使用sha1,它是三种之中最安全的。
文件格式如下:
Auth
因此,对于sha1的方式可能是:
Auth 1
1 sha1 key-for-sha1-any-text-you-want
如果是md5,只要将上面的sha1换成md5即可。如果是crc,配置如下:
Auth 2
2 crc
最后,要确保这个文件的安全性。如rw-------即600。
配置备份服务器的heartbeat
依次按照主服务器中的rpm软件包到备份的服务器。然后使用ssh命令把主服务器配置文件拷贝到从服务器。
#scp –r /etc/ha.d backupnode:/etc/ha.d
设置主服务器和备份服务器的时间同步
要求住服务器和备份服务器的时间差异不超过几十秒。否则在高可用服务器的环境下会产生问题,在两个系统启动heartbeat之前,应该人工使用data命令设置系统的时间。更好的办法是使用时间服务器ntp。
启动主服务器的heartbeat
使用如下命令:
#/etc/init.d/heartbeat start
或者
#Services heartbeat start
这时候会出现如下信息:
Primary.mydomain.com heartbeat[2 886]:WARN:node backup.domain.com:is dead
表示备份服务器死机的警告,原因是备份服务器heartbeat没有启动。
配置ipfail
Ipfail插件的用途是检测网络故障,并做出合理的反应。如果需要,是集群failover。为了实现这样的功能,ipfail使用ping节点或者节点组的方法,是这些节点在集群中作为哑节点出现。如果HA节点可以互相通讯,ipfail可靠的检测到其中一个网络连接失效的情况,并进行failover。
配置步骤如下:
1、 选择候选的ping节点。
2、 设置auto_failover为on或者是off。
3、 配置ha.cf启动ipfail
在ha.cf文件中增加下面一行:
Respawn hacluster /usr/lib/heartbeat/ipfail
4、 在ha.cf文件中增加ping节点
增加如下行:
Ping node01 node02 node03 …nodeN