(1)原理:Web2服务器会通过VMnet3来测试Web1的心跳,当Web1服务器当机后,Web2在尝试几次心跳测试,如果仍然没有测试到心跳信息就认为Web1当掉了。此时就把Web1上的资源给拿过来。资源包括ip,httpd,网页文件。为了达到演示效果,这里的实验中网页文件我就直接使用不同的内容。
(2)需要的额外软件包:
heartbeat-2.1.4-9.el5.i386.rpm heartbeat-pils-2.1.4-10.el5.i386.rpm
heartbeat-devel-2.1.4-9.el5.i386.rpm heartbeat-stonith-2.1.4-10.el5.i386.rpm
heartbeat-gui-2.1.4-9.el5.i386.rpm libnet-1.1.4-3.el5.i386.rpm
配置注意事项:一切服务在集群上,不能手动启动。也不能让它开机自动启动
(3)配置网络环境,及修改主机名
1)在Web1上
① 配置ip,将eth1的网卡类型设置为VMnet3。
修改/etc/sysconfig/network-scripts/ifcfg-eth0 文件。
#vim /etc/sysconfig/network-scripts/ifcfg-eth0
修改 BOOTPROTL=static
添加 IPADDR=192.168.0.111
NETMASK=255.255.255.0
同样,修改/etc/sysconfig/network-scripts/ifcfg-eth1
#vim /etc/sysconfig/network-scripts/ifcfg-eth1
修改 BOOTPROTL=static
添加 IPADDR=10.0.11.11
NETMASK=255.0.0.0
重启网络服务:#servcie network restart
-------------------------
② 修改主机名
#vim /etc/sysconfig/network
修改:HOSTNAME=node1.hanlenry.com
#hostname node1.hanlenry.com
---------------------------
2)在Web2上
① 配置ip,将eth1的网卡类型设置为VMnet3。
修改/etc/sysconfig/network-scripts/ifcfg-eth0 文件。
#vim /etc/sysconfig/network-scripts/ifcfg-eth0
修改 BOOTPROTL=static
添加 IPADDR=192.168.0.158
NETMASK=255.255.255.0
同样,修改/etc/sysconfig/network-scripts/ifcfg-eth1
#vim /etc/sysconfig/network-scripts/ifcfg-eth1
修改 BOOTPROTL=static
添加 IPADDR=10.0.11.12
NETMASK=255.0.0.0
重启网络服务:#servcie network restart
-------------------------
② 修改主机名
#vim /etc/sysconfig/network
修改:HOSTNAME=node1.hanlenry.com
#hostname node2.hanlenry.com
(4)为了方便使用ssh,使用ssh时不需要输入密码。于是做下面操作:
1)在Web1上
首先生成私钥:
#ssh-keygen -t rsa
拷贝公钥到Web2上
#ssh-copy-id -i .ssh/id_rsa.pub root@node2
在Web1上查看Web2的ip。
#ssh node2 -- 'ifconfig'
2)在node2上
#ssh-keygen -t rsa
#ssh-copy-id -i .ssh/id_rsa.pub root@node1
#ssh node1 -- 'ifconfig'
(5)安装httpd
在Web1上:
#yum install httpd
#vim /var/www/html/index.html
This is the node1’s web page
在Web2上:
#yum install httpd
#vim /var/www/html/index.html
This is the node2’s web page
-------------------------------------------------
(6) 为了检验我们的配置是否正常,我们来测试一下,你只要能确保你配置的是正确的,这一步可以不做。如果你做了这一步,测试完成后,要把httpd服务关闭,并且关闭开机启动。
在node1上:#service httpd start
在node2上:#service httpd start
在地址栏中输入ip地址进行测试,如图:
注意:再次强调,测试结束后,关闭httpd服务,并且关闭自动启动
---------------------------------------------------
(7)安装heartbeat
我把rpm包放在/root/heartbeat 中,heartbeat有三个配置文件:
/etc/ha.d/ha.cf,有关心跳信息的定义
/etc/ha.d/haresources,本地的最简单的基于纯文本文件的CRM(集群资源管理器)
/etc/ha.d/authkeys ,实现两个节点传递心跳信息时,进行签名。
1) 在Web1上安装heartbeat:
#cd /root/heartbeat
#yum localistall *.rpm -y --nogpgcheck
在Web2上安装heartbeat:
#cd /root/heartbeat
#yum localinstall *.rpm -y --nogpgcheck
----------------------------------------------------------------------------------
2)在Web1上:
#cd /usr/share/doc/heartbeat-2.1.4/
#cp ha.cf haresources authkeys /etc/ha.d
#cd /etc/ha.d
#vim ha.cf
添加:bcast eth1
node node1.a.org
node node2.a.org
-------------------------------------------------
#vim authkeys
auth 2
2 sha1 29jfajfiwe //sha1后面的东西你可以随便写。
补充:
( 生成随机数:#dd if=/dev/urandom bs=512 count1 |md5sum)
修改一下权限:
#chmod 400 authkeys
-----------------------
#vim haresources
添加:node1.a.org 192.168.0.12/24/eth0/192.168.0.255 httpd
其中node1.a.org 为主节点
192.168.0.11 为流动地址,也就是Web1上的资源。
httpd 表示在流动ip上提供的服务
--------------------------
3)在Web1上
# cd /usr/lib/heartbeat
# ls
# ./ha_propagate //此脚本可以为Web2生成authkeys,ha.cf文件,我们只需要在手动拷贝一下haresources到Web2。
#scp haresources node2:/etc/ha.d
启动heartbeat;
# /etc/init.d/heartbeat start
4)在Web1上,开启Web2的heartbeat。
#ssh node2 -- '/etc/init.d/heartbeat start'
------------------------------------------
(8)你访问的时候输入流动ip(192.168.0.12),此时因为Web1是主节点,所以访问的是Web1的网站信息。如图所示:
-------------------------------------
(9)测试,我们将web1的服务停掉
#/etc/init.d/heartbeat stop
此时访问的就是Web2 的页面内容,如图:
并且此时你可以用ifconfig来查看流动ip在哪个服务器上。此时流动ip是在Web2服务器上。
--------------------
(10) 我们也可以使用heartbeat提供的脚本来测试。
#/etc/init.d/heartbeat start
#cd /usr/lib/heartbeat
# ./hb_standby 把主节点让出去
此时主节点就是Web2,因此你访问的时候,应该就是Web2的页面内容了。
# ./hb_takeover 把主节点夺回来
此时做同样地测试看看结果。那此时就会友成为Web1的页面内容。
是不是很神奇呀!