利用 HeartBeat 实现双机热备的网关接入

作为接入网关,对于联通性要求比较高,需要保证尽可能工作正常。从HA(High Availability)的角度来说,我们可以采取双机热备的方式来实现网关的冗余接入。

如图所示,局域网客户机C,网络配置为
IP:  10.0.1.254
NM:  255.255.255.0
GW:  10.0.1.1
意图通过冗余的网关 10.0.1.1接入上级网络 192.168.0.0/24。

利用HeartBeat,可以轻松实现双Linux主机的冗余备份,在这里下载最新的HeartBeat: http://linux-ha.org/download/
HeartBeat,顾名思义,通过“心跳”信号检测主机是否存活。冗余备份的系统可以有两种工作方式:
Active/Standby 主主机工作时,备份主机不工作,仅检测主主机是否存活。若主主机停机,则备份主机代替主主机;主主机回复正常后,备份主机停止服务,进入检测状态。
Active/Active  主主机工作负荷过重时,备份主机承担主主机的服务分流。

由于Active/Active模式牵涉负载均衡(Load Banlancing),此处不再介绍,仅仅关注上图所示的Active/Standby模式:当主主机A失效时,备份主机B取代主主机网关的位置,例如IP、防火墙规则等。
“心跳”信号的检测可以通过串口线,也可以通过网线进行,此例中,我们采用网线配置。主机A、B都是Linux,配置大体相近,如图所示。eth0上级网络接口(192.168.0.x),eth1为局域网接口(10.0.1.x),eth2为心跳检测接口(10.0.2.x),配置如上图。

【编译/安装】
去 http://linux-ha.org/download/ 下载最新的版本,我的Linux用的是Mandrake 8.2,干脆下源码编译,全部使用缺省配置:
./configure
make
make install
编译的过程中可能会因为包的依赖而出错,少什么你就去下载什么包吧,这个比较没辙。
编译安装完毕后,位于/usr/local/目录下,关键配置目录为/usr/local/etc/ha.d/,启动脚本为 /etc/rc.d/init.d/heartbeat

【配置】
1。配置 /usr/local/etc/ha.d/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 eth2 

指定使用的广播heartbeat 的网络接口eth2(修改为eth0, eth2, 或你所使用的接口),当然你也可以选择其他的方式,例如mcast, ucast 

keepalive 2 

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

warntime 10 

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

deadtime 30 

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

initdead 120 

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

baud 19200 

串口波特率的设定(bps),使用串口时有效. 

udpport 694 

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

nice_failback off 

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

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


2。配置/usr/local/etc/haresources
这个文件指定同步的服务以及主机是什么。两台机器上的这个文件一定要一致。我们设定的是主机,它对外的IP是10.0.1.1,所以haresources的内容应该如下:
haa.test.com 10.0.1.1 

如果你想配置其他的HA服务的话,也可以这样写:
haa.test.com 10.0.1.1 httpd
其中httpd是启动脚本的名称。heartbeat会先从/etc/ha.d/resource.d和/etc/rc.d/init.d的目录中去寻找httpd这个启动脚本

注意:在/usr/local/etc/haresources中指定的 haa.test.com 将是 Active/Standby 模式中的主主机。


3。配置/usr/local/etc/authkeys
有三种认证方式:crc, md5, and sha1. sha1是最难破解的,md5其次,crc最次。

  这个文件的格式如下:

  auth 
    []

  这里我们的authkeys文件内容如下:

  auth 1 
  1 sha1 sha1 myAuthkey

  然后将其权限设为600,以提高安全性。注意:如果不做这一步,heartbeat无法正常运作。
  chmod 600 authkeys


【运行】
启动主机A、B的HeartBeat服务:/etc/rc.d/init.d/heartbeat start
如有需要,将HeartBeat服务设定为启动时自动启动。注意,如果你希望HA服务是其他的例如httpd,那么你需要停止服务,让heartbeat去启动它。


【测试】
正常启动后,主机A的地址多了一个
eth1:1 10.0.1.1
同时通过eth2发送心跳信号与主机B通讯。手动reboot主机A,几秒钟后,主机B的地址取得了10.0.1.1,代替了主机A的工作。

详细的日志位于 /var/log/ha-log

你可能感兴趣的:(利用 HeartBeat 实现双机热备的网关接入)