《OpenStack高可用集群(上册):原理与架构》—3.5.2 Pacemaker集群配置信息

举报
华章计算机 发表于 2019/05/29 14:04:19 2019/05/29
【摘要】 本书摘自《OpenStack高可用集群(上册):原理与架构》一书中的第3章,第3.5.2节,作者是山金孝。

3.5.2 Pacemaker集群配置信息

在Pacemaker的CIB信息中,除了集群状态信息,集群配置信息也是Pacemaker集群中CIB信息的关键组成部分,Pacemaker的集群配置信息决定了集群最终应该如何工作以及集群最终的运行状态,因为只有一个正确的集群配置才能驱动集群资源运行在正常的状态,即正确的配置信息是集群正常运行的前提,因而,从这种因果关系来讲,集群管理员更应该熟悉集群配置信息。通常情况下,集群的配置信息由集群配置选项(crm_config)、集群节点(nodes)、集群资源(resources)和资源约束(constraints)四个配置段组成:

(1)crm_config

Pacemaker集群层面的配置选项都被定义在crm_config配置段中,crm_config配置段的内容在CIB中是以<crm_config>标记起始并以<crm_config>标记结尾的配置段,以Openstack高可用环境配置为例,Pacemaker集群CIB中的crm_config配置段信息如下:

[root@controller1-vm ~]# cibadmin --query --scope crm_config

<crm_config>

<Cluster_property_set id="cib-bootstrap-options">

<nvpair id="cib-bootstrap-options-have-watchdog" name="have-watchdog" value="false"/>

<nvpair id="cib-bootstrap-options-dc-version" name="dc-version" value="1.1.13-a14efad"/>

<nvpair id="cib-bootstrap-options-Cluster-infrastructure" name="Cluster-infrastructure" value="corosync"/>

<nvpair id="cib-bootstrap-options-Cluster-name" name="Cluster-name" value="openstack-ha"/>

<nvpair id="cib-bootstrap-options-last-lrm-refresh" name="last-lrm-refresh" value="1460295450"/>

<nvpair id="cib-bootstrap-options-Cluster-recheck-interval" name="Cluster-recheck-interval" value="1min"/>

<nvpair id="cib-bootstrap-options-stonith-enabled" name="stonith-enabled" value="true"/>

</Cluster_property_set>

<Cluster_property_set id="Redis_replication">

<nvpair id="Redis_replication-Redis-server_REPL_INFO" name="Redis-server_REPL_INFO" value="controller3-vm"/>

</Cluster_property_set>

</crm_config>

(2)nodes

Pacemaker集群中的成员节点都被定义在nodes配置段中,nodes配置段定义了集群的全部节点的ID和节点名称,以及节点在集群中的属性等信息,节点配置段在CIB中以<nodes>标记起始并以<nodes >标记结尾,nodes配置段的内容信息如下:

[root@controller1-vm ~]# cibadmin --query --scope  nodes

<nodes>

<node id="1" uname="controller1-vm">

<instance_attributes id="nodes-1">

<nvpair id="nodes-1-osprole" name="osprole" value="controller"/>

</instance_attributes>

</node>

<node id="2" uname="controller2-vm">

<instance_attributes id="nodes-2">

<nvpair id="nodes-2-osprole" name="osprole" value="controller"/>

</instance_attributes>

</node>

……

(3)resources

Pacemaker集群所运行的全部资源都被定义在Resources配置段中,在Pacemaker集群的资源配置中,每个资源都会通过Class、Type、Provider等属性对其进行定义,而这些定义全部位于Resources配置段中,并且每个资源位于一个资源定义段内。资源配置段在CIB中以<resources>标记起始并以<resources>标记结尾,在Openstack等大规模的Pacemaker集群中,资源配置段的内容是非常繁多的,以Openstack集群配置环境为例,Resources配置段的部分内容信息如下:

[root@controller1-vm nova]# cibadmin --query --scope resources

<resources>

......

<primitive class="ocf" id="vip-glance" provider="heartbeat" type="IPaddr2">

<instance_attributes id="vip-glance-instance_attributes">

<nvpair id="vip-glance-instance_attributes-ip" name="ip" value="192.168.142.205"/>

<nvpair id="vip-glance-instance_attributes-nic" name="nic" value="eth1"/>

</instance_attributes>

<operations>

<op id="vip-glance-start-timeout-20s" interval="0s" name="start" timeout="20s"/>

<op id="vip-glance-stop-timeout-20s" interval="0s" name="stop" timeout="20s"/>

<op id="vip-glance-monitor-interval-10s" interval="10s" name="monitor" timeout="20s"/>

</operations>

</primitive>

......

<resources>

本文中的“......”均表示省略的标准输出,“\”表示代码换行。

(4)constraints

Pacemaker集群中各种资源之间的启动顺序及依赖关系等约束都被定义在Constraints配置段中,在由众多资源组成的集群中,资源之间的启动依赖关系以及资源彼此之间的粘性设置都称为资源约束,这些约束被统一定义到Constraints配置段中,CIB中的Constraints配置段以<constraints>标记起始并以< constraints >标记结尾,当资源数量较多,并且资源之间的约束也较为复杂的情况下,Constraints配置段的信息量也是相当巨大的,在我们的OpenStack集群配置中,Constraints配置段的部分内容信息如下:

