欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

集群高可用之heartbeat

程序员文章站 2022-07-13 09:32:15
...

集群高可用之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  aaa@qq.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

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