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。node
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),而这种功能就叫资源隔离。争用共享存储的后果是很是严重的,轻则共享存储崩溃,重则整个文件系统都崩溃,数据所有丢失。web
资源隔离有两种级别:
节点级别:这种就叫STONITH,这种就是无论怎么样直接把对方的电源给切断,通常这种主机都是链接到电源交换机上的。
资源级别:这种须要依赖一些硬件设备来完成,好比链接到共享存储的光纤交换机,把须要踢除出去的节点的光纤接口屏蔽了,这种就叫资源级别的隔离。
对于服务器左右分隔的这种状况一般称为脑裂(brain-split),左右不协调了,在高能够用集群中避免资源争用完成资源隔离是咱们在设计高可用集群中必需要考滤的问题。
两个节点的模式下,一旦发生集群分隔之后,其中一个节点发生故障,在咱们没法断定哪一个节点不正常的时候,而正常的节点必定是能够连到互联网上去的,这样的话就说明正常的节点是能够跟前端路由通讯的,因此咱们就把前端路由当成第三个节点,这里咱们称为ping节点,当每一个节点联系到对方以后先去ping前端的节点,若是能够ping通,那就说明本身是正常的,就说明该节点是有多票法定票数的节点,而前端的ping节点就叫仲裁设备,帮助节点判断哪一个节点是优胜一方的,偶数节点数时就会借助于仲裁设备。
RHCS不是使用ping节点来判断的,他是使用了一个共享存储的设备,偶数个节点处于活动的节点不断的往磁盘中写数据,按照心跳信息频率每隔一个信息频率就往磁盘里写一个数据位,只要这个设备每隔一个心跳时间间隔就更新一次数据位,就说明这个设备处于活动状态的,若是发现节点屡次没有写数据位了就认为节点挂了,这种也叫仲裁设备(qdisk)。仲裁设备又有两种:分别为ping node和qdisk;
那心跳是怎么传递的呢,在多台主机之机又是怎么互相工做良好呢,如图:高可用主从的两个节点;算法

信息层(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版的过程
一、节点名称很关键,集群每一个节的名称都得能互相解析;
用hosts文件,/etc/hosts:hosts中主机名的正反解析结果必须跟”uname -n”的结果保持一致;
二、时间必须得同步,使用网络时间服务器同步时间;
三、各节点间能基于ssh密钥互相认证通讯;
1)配置主机名、
第一台节点的主机名为node1.tanxw.com,第二台节点的主机名为node2.tanxw.com shell
172.16.249.61 node1.tanxw.com
172.16.249.62 node2.tanxw.com

2)两台主机或多台主机基于ssh无密钥通讯 vim
两台主机都要互相能够通讯,因此两台主机都得互相生成密钥和复制公钥,相互的节点上的hosts文件是都要解析对方的主机名,172.16.249.61 node1.tanxw.com
172.16.249.62 node2.tanxw.com
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
一个高可用集群得依赖:一、信息层; 二、资源管理器;三、资源代理
咱们配置的过程就按这种层次去配置就能够了;
这里要注意的是:如何在网络中咱们指望的节点集群成为咱们所须要的节点,在集群中信息不能随便传递,而心跳节点是基于组播地址传递的,若是别人也装了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,定义资源时须要资源管理器来读取这个文件,因此这个也得有; bash
ee869d3d86e1556f
auth 2 这里的2与下面选项的数只要一致就能够了,没有什么限定
2 sha1 ee869d3d86e1556f
logfile
/var/log/ha-log
keepalive 1000ms
deadtime 8
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
ping
172.16.0.1
compression bz2
compression_threshold 2
定义资源:在资源管理器的配置文件中定义;/etc/ha.d/haresources,在/etc/ha.d/resource.d下有各类资源类型,当在资源配置文件中定义时就会调用这里的资源类型来运行相应的程序; 服务器
node1.tanxw.com 172.16.249.66 httpd
注: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。]



结束:网络
当一个节点挂掉了,另外一个节点就会顶上去,成为主节点,使用服务依然能够提供服务,而不会使用服务终止,这里咱们应该准备两个节点不一样的web页面的内容加以区别,测试时咱们把其中的别一个web服务终止,就能够看得出效果来了,heaetbeat会自动切换到别一个正常运行的节点上去断续提供服务。
本文出自 “温水煮青蛙” 博客,请务必保留此出处http://tanxw.blog.51cto.com/4309543/1401096