Linux 系统下双机HA的实现

――――基于heartbeat方式 实验环境为两台虚拟机作为HA主备节点,第三台虚拟机作为客户端。具体网络网卡参数配置见拓扑图。650) this.width=650;” onclick=’window.open(“http://blog.51cto.com/viewpic.php?refimg=” + this.src)’ >一、搭建实验环境1、设置主节点服务器主机名为:node1.example.com eth0网卡地址为:192.168.0.43 eth1网卡地址地址为:192.168.10.43设置备用节点服务器主机名为:node2.example.com eth0网卡地址为:192.168.0.45 eth1网卡地址为:192.168.10.45650) this.width=650;” onclick=’window.open(“http://blog.51cto.com/viewpic.php?refimg=” + this.src)’ >650) this.width=650;” onclick=’window.open(“http://blog.51cto.com/viewpic.php?refimg=” + this.src)’ >650) this.width=650;” onclick=’window.open(“http://blog.51cto.com/viewpic.php?refimg=” + this.src)’ >客户端IP地址为192.168.0.422、在主节点服务器上开启web服务,并验证web服务是否可以成功访问。650) this.width=650;” onclick=’window.open(“http://blog.51cto.com/viewpic.php?refimg=” + this.src)’ >验证成功后,关闭web服务。为了试验的顺利进行,这里将web服务设置为开机不启动。关闭httpd服务的目的是为了验证后面客户端访问服务器时,web服务的开启是受heartbeat控制的,而不是人为开启的web服务。650) this.width=650;” onclick=’window.open(“http://blog.51cto.com/viewpic.php?refimg=” + this.src)’ >在双机HA功能下,主备节点要通过heartbeat信息来保持联系,为了实现主备节点的heartbeat功能,需要安装额外的软件包。但是Redhat默认并没有安装这些软件包,这就需要到对应官方网站上去下载对应的软件包。需要安装的软件包有六个,分别是:libnet-1.1.4-3.el5.i386.rpmperl-MailTools-1.77-1.el5.noarch.rpm heartbeat-pils-2.1.4-10.el5.i386.rpmheartbeat-stonith-2.1.4-10.el5.i386.rpm heartbeat-gui-2.1.4-10.el5.i386.rpmheartbeat-ldirectord-2.1.4-10.el5.i386.rpmheartbeat-devel-2.1.4-10.el5.i386.rpmheartbeat-2.1.4-10.el5.i386.rpm安装上面六个软件包,会出现依赖关系,提示依赖下面的软件包(这些包在Redhat光盘文件中),因此为了方便安装这些软件包,建议建立本地yum库,如此以来就可以解决软件安装时出现的很多包依赖关系。perl-Compress-Zlibperl-HTML-Parserperl-HTML-Tagsetperl-URIperl-libwww-perlperl-MailToolsperl-TimeDateperl-String-CRC32net-snmp-libs把要安装的软件包复制到根目录下。然后通过本地yum库进行上述软件包的安装。由于上述软件包都是以.rpm结尾的,所以这里就使用*通配所有软件包。命令为:yum ?nongpgcheck localinstall *.rpm650) this.width=650;” onclick=’window.open(“http://blog.51cto.com/viewpic.php?refimg=” + this.src)’ >安装完成后,再来确认一下安装了所有的软件包。650) this.width=650;” onclick=’window.open(“http://blog.51cto.com/viewpic.php?refimg=” + this.src)’ >二、 软件的配置 Heartbeat软件的安装目录为/etc/ha.d,其中的README.config对配置文件进行了说明,共有三个主要的配置文件:ha.cf,haresources,authkeys。切换到/etc/ha.d目录下,却发现并没有这三个主要的配置文件。650) this.width=650;” onclick=’window.open(“http://blog.51cto.com/viewpic.php?refimg=” + this.src)’ >那么这三个主要的配置文件在那里呢?可以切换到/usr/share/doc/heartbeat-2.1.4/目录下查看一下是否有这三个主要的配置文件。650) this.width=650;” onclick=’window.open(“http://blog.51cto.com/viewpic.php?refimg=” + this.src)’ >将上述的三个主要的配置文件复制到/etc/ha.d/目录下。哈哈,三个主要配置的配置文件出来了吧?650) this.width=650;” onclick=’window.open(“http://blog.51cto.com/viewpic.php?refimg=” + this.src)’ >下面依次对三个配置文件进行说明,此外还可以参考Linux-HA附带的安装文档以及配置文件自身的注释。2.1配置authkeys文件 authkeys文件用于heartbeat的鉴权设置,共有三种可用的鉴权方式:crc、md5和sha1。三种方式安全性依次提高,但同时占用的系统资源也依次扩大。crc安全性最低,适用于物理上比较安全的网络,sha1提供最为有效的鉴权方式,占用的系统资源也最多。其配置语句格式如下: auth <number> <number> <authmethod> [<authkey>] 举例说明: auth 1 1 sha1 key-for-sha1 其中键值key-for-sha1可以任意指定,number设置必须保证上下一致。 auth 2 2 crc crc方式不需要指定键值。还是先来看一下authkeys文件的内容吧?文件前面的内容可以直接忽略过去,需要修改的行数并不是很多。主要在最后面。可以看到这四行都默认被注释掉了。650) this.width=650;” onclick=’window.open(“http://blog.51cto.com/viewpic.php?refimg=” + this.src)’ >修改的方法有很多的,最简单直接打开注释就行了,然后保存退出;也可以使用echo命令将要设定的值导入到该文件中;或者使用ssl加密并导入到该文件之中。650) this.width=650;” onclick=’window.open(“http://blog.51cto.com/viewpic.php?refimg=” + this.src)’ >这里使用后两种来验证一下,打开文件,可以看到两种方式都将数据导入到文件中了。在试验过程中,为了节省时间,可以选用非加密传输方式。650) this.width=650;” onclick=’window.open(“http://blog.51cto.com/viewpic.php?refimg=” + this.src)’ >为了文件的安全性,我们要设定该文件的权限为600,修改完成后,要记得查看是否修改成功。650) this.width=650;” onclick=’window.open(“http://blog.51cto.com/viewpic.php?refimg=” + this.src)’ >2、2配置ha.cf文件 ha.cf是heartbeat的主要配置文件,可以对heartbeat的多数性能和状态进行配置。大部分选项的取值可以采用默认值,其中的主要选项及配置方法说明如下: debugfile /var/log/ha-debug:该文件保存heartbeat的调试信息 logfile /var/log/ha-log:heartbeat的日志文件 650) this.width=650;” onclick=’window.open(“http://blog.51cto.com/viewpic.php?refimg=” + this.src)’ >keepalive 2:心跳的时间间隔,默认时间单位为秒deadtime 30:超出该时间间隔未收到对方节点的心跳,则认为对方已经死亡。 warntime 10:超出该时间间隔未收到对方节点的心跳,则发出警告并记录到日志中。650) this.width=650;” onclick=’window.open(“http://blog.51cto.com/viewpic.php?refimg=” + this.src)’ >initdead 120:在某些系统上,系统启动或重启之后需要经过一段时间网络才能正常工作,该选项用于解决这种情况产生的时间间隔。取值至少为deadtime的两倍。 udpport 694:设置广播通信使用的端口,694为默认使用的端口号。650) this.width=650;” onclick=’window.open(“http://blog.51cto.com/viewpic.php?refimg=” + this.src)’ >bcast eth1:设置广播通信所使用的网络接口卡。650) this.width=650;” onclick=’window.open(“http://blog.51cto.com/viewpic.php?refimg=” + this.src)’ >auto_failback on:heartbeat的两台主机分别为主节点和从节点。主节点在正常情况下占用资源并运行所有的服务,遇到故障时把资源交给从节点并由从节点运行服务。在该选项设为on的情况下,一旦主节点恢复运行,则自动获取资源并取代从节点,否则不取代从节点。650) this.width=650;” onclick=’window.open(“http://blog.51cto.com/viewpic.php?refimg=” + this.src)’ >node 定义集群主机的节点号名称650) this.width=650;” onclick=’window.open(“http://blog.51cto.com/viewpic.php?refimg=” + this.src)’ >另外还有一些设置,由于对实验作用不是很大,这里就不进行配置了。baud 19200:设置串行通信的波特率。 serial /dev/ttyS0:选择串行通信设备,用于双机使用串口线连接的情况。如果双机使用以太网连接,则应该关闭该选项。 ping ping-node1 ping-node2:指定ping node,ping node并不构成双机节点,它们仅仅用来测试网络连接。 respawn hacluster /usr/lib/heartbeat/ipfail:指定与heartbeat一同启动和关闭的进程,该进程被自动监视,遇到故障则重新启动。最常用的进程是ipfail,该进程用于检测和处理网络故障,需要配合ping语句指定的ping node来检测网络连接。2、3 配置haresources文件 haresources文件用于指定双机系统的主节点、集群IP、子网掩码、广播地址以及启动的服务等。其配置语句格式如下: node-name network-config <resource-group> 其中node-name指定双机系统的主节点,取值必须匹配ha.cf文件中node选项设置的主机名中的一个,node选项设置的另一个主机名成为从节点。 network-config用于网络设置,包括指定集群IP、子网掩码、广播地址等。resource-group用于设置heartbeat启动的服务,该服务最终由双机系统通过集群IP对外提供。指定主节点服务器为node1.example.com 对外宣称的IP地址为192.168.0.140的服务器提供web服务。650) this.width=650;” onclick=’window.open(“http://blog.51cto.com/viewpic.php?refimg=” + this.src)’ >最后,别忘记修改/etc/hosts文件,保证主备节点服务器之间知道对方的IP地址,保证彼此可以正常通信。650) this.width=650;” onclick=’window.open(“http://blog.51cto.com/viewpic.php?refimg=” + this.src)’ >由于备用节点服务器的配置和主节点服务器的配置基本相同,只有主机名和IP地址不同,这里就省略配置备节点服务器的配置步骤了。三、实验的验证当主备节点都配置完成后,要启动主备节点的heartbeat服务,然后就可以到客户端来验证测试实验成功与否了。有点激动啊!呵呵^_^,如图所示,实验配置是成功的。650) this.width=650;” onclick=’window.open(“http://blog.51cto.com/viewpic.php?refimg=” + this.src)’ >再来到主节点服务器上,查看一下主节点服务器IP地址的变化吧!可以发现,对外宣称的VIP地址绑定在了主节点服务器上的eth0网卡上。650) this.width=650;” onclick=’window.open(“http://blog.51cto.com/viewpic.php?refimg=” + this.src)’ >650) this.width=650;” onclick=’window.open(“http://blog.51cto.com/viewpic.php?refimg=” + this.src)’ >此时,假设由于某些意外原因(手动停止主节点服务器的heartbeat服务),主节点服务器突然宕机了。再来刷新客户端的浏览器,会发现主页内容变成了备节点服务器(这里为了区分客户端访问的是不同的服务器,主备节点服务器的网页内容不同)。650) this.width=650;” onclick=’window.open(“http://blog.51cto.com/viewpic.php?refimg=” + this.src)’ >切换来到备节点服务器上,查看一下备节点服务器IP地址的变化可以发现,对外宣称的VIP地址绑定在了备节点服务器上的eth0网卡上。由此就可以说明双机系统可以实现无缝切换。650) this.width=650;” onclick=’window.open(“http://blog.51cto.com/viewpic.php?refimg=” + this.src)’ >主节点再次启动heartbeat 在这种情况下,主节点将重新绑定VIP地址,备节点web释放该IP地址,并由主节点对外提供服务。在主节点启动heartbeat之后,集群IP地址的释放和绑定有一定的延迟。虽然有一定的延迟,但是集群IP地址的释放和绑定是同步进行的,使用ping命令可以发现集群IP地址一直处于可通状态,该过程并不影响双机系统的可用性。所以该过程仍然是一个无缝切换。为了验证主备节点服务器之间的连通性,可以使用tcpump ?i eth1 udp port 694650) this.width=650;” onclick=’window.open(“http://blog.51cto.com/viewpic.php?refimg=” + this.src)’ > 当你感到悲哀痛苦时,最好是去学些什么东西。

Linux 系统下双机HA的实现

相关文章:

你感兴趣的文章:

标签云: