欢迎各位兄弟 发布技术文章
这里的技术是共享的
能够利用Messaging Layer 自我实现高可用集群服务的软件叫做 ha-aware
ha-aware application (heihg Availability aware application )
不含有 ha-aware 的程序的电脑,必须借助于 CRM RA来实现集群功能
节点能ping通网关,可以认定自己是活动的
仲裁磁盘机制,不停地往共享设备上写资源,从节点监控主节点是否往某磁盘上写数据,一旦监测不到,可以认定主节点故障了
watchdog 看门狗, (linux内核上的功能),watchdog协调同一个节点的多个进程,,,每个进程启动后通过 unix 套接字管道不停地向 watchdog中写数据,如果其它进程看不到这个进程写的数据,它就认为那个进程挂了,或者试图重启那个进程,,马哥不介绍了,因为用得不多
资源粘性:资源对某节点的依赖程度,通过score来定义,
正数 (有正无穷)
负数 (有负无穷)
资源约束:
location: 资源对节点的倾向程度
collation: 资源间的依赖性(互斥性)
order:资源的采取动作的次序(哪个先启动)
两个节点 判断的话,要依赖第三方
多个节点(奇数节点)法定票数要大于半数
quorum:法定票数
四个节点 (a,b 找不到 c,d ,,,,c,d 找不到a,b)此时是脑裂
不具备法定票数时,
全局资源策略 (当全局资源不具备法定票数的时候,资源策略,资源管理策略) without_quorum_policy(不满足法定票数的时候策略)
freeze:冻结,不接受新的请求,当然连进来的请求会提供服务(一半时,freeze吧)
stop:停了,(少数时,停掉吧)
ignore:忽略(该运行还是运行,只要没人来stonith,fense)(两节点的时候,不具法定票数,所以要ignore模型)
来回争用,所以资源隔离是必须的
可以定义某一个节点使用非默认的一票的
这里 a 4; b 2; c 1; d 2;
总票数是奇数
d挂了,看上面的资源,对abc的倾向性
(通的策略(默认不开放,只开放一两个),堵的策略(默认都开放,只堵一两个)),,
可以让d上的资源对c负无穷大,这样d上的资源就尽可能的在a b 上运行了,堵的策略(默认都开放,只堵一两个)),这叫左对称?
d挂了,d上的资源 默认 a b c 都不让转,,,我们手动开放转到b上,(通的策略(默认不开放,只开放一两个),这叫右对称
可以定义资源组,红帽的rhcs集群中,a b 定义成一组,b c 一组, b c d 再一组,
组就是某一个服务组成的资源
web服务所需的资源(如VIP httpd 文件系统)定义成一个组,叫做故障转移域(failover domain),故障发生时,某资源所能够转移或倾向的节点范围
三个节点各一个服务,第四个节点备用
RHCS:(redhat cluster suite)红帽集群套件,红帽上的集群名称
Messaging Layer
heartbeat(v1,v2,v3)
heartbeat v3 分裂成几个独立的小项目
heartbeat,pacemaker,cluster-glue
红帽6.0也提供了heartbeat
corosync(红帽6.0(包括6.0)以后):配置和运用上比heartbeat更优越,但是需要与pacemaker组合起来工作,, corosync只是个纯粹的Messaging Layer,相当于heartbeat v3中heartbeat ;;;;corosync支持双主(主/主模型),配置麻烦,要对资源做各种管理
cman: class manager (红帽5.0版本系列),不是纯粹的Messaging Layer,很多功能整合在内核中,很麻烦;;红帽6.0依然支持cman,cman可以定义成组,(一个服务可包含多个资源,它们同进同退)
keepalived: 也是一个高可用服务,理论与heartbeat, corosync,cman不太一样,但是keepalived在配置上,应用机制上有独到之处,vip的管理上基于vip来实现(虚拟论文冗余协议来实现),可以简单方便的配置成双主模型,keepalived本身是为了LVS的director高可用而开发的一套组件,keepalived用到LVS的代码来提供LVS的高可用功能;;;便捷性上是keepalived,但是通用性不如前几个
ultramonkey:不太活跃了, ultra(超级) monkey(猴子),,,,这个马哥不讲了
CRM:需要附着在Messaging Layer 之上才能进行工作
一,haresources (ha resources高可用资源), heartbeat v1 自带有资源管理器CRM,叫 haresources: ha资源管理,简洁方便
二,crm, heartbeat v2 1)对 haresources 作了改进,把 haresources 做成了独立的组件.就叫做crm, 需要监听在某个接口上,接受外面的管理工具进行管理(比于基于图形界面来管理集群资源)
2)为了兼容v1,提供了原有的 haresources
三,pacemaker, heartbeat v3 资源管理器crm发展为独立的项目,重命名为 pacemaker (heartbeat 心不跳了,pacemaker 来起搏一下),heartbeat v3中的heartbeat 仅保留核心的Messaging Layer ;;;;;pacemaker 可运行在 heartbeat v3 或 corosync 之上
四,rgmanager,cman提供的,rgmanager(resource group manger 资源组管理器)
五,keepalived的资源管理器,暂时不讲了
Resource: 对于集群服务来讲,其中某一个资源,某一个时刻,只能运行在其中一个节点上,但是这是不完全正确的
有些资源必须运行在多个节点上的,比如stonith设备(既是高可用,又运行在多个节点上),
Resource Type: 资源类型
Primitive:主资源,某一时刻只能运行在某一节点上的资源
clone:克隆类资源,某一时刻只能运行在多个节点上的资源 克隆资源,对主资源n份克隆,每个节点上可独立运行,同时运行,,比如stonith设备管理的资源代理;;集群文件系统中,每个节点持有锁后,其它节点可以看到,所以必须通知其它节点上,所以这个资源必须要运行多份
group:组资源多个主资源归类为一块,同进同退;它是一个资源容器,通常组中只包含Primitive的资源
master/slave:主从资源,独特的克隆类资源,只能运行两份,一个节点是主节点,另一个节点是从节点,讲到DRP时才能真正理解
RA:resource agent 资源代理
它是一堆脚本,每个节点上都有,能够让被定义成高可用资源的资源能够被管理的,它接受LRM ( local resource manager )传递过来的控制指令,完成资源管理
RA Classes: RA (resource agent) 类别
Legacy hearbeat v1 RA:(Legacy 传统)定义了传统了一堆的RA,专用于hearbeat v1,后面的 hearbeat 升级版也兼容
LSB (linux standard base): 只要遵循linux shell编程风格,支持 start ,stop restart ,status的脚本都可以(/etc/rc.d/init.d 下面的脚本基本都是遵循LSB的脚本) 对于获取资源运行状况的功能以及解析度等等都不是特别理想,有人开发了另一套标准,它能够至少接受好几个参数的start ,stop restart ,status,monitor(监控),叫做OCF
OCF (Open Cluster Framework) 开放式集群框架,不同的vendor(提供商)可能提供不同的版本
pacemaker提供的
linbit (为drbd提供的ra??)
stonith (stonith 厂商提供管理自己设备的,也提供ra),单独归类了
STONITH 专门有来管理硬件stonith设备
隔离级别:,
节点级别
STONTIH
资源级别
FC SAN Switch SAN(storage area network)
STONTIH
Stonith
1、Power Distribution Units (PDU) 电源分布单元 电源交换机
可以接网线,可以接收其它节点所发来的控制指令,借助于这个指令可以断掉某节点的电源,
各个厂商的认证stonish不一样,管理软件程序不一样
2、Uninterruptible Power Supplies (UPS) 不间断电源
不间断电源反而可以间断,一些高级的UPS也可以实现隔离功能的
3、Blade Power Control Devices 刀片;刀片服务器的电源控制设备
它们是充分模块化了的,刀片服务器自己都有内在的电源控制器,刀片服务器接上去,有多种接口,其中有一个电源接口,这些接口也能够接受控制指令,用于临时的,一次性切换某个设备电源,,,我们其实stonith可以快速断开再接上(重启)(只要重启,所以服务都挂掉了)某个节点,,,,
在高可用集群中,每一个服务都不能开机自启动,必须要接受crm的管理 (什么 chkconfig on ,在高可用集群中,坚决不能使用了,必须使用 chkconfig off )
4、Lights-out Devices 轻量级的管理设备
是很多专业级的服务器上自带的硬件接口,( IBM RSA, HP iLO, Dell DRAC ),它们都是在主机上很小的管理模块,可以实现远程对这个服务进行管理的,,,,,包括向服务器发指令,重启一下,,,,它们也可以实现用于stonith设备
5、Testing Devices 测试性的设备
比如用 ssh,配置几个主机,彼此间都通过无密码方式进行连接, ssh 172.16.100.7 'reboot' ,但是问题是联系不上啊,这个命令有啥用呢,,所以说这是测试性的设备
meatware 更强大的测试性设备,(meatware 肉件),需要重启时,手按一下,叫做肉键, 这叫手动fense,手动stonith
为了提高stonith功能,每一个节点上都要启动 stonithd 进程
stonithd 是 用来监控当前主机上所运行的stonith资源的,可以在各个节点的stonith间各进程相互通信的机制
stonith 这个设备的命令是以 stonith 插件的方式工作,
每一个硬件的生产厂商,都会专门提供一个应用程序,用来向这样一个设备发送指令,它们接受不同的选项参数,称为 STONITH Plug- ins
STONITH的实现: ;
stonithd
stonithd is a daemon which can be accessed by local processes or over the network. It accepts the commands which correspond to fencing operations: reset, power-off, and
power-on. It can also check the status of the fencing device.
The stonithd daemon runs on every node in the CRM HA cluster. The stonithd instance running on the DC node receives a fencing request from the CRM. It is up to this and
other stonithd programs to carry out the desired fencing operation.
STONITH Plug- ins
For every supported fencing device there is a STONITH plug-in which is capable of controlling said device. A STONITH plug-in is the interface to the fencing device.
On each node, all STONITH plug-ins reside in /usr/lib/stonith/plugins (or in /usr/1ib64/stonith/plugins for 64-bit architectures). All STONITH plug-ins look the same to
stonithd, but are quite different on the other side reflecting the nature of the fencing device .
Some plug-ins support more than one device. A typical example is ipmilan (or external/ipmi) which implements the IPMI protocol and can control any device which supports
this protocol.
一个高可用集群,stonith是必须的,所以一般说来,集群的默认的管理策略:没有stonith,是不允许启动的,
httpd HA : httpd 的高可用集群
集群之间要加密
集群内部节点可以组播,可以单播,可以广播
httpd HA
Heartbeat
UDP: 694
两个节点用以太网网线连起来
[root@mail ~]# grep 694 /etc/services
ha-cluster 694/tcp # Heartbeat HA-cluster
ha-cluster 694/udp # Heartbeat HA-cluster
rrimwm 1694/tcp # rrimwm
rrimwm 1694/udp # rrimwm
pwrsevent 2694/tcp # pwrsevent
pwrsevent 2694/udp # pwrsevent
vpntpp 3694/tcp # VPN Token Propagation Protocol
vpntpp 3694/udp # VPN Token Propagation Protocol
bioserver 6946/tcp # Biometrics Server
bioserver 6946/udp # Biometrics Server
[root@mail ~]#