[root@controller1-vm nova]# cibadmin --query --scope constraints

<constraints>

......

<rsc_order first="vip-db" first-action="start" id="order-vip-db-lb-haproxy-clone-Optional" kind="Optional" then="lb-haproxy-clone" then-action="start"/>

<rsc_colocation id="colocation-vip-db-lb-haproxy-clone-INFINITY" rsc="vip-db" score="INFINITY" with-rsc="lb-haproxy-clone"/>

.....

<constraints>

作为一个集群管理员,经常需要更改或查看集群CIB配置信息,而在Pacemaker集群中,cibadmin命令行工具是更改和查询集群资源配置信息最为强大的工具。cibadmin命令行工具能够与运行中的Pacemaker集群进行实时交互,通过cibadmin,集群管理员可以实时执行集群配置信息的查看、删除、更新或者替换配置信息中的任何部分等操作,并且,使用cibadmin命令所做的更改会对当前集群立即生效,而无需使用reload或restart之类的命令重新加载集群配置。此外,用户通过cibadmin命令还可以对集群配置信息进行各种自定义的操作,其中,最为常见的cibadmin操作有以下几种:

//查询当前节点的CIB信息

cibadmin --query --local

//仅查询crm_config的配置段信息

cibadmin --query --scope crm_config

//查询全部“target-role”的设置

cibadmin --query --xpath "//nvpair[@name='target-role']"

//删除全部“is-managed'”的设置

cibadmin --delete-all --xpath "//nvpair[@name='is-managed']"

//删除资源id为“old”的资源

cibadmin --delete --xml-text '<primitive id="old"/>'

//删除集群全部资源

cibadmin --replace --scope resources --xml-text '<resources/>'

//使用指定文件替换集群全部CIB配置信息

cibadmin --replace --xml-file $HOME/Pacemaker.xml

//使用指定文件替换约束段配置

cibadmin --replace --scope constraints --xml-file $HOME/constraints.xml

//增加配置信息版本以防老版本配置信息被加载

cibadmin --modify --xml-text '<cib admin_epoch="admin_epoch++"/>'

对于集群管理员而言,使用cibadmin最主要的原因之一便是更改集群配置信息,而更改配置信息最常用的方式就是利用cibadmin将当前集群配置信息保存到一个临时文件中,然后使用自己喜欢的XML编辑器对保存配置信息的临时文件进行修改,在确认修改完成之后,再使用cibadmin命令将修改后的XML配置文件替换掉集群的当前配置,而且这种配置信息的替换将会立即生效,使用cibadmin更新集群配置信息的过程如下所示:

//将当前集群配置信息保存到tmp.xml文件中

cibadmin --query > tmp.xml

//使用编辑器对XML文件进行修改(此处使用的是vim)

vim tmp.xml

//将修改后的XML文件替换掉当前集群的配置信息

cibadmin --replace --xml-file tmp.xml

Pacemaker集群的CIB配置信息是由crm_config配置段、nodes配置段、resources配置段、constraints配置段组成的,在大规模集群环境中,通过cibadmin获取的集群配置信息内容非常繁多,加之CIB信息以XML语言呈现,这会使得修改最终的XML文件非常困难,而在很多时候用户并不需要对XML文件的全部内容进行通篇修改,例如用户可能只需要修改crm_config配置段中的某个参数或者resources配置段中的某个资源属性,这时用户便可仅针对需要的配置段进行配置信息的提取和替换操作,例如用户需要修改resources配置段中的某个资源属性,则可以通过如下方式进行修改替换:

cibadmin --query --scope resources > tmp.xml

vim tmp.xml

cibadmin --replace --scope resources --xml-file tmp.xml

在大规模的Pacemaker集群中,CIB完整的配置信息可以用海量来形容,而且全部以XML语言来描述,因此,尽管有cibadmin这样的工具存在,手工修改CIB配置也是极为不推荐的。当然,如果用户确实需要查看CIB信息,那么在正式使用cibadmin命令之前,用户首先要清楚定位自己需要的信息应该位于哪个配置段,并通过cibadmin命令以配置段为单位进行更为精确的配置信息定位输出,如下是针对各种配置段的CIB信息提取方式:

//提取集群全部配置信息

cibadmin --query --local >Cluster.xml

//#提取crm_config配置信息段

cibadmin --query --scope crm_config > crm_config.xml

//提取resources配置段

cibadmin --query --scope resources > resources.xml

//提取nodes配置段

cibadmin --query --scope nodes > nodes.xml

//提取constraints配置段

cibadmin --query --scope constraints> constraints.xml

