集群高可用之heartbeat

版权声明:版权归属于eryajf.net,如欲有更多交流,可以访问个站:http://eryajf.net。未经授权,禁止转载。 https://blog.csdn.net/eryajf/article/details/77488558

集群高可用之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

    集群高可用之heartbeat

                  chmod600  authkeys

 

3) heartbeat 主配置文件,修改 /etc/ha.d/ha.cf ,在主上修改

         bcast   eth0         (91行附近,第一个)

         node    www.centos1.com                 一主一备节点,需注意能后被两台主机之间解析

         node    www.centos2.com

         node    localhost.localdomain   (如果没有这一行,会报错)

集群高可用之heartbeat

          解析暂时就写入hosts文件

集群高可用之heartbeat

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里边查到的,先来看报错信息

集群高可用之heartbeat

         看到这个我先去谷歌翻译了一下,大概知道了,应该是跟node,或者uname -n这两个有关系,再去看日志文件

集群高可用之heartbeat

         这个时候,我想,应该就是这个地方的问题了,又uname -n查看了一下,是localhost.localdomain,知道了问题,但是不知道解决的办法,还是非常急人的

         最后看到了一个解决策略

集群高可用之heartbeat

         看完感觉表达的并不是很清楚,于是自己尝试。

         打开了主配置文件

         vim  /etc/ha.d/ha.cf

         在刚才定义的两个主机名下边,添加node    localhost.localdomain      指明了主机名,这样应该就不会打架了吧。

   集群高可用之heartbeat

         果然,再启动,报错问题就不存在了!!!

 集群高可用之heartbeat

         同样,对另外一台主机,也进行相同的配置,然后启动。当两台机器都开启之后,虚拟IP就会自动启动了!!(如果只开一个,则eth0:0是不会自动起来的)这是当天搞到夜里两点多才弄清楚的一个问题!!!

 

         更奇妙的则在第二天,同桌小伙伴问我要文档,我说里边有个坑,直接给你,那这个坑就没有意义了(毕竟我踩的那么辛苦,你不也踩踩,让我心里如何平衡,哈哈),也知道他对于技术喜欢钻研,有问题别告诉我答案的人,果然,他说你把那段删了,其他的给我。事情如我所愿,也出我意料,如我所愿的是他也到这个地方之后卡了大半天,出我意料的是,他在问题出现的基础上,给出了第二种的解决办法。我同样记录在下边:

         其实报出来的问题,总结就是一句话,主配置文件中定义的node两个域名与本机hostname不一致,所以会报出这个错误。上边我找到的解决办法,是在主配置文件当中,定义出node uname -n 为一致,问题得以解决,那么现在通过修改主机名与其一致,也是一个可行的办法。

         修改主机名的方式很多种,这里通过与刚才定义的node,然后写入/etc/hosts之后,重启虚拟机,然后看到主机名变成了www,再启动,就能够启动了。

         根据我与同桌讨论,结合报错,得出一个结论。

         主配置文件当中node至少有一条定义与uname  -n 保持一致,这个报错才会消失无踪!

两个方案都是可以的。这种学习的快乐,以及解决问题,最后发现了问题出现的原因,以及解决问题的思路以及各种办法,真是什么也换不来的。


上接!!

然后查看网卡已经启动了

   集群高可用之heartbeat

现在就可以在浏览器当中,通过虚拟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

         到这里,基本上就全部配置妥当了!!!

上一篇:关于MFC的多线程类 CSemaphore,CMutex,CCriticalSection,CEvent


下一篇:CUDA实践指南(九)