双机热备的实现

环境:

主节点:node1   node1.test.com      eth0:192.168.0.20  eth1:192.168.1.20

从节点:node2   node2.test.com      eth0:192.168.0.99  eth1:192.168.1.99

测试机:192.168.0.55

一、安装前的准备

++以下是在node1上的操作:

首先修改/etc/hosts文件,保持两个节点改文件相同。如下:

[root@node1 ~]#vim /etc/hosts

# Do not remove the following line, or various programs

# that require network functionality will fail.

127.0.0.1       localhost.localdomain   localhost

::1             localhost6.localdomain6 localhost6

192.168.0.99    node2.test.com  node2   

192.168.0.20    node1.test.com  node1   

192.168.1.99    node2.test.com  node2   

192.168.1.20    node1.test.com  node1

  

拷贝至node2

[root@node1 ~]# scp  /etc/hosts 192.168.0.99:/etc/

安装httpd服务

[root@node1 ~]# yum -y install httpd 

[root@node1 ~]# echo "node1 test page" > /var/www/html/index.html 

[root@node1 ~]# service httpd start

Starting httpd:                                            [  OK  ]

[root@node1 ~]# 

测试是否可用

关闭httpd服务禁止开机启动

[root@node1 ~]# service httpd stop

Stopping httpd:                                            [  OK  ]

[root@node1 ~]# chkconfig httpd off

[root@node1 ~]# 

node2上按照以上步骤进行操作

安装httpd服务

[root@node2 ~]# yum -y install httpd 

[root@node2 ~]# echo "node2 test page" > /var/www/html/index.html 

[root@node2 ~]# service httpd start

Starting httpd:                                            [  OK  ]

[root@node2 ~]# 

 

测试是否可用

关闭httpd服务禁止开机启动

[root@node12~]# service httpd stop

Stopping httpd:                                            [  OK  ]

[root@node2~]# chkconfig httpd off

[root@node2 ~]# 

二、安装、配置heartbeat

heartbeat需要安装的软件包如下:                      

heartbeat-pils-2.1.4-10.el5.i386.rpm

heartbeat-stonith-2.1.4-10.el5.i386.rpm

heartbeat-2.1.4-9.el5.i386.rpm            

heartbeat-devel-2.1.4-9.el5.i386.rpm      

heartbeat-gui-2.1.4-9.el5.i386.rpm        

libnet-1.1.4-3.el5.i386.rpm

heartbeat-ldirectord-2.1.4-9.el5.i386.rpm  

perl-MailTools-1.77-1.el5.noarch.rpm

将以上安装包全部安装

1、安装heartbeat

 

 

 

[root@node1 ~]# yum -y --nogpgcheck localinstall *.rpm

 

[root@node2 ~]# yum -y --nogpgcheck localinstall *.rpm

 

2拷贝三个文件到/etc/ha.d/

[root@node1 ~]# cp /usr/share/doc/heartbeat-2.1.4/authkeys  /etc/ha.d/

[root@node1 ~]# cp /usr/share/doc/heartbeat-2.1.4/ha.cf   /etc/ha.d/

[root@node1 ~]# cp /usr/share/doc/heartbeat-2.1.4/haresources  /etc/ha.d/

[root@node1 ha.d]# ls

authkeys  ha.cf  harc  haresources  rc.d  README.config  resource.d  shellfuncs

[root@node1 ha.d]# 

3、编辑主配置文件

[root@node1 ha.d]# vim  ha.cf           #打开以下各行或保证有如下行

debugfile /var/log/ha-debug           #调试日志(调试时建议打开)

logfile /var/log/ha-log            #heartbeat的日志文件

keepalive 2               #心跳的时间间隔,默认时间单位为秒

deadtime 30          #超出该时间间隔未收到对方节点的心跳,则认为对方已经死亡。

warntime 10       #超出该时间间隔未收到对方节点的心跳,则发出警告并记录到日志中。

initdead 120  #在某些系统上,系统启动或重启之后需要经过一段时间网络才能正常工作, 

           #该选项用于解决这种情况产生的时间间隔。取值至少为deadtime的两倍。

udpport 694   #设置广播通信使用的端口,694为默认使用的端口号。

bcast eth1 #设置广播通信所使用的网络接口卡。(我们这里设置为eth1,专门用来探测心 

          #跳

auto_failback on    #是否允许主节点恢复,自动资源从节点获取。这里on为开启

node    node1   #用于指定主从节点

