内容有点多,但是非常详细,包括出错怎么解决,都有,花了将近3天时间,因为安装heartbeat2.1.4 出错不知道怎么解决,瞎忙了一天,没办法,退而求其次用2.1.3,源码编译安装。一步步按照我的步骤下来,应该能基本掌握heartbeat
WEB高可用实验
rhel 6.4 32bit
ha web
node1,node2
节点名称必须与#uname -n 结果一致,heartbeat信息靠节点名称实现,所以要对所有节点进行本地解析,DNS服务靠不住哦,要配置/etc/hosts。
各节点ssh互信通信
集群各节点时间必须同步
规划:
HA1:172.16.10.12/16
HA2:172.16.10.13/16
VIP:172.16.10.10/16
开始操作:
1,主机名
HA1:
#setup 设定IP
#hostname node1.sweifan.com
#vim /etc/sysconfig/network
修改主机名为 node1.sweifan.com
HA2:
#setup 设定IP
#hostname node2.sweifan.com
#vim /etc/sysconfig/network
修改主机名为 node2.sweifan.com
2,SSH互信通信:因为HA中对一个节点的操作要在另一个好的节点上完成控制
HA1:
生成一对秘钥文件id_rsa和id_rsa.pub
# ssh-keygen -t rsa -f ~/.ssh/id_rsa -P ''
复制公钥到另一台主机HA2
# ssh-copy-id -i ~/.ssh/id_rsa.pubroot@172.16.10.13
输入yes,输入HA1的root密码
然后测试一下:
# ssh 172.16.10.13 'ifconfig'
看是否显示为HA2的IP
HA2:
生成一对秘钥文件id_rsa和id_rsa.pub
# ssh-keygen -t rsa -f ~/.ssh/id_rsa -P ''
复制公钥到另一台主机HA1
# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.10.12
输入yes,输入HA1的root密码
然后测试一下:
# ssh 172.16.10.12 'ifconfig'
看是否显示为HA1的IP
3,主机名称解析:因为heartbeat通信靠主机名
HA1:
#vim /etc/hosts
添加:
172.16.10.12 node1.sweifan.com node1
172.16.10.13 node2.sweifan.com node2
复制hosts到HA2
# scp /etc/hosts node2:/etc/
4,配置时间同步:三秒检查三次结点是否在线,然后stonith,时差5s咋搞?这里我用HA1做NTP时间服务器,HA2同步HA1。
注:我的虚拟机暂时不能上网,因为选择了桥接主机所在的MicrosofitLoopback网卡,构成了一个局域网环境
HA1 NTP服务器配置:
#vim /etc/ntp.conf
修改三点:
1.找到# Permit time synchronization with our time source,注释掉原有的行,然后添加:(我觉得这一行是不是不需要添加?)
restrict 172.16.0.0 mask 255.255.0.0nomodify notrap
2.找到# Hosts on local network are less restricted.添加:
restrict 172.16.0.0 mask 255.255.0.0nomodify notrap
3.找到# Undisciplined Local Clock… 取消注释:
server 127.127.1.0 # local clock
fudge 127.127.1.0 stratum 10
# service ntpd restart
等一会NTP服务器才起作用
H2 时间同步到HA1:
# ntpdate 172.16.10.12
设置任务计划,5分钟同步一次,任务计划保存在/var/spool/cron/root,手动方式比较粗暴。要注意你的ntpdate在哪里,使用#which ntpdate 查看,我的在/usr/sbin/ntpdate
#crontab -e
*/5 * * * * /sbin/ntpdate 172.16.10.12 &>/dev/null
任务计划每执行一次就会给管理员发一封邮件,所以把送到null
5,安装heartbeat。 EPEL 站点下载
Redhat rpm包:redhat6 i686里边只有3个包,不知道为什么,最后选的i386
http://dl.fedoraproject.org/pub/epel/6/i386/repoview/letter_h.group.html
6个包
heartbeat - Heartbeat subsystem forHigh-Availability Linux
heartbeat-devel - Heartbeat developmentpackage
heartbeat-gui - Provides a gui interfaceto manage heartbeat clusters
heartbeat-ldirectord - Monitor daemon for maintaining highavailability resources。为ipvs高可用提供规则自动生成及后端RS健康状况检查的组件
heartbeat-pils - Provides a generalplugin and interface loading library
heartbeat-stonith - Provides an interface to Shoot The OtherNode In The Head
还要下载
perl-MailTools-1.77-1.el5.noarch
libnet-1.1.6-7.el5.i386
http://rpm.pbone.net/index.php3/stat/4/idpl/27426962/dir/centos_5/com/perl-TimeDate-1.16-1.el5.centos.noarch.rpm.html
perl-TimeDate-1.16-1.el5.centos.noarch.rpm
http://ceph.com/rpm/el6/noarch/
ceph-deploy-1.5.20-0.noarch.rpm
下载了 以上的包但是还是安装不上,说是缺少依赖
FUCK 没办法了,只能用网络yum源,本地的没用。
发现:我的是Redhat6.4,v2版本的heartbeat相对6.4来说是很老的版本了,像epel为redhat6提供的是三个heartbeat 3的包了
所以换成heartbeat2.1.3版本,2.1.4版本没有解决方法!!!!!
所需软件:
Heartbeat2.1.3.tar.gz 源码包
还需要:
http://dl.fedoraproject.org/pub/epel/6/i386/repoview/letter_l.group.html 找到下边libnet包
libnet-1.1.6-7.el6.i686
libnet-devel-1.1.6-7.el6.i686
#rpm -ivh libnet-1.1.6-7.el6.i686.rpm
下面是系统自带包使用本地yum源装。我是RedhatEnterprise 6.4
使用
#yum install XXX 安装
libtool-ltdl-2.2.6-15.5.el6.i686
libtool-2.2.6-15.5.el6.i686
glib2-devel-2.22.5-7.el6.i686)
libxml2-devel-2.7.6-8.el6_3.4.i686
bzip2-devel-1.0.5-7.el6_0.i686
Ldirector服务需要的依赖几个perl包:
perl-Socket6.i686 0.23-3.el6
perl-IO-Socket-INET6-2.56-4.el6.noarch
perl-MailTools-2.04-4.el6.noarch
perl-TimeDate-1.16-11.1.el6.noarch
安装heartbeat:
#tar zxvf heartbeat-2.1.3.tar.gz
#cd heartbeat-2.1.3
#./ConfigureMe configure
如果有错误证明有依赖包没装全,没问题则如下图
#groupadd haclient
#useradd –g haclient hacluster
#./ConfigureMe make --enable-fatal-warnings=no
报错:
错误解决:
http://blog.csdn.net/mathewsking/article/details/8477356
下面都要先修改一下:
然后在make,否则报错
如报
pils.c:244: error: initialization from incompatible pointer type
pils.c:245: error: initialization from incompatible pointer type
gmake[2]: *** [pils.lo] 错误 1
gmake[2]: Leaving directory/mnt/hgfs/sharedfiles/heartbeat/heartbeat2.1.3/heartbeat-2.1.3/lib/pils'
gmake[1]: *** [all-recursive] 错误 1
gmake[1]: Leaving directory ` /mnt/hgfs/sharedfiles/heartbeat/heartbeat2.1.3/heartbeat-2.1.3/lib'
gmake: *** [all-recursive] 错误 1
则将/解压路径/heartbeat-2.1.3/lib/pils里的Makefile中的所有-Werror删除。vim 修改了2处
如报
cc1: warnings being treated aserrors
stonith_signal.h:34:error:'stonith_signal_set_simple_handler' defined but not used
gmake[4]: *** [apcmaster.lo]错误 1
gmake[4]: Leaving directory`/root/heartbeat-2.1.3/lib/plugins/stonith'
gmake[3]: *** [all-recursive]错误 1
gmake[3]: Leavingdirectory`/root/heartbeat-2.1.3/lib/plugins/stonith'
gmake[2]: *** [all-recursive]错误 1
gmake[2]: Leavingdirectory`/root/heartbeat-2.1.3/lib/plugins'
gmake[1]: *** [all-recursive]错误 1
gmake[1]: Leavingdirectory`/root/heartbeat-2.1.3/lib'
make: *** [all-recursive] 错误 1
则将/解压路径/heartbeat-2.1.3/lib/plugins/stonith里的Makefile中的所有-Werror删除
如报:
cc1: warnings being treated as errors
client_lib.c:1850: error: 'display_orderQ'defined but not used
gmake[2]: *** [client_lib.lo]错误 1
gmake[2]: Leaving directory`/root/heartbeat-2.0.7/lib/hbclient'
gmake[1]: *** [all-recursive]错误 1
gmake[1]: Leaving directory`/root/heartbeat-2.0.7/lib'
make: *** [all-recursive] 错误 1
则将/root/heartbeat-2.0.7/lib/hbclient里的Makefile中的所有-Werror删除
如报
cc1: warnings being treated as errors
conf_lex.c:1195: 错误:‘input’定义后未使用
gmake[2]: *** [recoverymgrd-conf_lex.o]错误 1
gmake[2]: Leaving directory`/root/heartbeat-2.0.7/telecom/recoverymgrd'
gmake[1]: *** [all-recursive]错误 1
gmake[1]: Leaving directory `/root/heartbeat-2.0.7/telecom'
make: *** [all-recursive] 错误 1
则将/root/heartbeat-2.0.7/telecom/recoverymgrd里的Makefile中的所有-Werror删除
如报
chownhacluster/var/lib/heartbeat/cores/hacluster
chown: 无效的用户:"hacluster"
gmake[2]: [install-exec-local]错误 1 (忽略)
chmod700/var/lib/heartbeat/cores/hacluster
gmake[2]: Nothing to be donefor`install-data-am'.
gmake[2]: Leavingdirectory`/root/heartbeat-2.0.7'
gmake[1]: Leavingdirectory`/root/heartbeat-2.0.7'
则证明没添加用户及组.
按照上面的添加用户及组后再次
# ./ConfigureMe make--enable-fatal-warnings=no
大概6分钟
OK
#make install
出错:
cp: 无法获取"/usr/sbin/ha_logger" 的文件状态(stat):没有那个文件或目录
gmake[3]: *** [install-exec-hook] 错误 1
gmake[3]: Leaving directory `/mnt/hgfs/sharedfiles/heartbeat/heartbeat2.1.3/heartbeat-2.1.3/logd'
gmake[2]: *** [install-exec-am] 错误 2
gmake[2]: Leaving directory`/mnt/hgfs/sharedfiles/heartbeat/heartbeat2.1.3/heartbeat-2.1.3/logd'
gmake[1]: *** [install-am] 错误 2
gmake[1]: Leaving directory`/mnt/hgfs/sharedfiles/heartbeat/heartbeat2.1.3/heartbeat-2.1.3/logd'
make: *** [install-recursive] 错误 1
没办法解决,网上也搜不到,后来把压缩包考到/home/hacluster 重新走一边上边的步骤,安装成功
#cp doc/{authkeys,haresources,ha.cf} /etc/ha.d/
#cp ldirectord/ldirectord.cf /etc/ha.d/
OK终于TMD安装完毕
6,heartbeat配置
三个配置文件 /etc/ha.d
1.秘钥文件,600权限,authkeys
2.heartbeat服务的配置 ha.cf
3.资源管理配置文件:V2版提供 hareosurces 和CRM
hareosurces:haresource
这三个配置文件在/usr/share/doc/heartbeat-2.1.3/ 有样例,直接复制过来,编译安装的话,就不用复制,ha.d里边有
首先,注意权限
# chmod 600 authkeys
先生成一列随机数待会会用到:
#dd if=/dev/random count=1 bs=512|md5sum
# vim authkeys
auth 1,表示对应下边1的方法,md5后边跟的是sourt,杂质
#vimha.cf
修改:
#vim haresources
每一块表示一个节点的信息。记得么 就是一个节点的三个资源:节点名、IP、文件系统
node1 VIP 资源代理(脚本)::参数1::参数2::参数3
主节点名 服务IP Filesystem ::挂载设备::挂载点::文件系统类型
资源代理(脚本)在/etc/ha.d/resource.d/,和/usr/lib/heartbeat
开始配置http服务:
(1)测试一下http服务,没问题,所有节点全部停掉,而且不能让他开机自动启动
#service httpd stop
#chkconfig httpd off
这里还注意一下,都是用host-only模式,虚拟网络编辑器,把host-only网段设置到172.16.0.0/16,然后主机上修改Vmnet1 为172.16.10.1,以符合我的规划。如果桥接的话,会产生大量日志,硬盘狂转
(2)
# vimharesources
(3)复制刚修改的三个文件到node2
#scp -p authkeys haresources ha.cf node2:/etc/ha.d/ -p:保持原有属性。
可以启动服务了
#service heartbeat start
在node1上远程启动node2
#ssh node2 'service heartbeat start'
然后测试:node1故障,看node2能否启用
当然如果我们手动dowm掉node1,实现转移需要很多时间,这里heartbeat提供了测试脚本能够实现直接转移
#cd /usr/lib/heartbeat 有个脚本 hb_standby
在node1上执行
# ./hb_standby,然后查看日志,如下图
同样,在node2 执行
#/usr/lib/heartbeat/hb_standby 那么node2就编程备用结点,node1是主节点了,转移回去了。
关闭时要注意,在主节点远程关掉备用结点,再在主节serviceheartbeat stop.
现在启用另一台主机(Director),提供一个NFS文件系统,让两个结点挂载,确保 SElinux关闭
#setenforce 0
# vim/etc/selinux/config 改为disabled
Director主机:
#mkdir-pv /home/web/htdocs
#vim index.html
输出目录:
#vim /etc/exports
查看:
# showmount-e 172.16.10.11转到HA1,把heartbeat服务停掉,注意是有顺序的啊,在node1,远程停掉node2,再停掉node1:
#ssh node2 '/etc/init.d/heartbeat stop'
#service heartbeat stop
#sshnode2 'setenforce 0'
#setenforce0
node1
新建/mnt/web ,把NFS挂载到这个文件,试验一下看能否挂载成功
#mount 172.16.10.11:/home/web/htdocs /mnt/web
查看一下里边是否有index.html,有说明挂载成功,卸掉
# umount /mnt/web
注意:所有的操作都不能是你手动
#vim /etc/ha.d/haresources
注意文件系统挂载要在服务之前,要不然服务启动了没有文件
# scp /etc/ha.d/haresourcesnode2:/etc/ha.d/
# serviceheartbeat start
# ssh node2 'serviceheartbeat start'
# /usr/lib/heartbeat/hb_standby 切换备用结点
最后在强调一遍,关闭heartbeat时,先umount挂载的NFS,然后要在主节点对备用结点远程关闭,然后在关闭主节点