另外,在使用cibadmin命令更改集群配置信息之前,建议使用上述命令将集群当前的配置信息导出到临时文件中以便备份集群配置信息,如果在更改集群配置信息后集群运行状态未能实现预期效果,则可通过备份文件重新恢复集群配置信息。需要再次说明的是,通过修改XML配置文件来更新集群配置信息是非常麻烦并且特别容易出错的集群变更方式,尤其是集群节点不断增加并且资源数量非常庞大的情况下,cibadmin输出的XML配置文件可能会有成千上万行,单纯的通过编辑器来修改XML文件变得极不现实。因此,除了cibadmin命令之外,Pacemaker还为管理员提供了其他几个非常有用的查看与修改配置信息的命令行工具,当用户安装Pacemaker软件后,可以到系统的/usr/sbin目录下找到这些命令:

-rwxr-xr-x 1 root root 21592 Sep  1  2015 crmadmin

-rwxr-xr-x 1 root root 21960 Sep  1  2015 crm_attribute

-rwxr-xr-x 1 root root 17064 Sep  1  2015 crm_diff

-rwxr-xr-x 1 root root 11648 Sep  1  2015 crm_error

……

Pacemaker为这些命令的使用方式准备了详细的说明和使用样例,用户只需通过--help参数即可了解这些命令行工具的使用方法,例如crm_attribute命令的使用样例可以通过如下方式来获取:

[root@controller1-vm sbin]# crm_attribute --help

......

Examples:

Add a new attribute called 'location' with the value of 'office' for host 'myhost':

        # crm_attribute --node myhost --name location --update office

Query the value of the 'location' node attribute for host myhost:

        # crm_attribute --node myhost --name location --query

Change the value of the 'location' node attribute for host myhost:

        # crm_attribute --node myhost --name location --update backoffice

Delete the 'location' node attribute for the host myhost:

        # crm_attribute --node myhost --name location --delete

Query the value of the Cluster-delay Cluster option:

        # crm_attribute --type crm_config --name Cluster-delay --query

Query the value of the Cluster-delay Cluster option. Only print the value:

        # crm_attribute --type crm_config --name Cluster-delay --query --quiet

例如,用户需要为主机名为controller1-vm的节点设置一个节点属性,属性名为osprole,属性值为controller,并在设置完成之后对该节点的属性值进行验证,则可以通过crm_attribute命令来实现:

//为controller1-vm节点设置osprole属性

[root@controller1-vm sbin]# crm_attribute --node controller1-vm --name osprole --update=controller

//查看controller1-vm节点的osprole属性

[root@controller1-vm sbin]# crm_attribute --node controller1-vm --name osprole --query

//输出信息如下:

scope=nodes  name=osprole value=controller

如果用户需要查看某个资源的运行情况,则可以通过crm_resource命令来实现,该命令将会列出该资源在全部集群节点上的运行情况。例如,我们需要查看预定义的Openstack网络API服务neutron-server-api资源的节点运行情况,则可以通过如下方式实现:

[root@controller1-vm sbin]# crm_resource --resource neutron-server-api\ --locate

//输出结果如下:

resource neutron-server-api is running on: controller3-vm

resource neutron-server-api is running on: controller1-vm

resource neutron-server-api is running on: controller2-vm

resource neutron-server-api is NOT running

resource neutron-server-api is NOT running

上述输出结果说明neutron-server-api资源同时运行在三个控制节点上,而其他节点并不运行neutron-server-api资源。此外,为了仿真测试集群资源变更,Pacemaker还提供了一个仿真集群事件响应的工具crm_simulate,crm_simulate的具体使用可以通过--help参数查看,其使用语法如下:

crm_simulate datasource operation

其中,crm_simulate利用数据源(datasource)来执行指定的操作(operation),仿真之后的结果可以保存为不同的数据格式。在Linux系统中,一种便于查看的格式就是保存为Graphviz的dot类型文件,然后通过Graphviz的dot命令可以将dot文件渲染为关系图,通过关系图中的箭头指向可以比较清晰地看到集群对于配置变更或集群事件的响应过程。例如,在我们的OpenStack集群配置中,可以通过crm_simulate命令来仿真OpenStack集群启动过程中集群事件的响应过程和资源之间的启动关系,但是由于OpenStack集群资源众多并且资源之间的约束限制错综复杂,导致最终Graphviz绘制的图形也极为复杂,图3-9仅是仿真结果的冰山一角。crm_simulate命令的使用很简单,只需集合Graphviz软件的dot命令即可将仿真的关系数据进行绘制,并保存为各种格式的图片:

root@controller1-vm ~]# crm_simulate -L -VVVVV \

    --save-dotfile=openstack.dot

root@controller1-vm ~]# dot -T png openstack.dot -o openstack.png

上述第一条命令通过crm_simulate工具,利用当前集群CIB配置信息来进行仿真,并将结果保存到openstack.dot文件中(数据源);第二条命令利用Graphviz工具的dot命令对openstack.dot文件进行绘制并保存为png格式图像openstack.png。图3-9便是关系图openstack.png的小部分截图,完整的关系图比图3-9要复杂得多。通常,crm_simulate命令和Graphviz软件生成的关系图是对集群配置信息的直观绘制,相对于庞大复杂的XML配置文件,以箭头指向的形式呈现的集群配置信息更容易被理解和掌握,而熟悉集群配置和资源关系的管理员便可通过这种直观的关系图来判断集群资源的启动运行情况。

image.png

图3-9 OpenStack集群CIB仿真截图


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。