集群高可用之heartbeat
本人已建立个人博客站点,所以文章也都在那边发表了,想了解一下的,可以点这里:点击打开链接
本文是个人整理,不禁人之转载,转载时请注明出处!!
1) 基础准备,主备节点都需安装
tar -zxvf hearbeat.tar.gz
cd hearbeat
yum-y install *
cd /usr/share/doc/heartbeat-3.0.4/
cpha.cf authkeys haresources /etc/ha.d/ 配置文件需拷贝到默认目录下
2) 认证服务,节点之间的认证配置,修改/etc/ha.d/authkeys ,在主上修改
ddif=/dev/random bs=512 count=1 | openssl md5 #生成密钥随机数
vimauthkeys
auth1
1md5 a4d20b0dd3d5e35e0f87ce4266d1dd64
chmod600 authkeys
3) heartbeat 主配置文件,修改 /etc/ha.d/ha.cf ,在主上修改
bcast eth0 (91行附近,第一个)
node www.centos1.com 一主一备节点,需注意能后被两台主机之间解析
node www.centos2.com
node localhost.localdomain (如果没有这一行,会报错)
解析暂时就写入hosts文件
4) 配置 haresources 文件,在主上修改(底部添加)
www.lql-1.com IPaddr::192.168.66.100/24/eth0:0
www.lql-1.com代表的是主服务器ipaddr是其自带的一个脚本(在/etc/ha.d/resource.d下),是一个网卡启动脚本,后边所跟的,就是定义的虚拟网卡的IP以及子网以及设备
5) 将主三个配置文件拷贝到从上
cd /etc/ha.d/
scp ha.cf authkeys haresources root@www.centos1.com:/etc/ha.d/
6)两台主机都安装nginx
略……(nginx的安装在这里就不再详述)
7) 启动服务进行验证
主:service httpd start
主:service heartbeat start
从:service httpd start
从:service httpd start
插曲!!!
这个地方,启动的时候出了一个错误,很蛋疼的啊,卡了我一个多小时,各种搜索,最后还真是在google里边查到的,先来看报错信息
看到这个我先去谷歌翻译了一下,大概知道了,应该是跟node,或者uname -n这两个有关系,再去看日志文件
这个时候,我想,应该就是这个地方的问题了,又uname -n查看了一下,是localhost.localdomain,知道了问题,但是不知道解决的办法,还是非常急人的
最后看到了一个解决策略
看完感觉表达的并不是很清楚,于是自己尝试。
打开了主配置文件
vim /etc/ha.d/ha.cf
在刚才定义的两个主机名下边,添加node localhost.localdomain 指明了主机名,这样应该就不会打架了吧。
果然,再启动,报错问题就不存在了!!!
同样,对另外一台主机,也进行相同的配置,然后启动。当两台机器都开启之后,虚拟IP就会自动启动了!!(如果只开一个,则eth0:0是不会自动起来的)这是当天搞到夜里两点多才弄清楚的一个问题!!!
更奇妙的则在第二天,同桌小伙伴问我要文档,我说里边有个坑,直接给你,那这个坑就没有意义了(毕竟我踩的那么辛苦,你不也踩踩,让我心里如何平衡,哈哈),也知道他对于技术喜欢钻研,有问题别告诉我答案的人,果然,他说你把那段删了,其他的给我。事情如我所愿,也出我意料,如我所愿的是他也到这个地方之后卡了大半天,出我意料的是,他在问题出现的基础上,给出了第二种的解决办法。我同样记录在下边:
其实报出来的问题,总结就是一句话,主配置文件中定义的node两个域名与本机hostname不一致,所以会报出这个错误。上边我找到的解决办法,是在主配置文件当中,定义出node uname -n 为一致,问题得以解决,那么现在通过修改主机名与其一致,也是一个可行的办法。
修改主机名的方式很多种,这里通过与刚才定义的node,然后写入/etc/hosts之后,重启虚拟机,然后看到主机名变成了www,再启动,就能够启动了。
根据我与同桌讨论,结合报错,得出一个结论。
主配置文件当中node至少有一条定义与uname -n 保持一致,这个报错才会消失无踪!
两个方案都是可以的。这种学习的快乐,以及解决问题,最后发现了问题出现的原因,以及解决问题的思路以及各种办法,真是什么也换不来的。
上接!!
然后查看网卡已经启动了
现在就可以在浏览器当中,通过虚拟IP192.168.66.100来进行访问了
假如说其中一台主机挂掉了(关闭A的网卡)
此时查看一下B主机的网卡,会发现多了个虚拟IP
再到浏览器当中通过虚拟IP访问,仍然没有问题
然后再把A主机的网卡启动链接,回来,能够看到两台主机都有了虚拟IP
现在可以通过脚本对本机的访问检测,如果nginx服务挂了(通过访问网站的返回值判断),那么heartbeat也关闭,另外一台的整个服务就能够正常运转了
#!/bin/bash
function check_code {
url=$1
curl -o /dev/null -s -w%{http_code} $url
}
web_code=$( check_code 10.10.10.100 )
if [ "$web_code" !="200" ]
then
service heartbeat stop
fi
记得脚本规范化,放到/usr/local/script下
将脚本添加进定时任务
cronta -e (添加)
*/1 * * * * bash /usr/local/script/nginx_check.sh
保存退出(默认每分钟检测一次)
回头给脚本添加执行权限,如果没有,写在定时任务里有时候不会执行!
chmod +x /usr/local/script/nginx_check.sh
service crond restart
chkconfig crond on
到这里,基本上就全部配置妥当了!!!