CentOS6.5 heartbeat高可用集群的详解及工作流程

简介:

 Linux HA Cluster高可用服务器集群,所谓的高可用不是主机的高可用,而是服务的高可用。


   什么叫高可用:一个服务器down掉的可能性多种多样,任何一个可能坏了都有可能带来风险,而服务器离线通常带来的代价是很大的,尤其是web站点,所以当某一台提供服务的的服务器down掉不至于服务终止的就叫高可用。

  什么叫心跳:就是将多台服务器用网络连接起来,而后每一台服务器都不停的将自己依然在线的信息很简短很小的通告给同一个网络中的备用服务器的主机,告诉其实主机自己依然在线,其它服务器收到这个心跳信息就认为本机是在线的,尤其是主服务器。

   心跳信息怎么发送,由谁来收,其实就 是进程中的通信两台主机是没法通信的,只能利用网络功能,通过进程监听在某一套接字上,实现数据发送,数据请求,所以多台服务器就得运行同等的进程,这两 个进程不停的进行通信,主节点(主服务器)不停的向对方同等的节点发送自己的心跳信息,那这个软件就叫高可用的集群的基准层次,也叫心跳信息传递层以及事 物信息的传递层,这是运行在集群中的各节点上的进程,这个进程是个服务软件,关机后需要将其启动起来,主机间才可以传递信息的,一般是主节点传给备节点。

   所谓的资源:以web为例,vip是资源,web服务也是资源,还有网页面也是资源,一个服务包括多个资源,而像web的共享存储也是资源等等,不同的服务所需要的资源也是不同的,而共享存储是高可用集群中最难解决的问题。

如是主节点挂了,多个备节点怎么样来选择一个备节点来做为提供服务的一个节点呢,而这种应该选择哪个备用节点来做为提供服务的机制就叫做集群事物决策的过程

   ha_aware:如果一个应用程序自己能够利用底层心跳信息传递层的功能完成集群事物决策的过程的软件就叫ha_aware。

   DC:Designated Coordinator选定的协调员,当DC所在的主机挂了就会先选出一个DC,再由DC做出事物的决策。注意:在高可用集群中最核心的、最底层的管理的单位叫资源,把资源组合在一起来组合成一个服务。

   高可用集群中任何资源都不应该自行启动,而是由CRM管理启动启动的;
   CRM:Cluster Resources Manager集群资源管理,真正做出决策的是CRM。


   heartbeat v1版时就有了资源管理的概念,而v1版的资源就是heartbeat自带的,叫haresources,这个文件是个配置文件;而这个配置文件接口就叫haresources;
   当heartbeat v2第二版的 时候,heartbeat被做了很大的改进,自己可以做为一个独立进程来运行,并而可以通过它接收用户请求,它就叫crm,在运行时它需要在各节点上运行 一个叫crmd的进程,这个进程通常要监听在一个套接字上,端口就是5560,所以服务器端叫crmd,而客户端叫crm(可以称为crm shell),是个命令行接口,通过这个命令行接口就可以跟服务器端的crm通信了,heartbeat也有它的图形化界面工具,就叫 heartbeat-GUI工具,通过这个界面就可以配置进行。
   第三版heartbeat v3,被独立成三个项目heartbeat、pacemaker(心脏起博器)、cluster-glue(集群的贴合器),架构分离开来了,可以结合其它的组件工作了。

  RA:resource agent资源代理,其 实就是能够接收CRM的调度用于实现在节点上对某一个资源完成管理的工具,这个管理的工具通常是脚本,所以我们通常称为资源代理。任何资源代理都要使用同 一种风格,接收四个参数:{start|stop|restart|status},包括配置IP地址的也是。每个种资源的代理都要完成这四个参数据的输 出。
   当某一个节点出现故障时,其上面的资源被自动转移到其它正常的备用节点上并启动的这个过程叫故障转移,也称为失效转移(failover)
   如果出现故障的节点又回来的,那我们就要把这个节点添加回来,那这个添加回来的过程我们就叫失效转回,也称故障转回(failback)

资源争用、资源隔离:
   万一集群发生分裂时,为了避免不再成为集群上的节点继续使用资源而发生资源争用情况,导致有挂载文件系统的系统文件发生崩溃,成为新的集群的就会给不再成为集群的节点补一枪,让不是集群节点的服务死透,不再接收请求,这就叫stonith(shoot the other node in the head),而这种功能就叫资源隔离。争用共享存储的后果是非常严重的,轻则共享存储崩溃,重则整个文件系统都崩溃,数据全部丢失。


资源隔离有两种级别:
   节点级别:这种就叫STONITH,这种就是不管怎么样直接把对方的电源给切断,一般这种主机都是连接到电源交换机上的。
   资源级别:这种需要依赖一些硬件设备来完成,比如连接到共享存储的光纤交换机,把需要踢除出去的节点的光纤接口屏蔽了,这种就叫资源级别的隔离。
   对于服务器左右分隔的这种情况通常称为脑裂(brain-split),左右不协调了,在高可以用集群中避免资源争用完成资源隔离是我们在设计高可用集群中必须要考滤的问题。

   两个节点的模式下,一旦发生集群分隔以后,其中一个节点发生故障,在我们无法判定哪个节点不正常的时候,而正常的节点一定是可以连到互联网上去的,这样的话就说明正常的节点是可以跟前端路由通信的,所以我们就把前端路由当成第三个节点,这里我们称为ping节点,当每个节点联系到对方之后先去ping前端的节点,如果可以ping通,那就说明自己是正常的,就说明该节点是有多票法定票数的节点,而前端的ping节点就叫仲裁设备,帮助节点判断哪个节点是优胜一方的,偶数节点数时就会借助于仲裁设备。
   RHCS不是使用ping节点来判断的,他是使用了一个共享存储的设备,偶数个节点处于活动的节点不断的往磁盘中写数据,按照心跳信息频率每隔一个信息频率就往磁盘里写一个数据位,只要这个设备每隔一个心跳时间间隔就更新一次数据位,就说明这个设备处于活动状态的,如果发现节点多次没有写数据位了就认为节点挂了,这种也叫仲裁设备(qdisk)。仲裁设备又有两种:分别为ping node和qdisk;

那心跳是怎么传递的呢,在多台主机之机又是怎么互相工作良好呢,如图:高可用主从的两个节点;

wKiom1NXJgWSL8J2AALpfiAJ3U8039.jpg

   信息层(Messaging Layer):主从两个节点的心跳信息都要基于信息层来实现,也叫底层基础架构层,用于传递心跳信息的,而能够实现这种功能的有Corosync和heartbeat,corosync是openAIS的一个组件,
   资源分配层(Resource Allocation):也叫资源管理器层,这层的核心组件叫CRM(Cluster Resourcce Manager集群资源管理器),CRM上必须有一个资源被推举成为管理者的,叫Leader,它的工作是决策集群中的所有事物的,这里称为DC(Designated Coordinator指定协调员),任何DC上会额外运行两个进程,一个叫PE(Policy Engine策略引擎),所谓策略引擎就是将底层信息层收集整个集群中所有节点上的信息在本地生成一个大图big pic来策略节点运行在哪个节点上,并通知其实节点上的资源管理器来实现资源的启动和关闭等操作;一个叫TE(Transition Engine 传输引擎),它主要是把PE做出的决策通告给对应节点的CRM;
   集群资源管理器必须借助于Messageing Layer通告给每一个节点,自动的广播或组播给每一个节点,这样就保证了每一个节点上的信息都是一样的,而这些数据在计算机中又怎么样来交互数据的呢,这里就要基于扩展标记语言来实现数据的格式传递的,这种叫半结构化数据基于XML的,所以在各节点之间实现配置信息保存都是通过XML文件保存的,而要能够理解这个XML文件保存的信息使用到一个工具叫CIB(Cluster Information Base集群信息库);只要能连接到CRM上都可以去配置这个XML文件,首先它会先保存到DC的XML中,然后再由DC同步支每个节点上的XML文件中去的;
   Resources层:而PE(策略 引擎)就是根据XML这个库来获取资源的配置信息的,并通过Messaging Layer不获取当前节点的活动信息,而后做出决策,一旦做得决策就要启动资源了;所以PE借助于本地的Messaging Layer通知给其实节点的集群信息库来实现对某些资源信息的传递,比如说通告其它CRM要启动某一资源了,收到信息后CRM并不负责启动,转由 LRM(Local Resource Manager本地资源管理)启动,每个节点上都运行在这个LRM,而并发资源又借助于RA(Resource Agent资源代理)实现资源管理,这就是它的工作原理;CRM负责收集信息,推举为DC的由PE运行,PE负责整合整个集群中的所有资源,并确保某些资 源在合适的节点上运行起来,一旦做出决策就会通告给其它节点上的CRM,对应节点上的CRM收到通告以后会调用自己的LRM,由LRM指挥RA完成相关的 操作;

那下面我们来实现heartbeat v1版本的工作过程:
安装配置高可用集群:实现heartbeat v1版的过程
   1、节点名称很关键,集群每个节的名称都得能互相解析;
   用hosts文件,/etc/hosts:hosts中主机名的正反解析结果必须跟”uname -n”的结果保持一致;
   2、时间必须得同步,使用网络时间服务器同步时间;
   3、各节点间能基于ssh密钥互相认证通信;    

   1)配置主机名、
   第一台节点的主机名为node1.tanxw.com,第二台节点的主机名为node2.tanxw.com   

# vim /etc/hosts  改主机名,注意,两个节点都要添加,我几个节点就加几条解析
172.16.249.61 node1.tanxw.com
172.16.249.62 node2.tanxw.com
# uname -n
# hostname node1.tanxw.com
# hostname node2.tanxw.com
# cat /etc/sysconfig/network 如果这个与node1或2不一致就改一下,这个改配置文件保证下次系统重启时主机名依然有效,
# 如果改好了没有生效就ctrl+d注销一下再登录就OK了。

   wKiom1NXNAHh7o3rAAF40k7SSIw972.jpgwKiom1NXNA_jgZgkAADC01OsoPE292.jpg    

 

   2)两台主机或多台主机基于ssh无密钥通信   

# ssh-keygen -t rsa -P ‘’   这个生成一个密码为空的公钥和一个密钥,把公钥复制到对方节点上即可
# ssh-copy-id -i .ssh/id_rsa.pub root@node2.tanxw.com 对方主机名用登录用户名
两台主机都要互相可以通信,所以两台主机都得互相生成密钥和复制公钥,相互的节点上的hosts文件是都要解析对方的主机名,172.16.249.61 node1.tanxw.com
172.16.249.62 node2.tanxw.com
# ssh node2.tanxw.com ‘date’;date  测试一下是否已经互信

   3)安装heartbeat v1版本的程序,两个节点都要安装上heartbeat的相关程序包 

# 安装这几个包,但是存在依赖关系,需要解决:
heartbeat-2.1.4-12.el6.x86_64.rpm、heartbeat-pils-2.1.4-12.el6.x86_64.rpm、
heartbeat-stonith-2.1.4-12.el6.x86_64.rpm
# 解决依赖关系:
# yum -y install perl-TimeDate net-snmp-libs libnet PyXML
# rpm -ivh heartbeat-pils-2.1.4-12.el6.x86_64.rpm heartbeat-stonith-2.1.4-12.el6.x86_64.rpm  heartbeat-2.1.4-12.el6.x86_64.rpm

   一个高可用集群得依赖:1、信息层; 2、资源管理器;3、资源代理
   我们配置的过程就按这种层次去配置就可以了;
   这里要注意的是:如何在网络中我们期 望的节点集群成为我们所需要的节点,在集群中信息不能随便传递,而心跳节点是基于组播地址传递的,如果别人也装了heartbeat也连接到这个组播地址 上来,这都不安全,基于这种情况,我们各节点这间信息传递是需要认证的,这种认证基于HMAC(消息认证码),消息认证码是使用单向加密算动法来实现的, 而单向加密一般有三类:crc(循环冗余校验码)、md5(信息摘要算法)、sha1。heartbeat基于udp协议,监听在694端口上;

   4)配置heartbeat,它的配置文件在/etc/ha.d/的目录下,但是安装完程序之后这个目录下没有这个配置文件,只有/usr/share /doc/heartbeat-2.1.4/目录下有ha.cf的主配置文件样本,复制到/etc下修改配置文件即可使用;还有一个authkeys的认 证文件,这个文件就是我们各节点认证时所保存的认证密码和认证机制,所以这个文件的权限至关重要,必须是600,否则启动不了服务;第三个 haresources,定义资源时需要资源管理器来读取这个文件,所以这个也得有; 

# cp /usr/share/doc/heartbeat-2.1.4/{ha.cf,authkeys,haresources} /etc/ha.d/
# cd /etc/ha.d/
# openssl rand -hex 8   生成16位随机数
ee869d3d86e1556f
# vim /etc/ha.d/authkeys
auth 2   这里的2与下面选项的数只要一致就可以了,没有什么限定
2 sha1 ee869d3d86e1556f
# chmod 600 authkeys
# vim /etc/ha.d/ha.cf    启用以下参数及功能
logfile  /var/log/ha-log   #日志文件,正常日志信息记录到哪去的
keepalive 1000ms    #每隔多长时间发送一次心跳信息的,单位是秒,毫秒用ms
deadtime 8     #隔多长时间探测到对方不在线就kill掉的时间间隔
warntime 10    #警告时间
udpport 694
mcast eth0 225.0.0.1 694 1 0    #定义组播地址
auto_failback on     #开启故障转回功能
node    node2.tanxw.com    #定义两个节点
node    node1.tanxw.com
crm on       #启用crm功能
ping  172.16.0.1    #ping节点
compression     bz2     #压缩格式
compression_threshold 2     #表示小于2K时不压缩传输

   定义资源:在资源管理器的配置文件中定义;/etc/ha.d/haresources,在/etc/ha.d/resource.d下有各种资源类型,当在资源配置文件中定义时就会调用这里的资源类型来运行相应的程序; 

# vim /etc/ha.d/haresources
node1.tanxw.com 172.16.249.66 httpd    # 172.16.249.66这个是浮动地址
注:node1.tanxw.com:说明哪台主机是主节点,更倾向于谁上面
[node1.tanxw.com 172.16.249.61 /16/eth0/172 .16.255.255 httpd 也可以这样定义
node2.tanxw.com 172.16.249.62 httpd  httpd是怎么被调用的呢:首先会找 /etc/ha .d /resource .d目录下,如果没有就去 /etc/init .d/目录下找httpd,找到就start。]
# scp -p authkeys haresources ha.cf node1.tanxw.com:/etc/ha.d/
# service heartbeat start

   wKiom1NXRlmxEq7jAAGESzZ-U_g798.jpg

  wKiom1NXR-SD7gYlAACXg9-IQt8566.jpg

   wKiom1NXSj3C1KNWAAC25lrX2BI899.jpg

结束:

   当一个节点挂掉了,另一个节点就会顶上去,成为主节点,使用服务依然可以提供服务,而不会使用服务终止,这里我们应该准备两个节点不同的web页面的内 容加以区别,测试时我们把其中的别一个web服务终止,就可以看得出效果来了,heaetbeat会自动切换到别一个正常运行的节点上去断续提供服务。

本文出自 “温水煮青蛙” 博客,请务必保留此出处http://tanxw.blog.51cto.com/4309543/1401096




      本文转自Ailu0li 51CTO博客,原文链接:http://blog.51cto.com/oldking/1711956,如需转载请自行联系原作者




相关文章
|
9月前
|
分布式计算 Hadoop Java
CentOS中构建高可用Hadoop 3集群
这个过程像是在一个未知的森林中探索。但当你抵达终点,看到那个熟悉的Hadoop管理界面时,所有的艰辛都会化为乌有。仔细观察,尽全力,这就是构建高可用Hadoop 3集群的挑战之旅。
341 21
|
10月前
|
Java Linux
CentOS环境搭建Elasticsearch集群
至此,您已成功在CentOS环境下搭建了Elasticsearch集群。通过以上介绍和步骤,相信您对部署Elasticsearch集群有了充分的了解。最后祝您在使用Elasticsearch集群的过程中顺利开展工作!
535 22
|
分布式计算 Hadoop Java
Hadoop集群搭建,基于3.3.4hadoop和centos8【图文教程-从零开始搭建Hadoop集群】,常见问题解决
本文是一份详细的Hadoop集群搭建指南,基于Hadoop 3.3.4版本和CentOS 8操作系统。文章内容包括虚拟机创建、网络配置、Java与Hadoop环境搭建、克隆虚拟机、SSH免密登录设置、格式化NameNode、启动Hadoop集群以及通过UI界面查看Hadoop运行状态。同时,还提供了常见问题的解决方案。
Hadoop集群搭建,基于3.3.4hadoop和centos8【图文教程-从零开始搭建Hadoop集群】,常见问题解决
|
存储 Kubernetes 负载均衡
CentOS 7.9二进制部署K8S 1.28.3+集群实战
本文详细介绍了在CentOS 7.9上通过二进制方式部署Kubernetes 1.28.3+集群的全过程,包括环境准备、组件安装、证书生成、高可用配置以及网络插件部署等关键步骤。
2430 4
CentOS 7.9二进制部署K8S 1.28.3+集群实战
|
Kubernetes Ubuntu Linux
Centos7 搭建 kubernetes集群
本文介绍了如何搭建一个三节点的Kubernetes集群,包括一个主节点和两个工作节点。各节点运行CentOS 7系统,最低配置为2核CPU、2GB内存和15GB硬盘。详细步骤包括环境配置、安装Docker、关闭防火墙和SELinux、禁用交换分区、安装kubeadm、kubelet、kubectl,以及初始化Kubernetes集群和安装网络插件Calico或Flannel。
1184 4
|
6月前
|
存储 Ubuntu Linux
VMware-安装CentOS系统教程及安装包
虚拟机相当于是一个独立于你电脑的环境,在这个环境上面,你可以安装Linux、Windows、Ubuntu等各个类型各个版本的系统,在这个系统里面你不用担心有病读等,不用担心文件误删导致系统崩溃。 虚拟机也和正常的电脑系统是一样的,也可以开关机,不用的时候,你关机就可以了,也不会占用你的系统资源,使用起来还是比较方便 这里也有已经做好的CentOS 7系统,下载下来解压后直接用VMware打开就可以使用
1191 69
|
5月前
|
存储 分布式计算 Linux
安装篇--CentOS 7 虚拟机安装
VMware 装 CentOS 7 不知道从哪下手?这篇超详细图文教程手把手教你在 VMware Workstation 中完成 CentOS 7 桌面系统的完整安装流程。从 ISO 镜像下载、虚拟机配置,到安装图形界面、设置用户密码,每一步都有截图讲解,适合零基础新手快速上手。装好之后无论你是要搭 Hadoop 集群,还是练 Linux ,这个环境都够你折腾一整天!
2103 3
|
6月前
|
Ubuntu Linux 索引
Centos 7、Debian及Ubuntu系统中安装和验证tree命令的指南。
通过上述步骤,我们可以在CentOS 7、Debian和Ubuntu系统中安装并验证 `tree`命令。在命令行界面中执行安装命令,然后通过版本检查确认安装成功。这保证了在多个平台上 `tree`命令的一致性和可用性,使得用户无论在哪种Linux发行版上都能使用此工具浏览目录结构。
532 78
|
7月前
|
Linux 网络安全 Apache
针对在Centos/Linux安装Apache过程中出现的常见问题集锦
以上每个问题的解决方案应深入分析错误日志、系统消息和各种配置文件,以找到根本原因并加以解决。务必保持系统和Apache软件包更新到最新版本,以修复已知的bugs和安全漏洞。安装和管理Web服务器是一项需要细致关注和不断学习的任务。随着技术的发展,推荐定期查看官方文档和社区论坛,以保持知识的更新。
297 80
|
5月前
|
安全 关系型数据库 MySQL
CentOS 7 yum 安装 MySQL教程
在CentOS 7上安装MySQL 8,其实流程很清晰。首先通过官方Yum仓库来安装服务,然后启动并设为开机自启。最重要的环节是首次安全设置:需要先从日志里找到临时密码来登录,再修改成你自己的密码,并为远程连接创建用户和授权。最后,也别忘了在服务器防火墙上放行3306端口,这样远程才能连上。
932 16