node    node2

4、编辑 haresources 

资源文件,指定主节点,VIP,启动的服务等

格式:node-name network-config 

node-name指定双机系统的主节点

network-config用于网络设置,包括指定VIP、子网掩码、广播地址

resource-group 指定使用VIP向外提供的服务,可以为多个

[root@node1 ha.d]# vim haresources 

  node1  192.168.0.100    httpd        #在最后一行添加

5、编辑authkeys文件

[root@node1 ha.d]#vim  authkeys  #其中authkeys用于两个节点用来验证的文件,其中有三   

auth 3                           #种算法如下:

#1 crc

#2 sha1 HI!      #三种算法安全性逐渐增强,我们这里选择的md5Hello为密码,也可以  

3 md5 Hello!     #自己使用生成的md5密码。

               

[root@node1 ha.d] chmod 600 authkeys         #一定保证authkeys的权限模型为600

6、将三个文件拷贝到node2

[root@node1 ha.d]# scp  authkeys  haresources  ha.cf  192.168.0.99:/etc/ha.d/

7、记得拷贝httpd脚本到/etc/ha.d/resource.d/,以便更快的查找到。

[root@node1 ha.d]# cp /etc/init.d/httpd  resource.d/

[root@node2 ~]# cp /etc/init.d/httpd  /etc/ha.d/resource.d/

三、实验的测试

1、启动heartbeat (先主节点后从节点)

[root@node1 ~]# service heartbeat start

[root@node2 ~]# service heartbeat start

2、查看服务

[root@node1 ~]# netstat  -tnlp | grep :80 

tcp           0      0 :::80           :::*         LISTEN      17058/httpd         

[root@node1 ~]# netstat  -tunlp | grep :694

udp          0       0 0.0.0.0:694     0.0.0.0:*               17200/heartbeat: wr 

[root@node1 ~]# 

3、查看ipVIP)这里出现了eth0:0 是我们指定的VIP

[root@node1 ~]# ifconfig

eth0      Link encap:Ethernet  HWaddr 00:0C:29:75:13:19  

          inet addr:192.168.0.20  Bcast:192.168.0.255  Mask:255.255.255.0

          inet6 addr: fe80::20c:29ff:fe75:1319/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:38036 errors:0 dropped:0 overruns:0 frame:0

          TX packets:246490 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000 

          RX bytes:3743400 (3.5 MiB)  TX bytes:341326043 (325.5 MiB)

          Interrupt:169 Base address:0x2000 

eth0:0    Link encap:Ethernet  HWaddr 00:0C:29:75:13:19  

          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:169 Base address:0x2000 

eth1      Link encap:Ethernet  HWaddr 00:0C:29:75:13:23  

          inet addr:192.168.1.20  Bcast:192.168.1.255  Mask:255.255.255.0

4、访问测试

 

 

 

四、模拟宕机(断开node1网卡)

 我在断开网卡后2秒查看node2如下:

1、查看ipVIP

[root@node2 ~]# ifconfig

eth0      Link encap:Ethernet  HWaddr 00:0C:29:50:06:DD  

          inet addr:192.168.0.99  Bcast:192.168.0.255  Mask:255.255.255.0

          inet6 addr: fe80::20c:29ff:fe50:6dd/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:278657 errors:0 dropped:0 overruns:0 frame:0

          TX packets:122244 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000 

          RX bytes:346575843 (330.5 MiB)  TX bytes:13084319 (12.4 MiB)

          Interrupt:169 Base address:0x2000 

eth0:0    Link encap:Ethernet  HWaddr 00:0C:29:50:06:DD  

          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:169 Base address:0x2000 

eth1      Link encap:Ethernet  HWaddr 00:0C:29:50:06:E7  

          inet addr:192.168.1.99  Bcast:192.168.1.255  Mask:255.255.255.0

2、查看端口

[root@node2 ~]# netstat  -tnlp | grep :80

tcp        0      0 0.0.0.0:802         0.0.0.0:*      LISTEN      1892/rpc.statd      

tcp        0      0 :::80                :::*          LISTEN      16765/httpd         

[root@node2 ~]# netstat  -tunlp | grep :694

udp         0    0        0.0.0.0:694         0.0.0.0:*      16397/heartbeat: wr 

[root@node2 ~]# 

3、访问测试

 

 

五、模拟恢复(重新接上node1网线)

等待一段时间后资源又回到了node1上 (略去不写,因为与三中的内容一致)

访问如下: