一、概念介绍
1
、集群LVM
群集
LVM 集成了不同工具:
DLM:分布式锁管理器
集成了对
cLVM 的磁盘访问。
LVM2:逻辑卷管理器
2
支持将一个文件系统灵活分布到多个磁盘上。
LVM 可提供磁盘空间虚拟池。
cLVM:群集式逻辑卷管理器
集成了对
LVM2 元数据的访问,以使每个节点都了解相关更改。cLVM 未集成对共享数据本身的访问;要使 cLVM 可执行此操作,必须在 cLVM 管理的储存区上配置 OCFS2 或其他群集感知应用程序。
2
、约束
配置好所有资源只是完成了该任务的一部分。即便群集熟悉所有必需资源,它
可能还无法进行正确处理。资源约束允许您指定在哪些群集节点上运行资源、
以何种顺序装载资源,以及特定资源依赖于哪些其他资源。
提供三种不同的约束:
资源位置
位置约束定义资源可以、不可以或首选在哪些节点上运行。
资源共置
共置约束告知群集哪些资源可以或不可以在一个节点上一起运行。
资源顺序
排序约束定义操作的顺序。
3
、Pacemaker
Pacemaker本身由四个关键组件组成
:
CIB (集群信息基础
)
CRMd (集群资源管理守护进程
)
PEngine (PE or 策略引擎
)
STONITHd (枪毙另外一个节点)
CIB用
XML来展示集群的配置和资源的当前状态。 CIB的内容会自动地在集群之间同步,并被PEngine用来来计算集群的理想状态和如何达到这个理想状态。
这个指令列表然后会被交给
DC(指定协调者)。 Pacemaker会推举一个CRMd实例作为master来集中做出所有决策。如果推举的CRMd繁忙中,或者这个节点不够稳定... 一个新的master会马上被推举出来。
DC会按顺序处理
PEngine的指令,然后把他们发送给LRMd(本地资源管理守护进程) 或者通过集群消息层发送给其他CRMd成员(就是把这些指令依次传给LRMd)。
节点会把他们所有操作的日志发给
DC,然后根据预期的结果和实际的结果(之间的差异), 执行下一个等待中的命令,或者取消操作,并让PEngine根据非预期的结果重新计算集群的理想状态。
在某些情况下,可能会需要关闭节点的电源来保证共享数据的完整性或是完全地恢复资源。为此
Pacemaker引入了STONITHd。STONITH是 Shoot-The-Other-Node-In-The-Head(爆其他节点的头)的缩写,并且通常是靠远程电源开关来实现的。在Pacemaker中,STONITH设备被当成资源(并且是在CIB中配置)从而轻松地监控,然而STONITHd会注意理解STONITH拓扑,比如它的客户端请求隔离一个节点,它会重启那个机器。(译者注:就是说不同的爆头设备驱动会对相同的请求有不同的理解,这些都是在驱动中定义的。)
4
、克隆资源
您可能希望某些资源在群集的多个节点上同时运行。为此,必须将资源配置为克隆资源。可以配置为克隆资源的资源示例包括 STONITH 和群集文件系统(如OCFS2)。可以克隆提供的任何资源。资源的资源代理支持此操作。克隆资源的配置甚至也有不同,具体取决于资源驻留的节点。
资源克隆有三种类型:
匿名克隆
这是最简单的克隆类型。这种克隆类型在所有位置上的运行方式都相同。因此,每台计算机上只能有一个匿名克隆实例是活动的。
全局唯一克隆
这些资源各不相同。一个节点上运行的克隆实例与另一个节点上运行的实例不同,同一个节点上运行的任何两个实例也不同。
状态克隆
这些资源的活动实例分为两种状态:主动和被动。有时也称为主要和辅助,或主和从。状态克隆可以是匿名克隆也可以是全局唯一克隆。
克隆资源必须正好包含一组或一个常规资源。
二、集群管理
1
、集群服务
1.1.启动服务
以下命令任选一:
#rcopenais start
#/etc/init.d/openais start
#service openais start
1.2.关闭服务
#rcopenais stop
#/etc/init.d/openais stop
#service openais stop
1.3.运行状态
#rcopenais status
#/etc/init.d/openais status
#service openais status
2
、集群进程
#ps -ef | egrep "corosync|heartbeat"
共
8个进程:
corosync
- openais/corosync 集群主进程
stonithd
- shoot the other node in the head 关闭其他节点(和rhcs的fence一样)
cib
- cluster information base 集群信息基础
lrmd
- local resource manager 本地资源管理
attrd
- attribute管理进程
pengine
- Policy Engine 策略引擎
crmd
- cluster resource manager 集群资源管理
mgmtd
- packmakerGUI管理进程
红色部分是
Pacemaker的5个组件。
3
、集群状态
监控资源:
#crm_mon
查看资源状态:
#crm_mon status
实时监控所有资源并显示细节:
#crm_mon -o -r
4
、资源状态
#crm_resource -L
5
、资源管理
5.1.命令行管理:crm
查看主控:
#crmadmin -D
显示集群配置信息:
#crm configure show
停止资源:
#crm resource stop
resourcename
启动资源:
#crm resource start
resourcename
重启资源:
#crm resource restart
resourcename
切换资源:
#crm resource move
resourcename nodename
清理资源:
#crm resource cleanup
resourcename
将节点变为
standby模式:
#crm node standby
nodename
将处于
standby模式的节点激活:
#crm node online
nodename
5.2.图形界面管理:crm_gui
输入
hacluster密码:
可以选择左边菜单进行资源配置。
6
、自定义OCF代理的服务资源
1)编写一个脚本
test,该脚本必须支持start stop status:
将脚本放入文件夹:
/usr/lib/ocf/resource.d/heartbeat
脚本需要选择
ocf:heartbeat:test #将ocf换成lsb将会报错。
test脚本内容如下:
#!/bin/bash
logger $0 called with $1
case "$1" in
start)
# Start commands go here
;;
stop)
# Stop commands go here
;;
status)
# Status commands go here
;;
esac
这里的
logger命令用于给syslog守护进程发送消息,然后syslog基于/etc/syslog.conf文件中的配置将接收到消息写入到适当的日志文件中。
注意:这个脚本中的
case语句不做任何事情,这里只是为你将来自己开发资源脚本时提供一个样本,以便可以处理start,stop,status参数。
7
、查看日志
根据
/etc/corosync/corosync.conf 中 logging 部分指定的配置生成日志文件消息。默认情况下,日志将写入系统日志,通常为 /var/log/messages。
三、故障处理
1
、清理报错资源
1)资源无法启动,或者资源
r_tomcat被删除后,输入crm_mon命令会有如下报错:
server:/ # crm_mon
============
Last updated: Wed Aug 1 17:28:02 2012
Stack: openais
Current DC: server - partition with quorum
Version: 1.1.2-2e096a41a5f9e184a1c1537c82c6da1093698eb5
2 Nodes configured, 2 expected votes
2 Resources configured.
============
Online: [ server server1 ]
r_publicIP
(ocf::heartbeat:IPaddr): Started server1
Failed actions:
r_tomcat_start_0 (node=server, call=29, rc=-2, status=Timed Out):
unknown exec error
r_tomcat_start_0 (node=server1, call=22, rc=-2, status=Timed Out):
unknown exec error
2)使用命令
crm resource cleanup 来清除错误信息:
server:/ # crm resource cleanup r_tomcat
Cleaning up r_tomcat on server
Cleaning up r_tomcat on server1
2
、资源不存在
1)当资源从主节点切换到另一节点时,没有
test服务资源脚本时,报错提示如下:
server:/ # crm_mon
============
Last updated: Wed Aug 1 18:45:17 2012
Stack: openais
Current DC: server - partition with quorum
Version: 1.1.2-2e096a41a5f9e184a1c1537c82c6da1093698eb5
2 Nodes configured, 2 expected votes
2 Resources configured.
============
Online: [ server server1 ]
r_publicIP
(ocf::heartbeat:IPaddr): Started server
test
(ocf::heartbeat:test): Started server1 (unmanaged) FAILED
Failed actions:
test_start_0 (node=server1, call=38, rc=5, status=complete): not installed
test_stop_0 (node=server1, call=39, rc=5, status=complete):
not installed
2)在备节点创建
test脚本资源即可。(我的测试环境是将test脚本拷贝到/usr/lib/ocf/resource.d/heartbeat目录下,就能正常切换了。)
3、Skipping clustered volume mqvg
现象:执行
lvs或者vgs等和逻辑卷有关的命令时报错。
Skipping clustered volume mqvg
解决办法:
1)和存储通讯有问题,重启机器,或重启
cman。(rhcs的办法)
2)文件系统有问题,被集群
clvm2锁锁住了,可以这样修改:
#vim /etc/lvm/lvm.conf
locking_type=3
修改为
0 #默认是3,改成0即是关闭集群锁
#vgchange -cn mqvg
# 将卷组从集群中释放出来,不受集群管理
c: --clustered n: --no
#vgchange -ay mqvg
# 激活卷组
#mount /dev/mqvg/MQHA
/MQHA
#vim /etc/lvm/lvm.conf
locking_type=0
修改为
3 #再启用锁功能
这样,该卷就能给集群正常使用了。