5 配置和管理基础知识 #
HA 群集的主要目的是管理用户服务。Apache Web 服务器或数据库便是一种典型的用户服务。从用户角度来看,服务就是在客户的要求下执行某些操作。但对群集来说,服务只是可以启动或停止的资源,其本质与群集无关。
本章将介绍一些管理群集时需要了解的基本概念。以下章节介绍如何使用 SUSE Linux Enterprise High Availability 提供的各种管理工具执行主要的配置和管理任务。
5.1 使用情形 #
群集通常分为以下两类:
双节点群集
包含两个以上节点的群集。这通常表示节点数是奇数。
添加不同的拓扑可以衍生不同的用例。下面是最常见的用例:
- 位于一个位置的双节点群集
配置:FC SAN 或类似的共享存储,第 2 层网络。
使用情形:嵌入式群集,注重服务的高可用性,而不是实现数据冗余来进行数据复制。例如,此类设置可用于无线电台或装配生产线控制器。
- 位于两个位置的双节点群集(使用最广泛)
配置:对称的延伸群集,FC SAN,以及跨两个位置的第 2 层网络。
使用情形:典型的延伸群集,注重服务的高可用性和本地数据冗余。用于数据库和企业资源规划。最常用的设置之一。
- 位于三个位置的奇数数目的节点
配置:2×N+1 个节点,FC SAN 跨两个主要位置第三个辅助站点不部署 FC SAN,而是充当多数仲裁者。第 2 层网络至少跨两个主要位置。
使用情形:典型的延伸群集,注重服务的高可用性和数据冗余。例如数据库和企业资源规划。
5.2 仲裁判定 #
当一个或多个节点与群集的剩余节点之间的通讯失败时,即会发生群集分区。这些节点只能与同一分区中的其他节点通讯,并不知道被隔开的节点的存在。如果群集分区具有多数节点(或投票),则将其定义为具有仲裁(是“具有法定票数的”)。通过仲裁计算来获得此结果。要实现屏蔽,就必须具有仲裁。
仲裁不是由 Pacemaker 计算或确定。Corosync 可以直接处理双节点群集的仲裁,无需更改 Pacemaker 配置。
仲裁计算方式受以下因素的影响:
- 群集节点数
为使服务保持运行状态,包含两个以上节点的群集依赖法定票数(多数票决)来解决群集分区。根据以下公式,您可以计算群集正常运行所需的最小工作节点数目:
N ≥ C/2 + 1 N = minimum number of operational nodes C = number of cluster nodes
例如,五节点群集至少需要三个工作节点(或两个可以故障转移的节点)。
我们强烈建议使用双节点群集或奇数数目的群集节点。双节点群集适合跨两个站点的延伸设置。所含节点数为奇数的群集可以构建于单个站点上,也可以分散在三个站点之间。
- Corosync 配置
Corosync 是一个讯息交换和成员资格层,具体请参见第 5.2.1 节 “双节点群集的 Corosync 配置”和第 5.2.2 节 “N 节点群集的 Corosync 配置”。
5.2.1 双节点群集的 Corosync 配置 #
使用引导脚本时,Corosync 配置包含一个 quorum
段落,其中包含以下选项:
quorum { # Enable and configure quorum subsystem (default: off) # see also corosync.conf.5 and votequorum.5 provider: corosync_votequorum expected_votes: 2 two_node: 1 }
如果设置了 two_node: 1
,默认会自动启用 wait_for_all
选项。如果未启用 wait_for_all
,则群集应在两个节点上并行启动。否则,第一个节点会对缺失的第二个节点执行启动屏蔽。
5.2.2 N 节点群集的 Corosync 配置 #
如果不使用双节点群集,我们强烈建议使用奇数数目的节点来构成 N 节点群集。在仲裁配置方面,您有以下选择:
使用
crm cluster join
命令添加更多的节点,或手动调整 Corosync 配置。
如果要手动调整 /etc/corosync/corosync.conf
,请使用以下设置:
quorum { provider: corosync_votequorum 1 expected_votes: N 2 wait_for_all: 1 3 }
5.3 全局群集选项 #
全局群集选项控制群集在遇到特定情况时的行为方式。它们被分成若干组,可通过 Hawk2 和 crm
外壳等群集管理工具来查看和修改。
通常可保留预定义值。但为了使群集的关键功能正常工作,需要在进行基本群集设置后调整以下参数:
5.3.1 全局选项 no-quorum-policy
#
此全局选项定义在群集分区不具有法定票数(分区不具有多数节点投票)时应执行的操作。
可用值如下:
ignore
如果将
no-quorum-policy
设为ignore
,群集分区就会像其具有仲裁一样工作,即使情况并非如此。群集分区可以发出屏蔽命令,并继续进行资源管理。在 SLES 11 中,建议对双节点群集使用此设置。从 SLES 12 开始,
ignore
值已过时,不允许使用。Corosync 依据配置和条件为群集节点或单个节点提供“仲裁” — 或者不提供仲裁。对于双节点群集,当节点发生故障时,唯一有意义的行为就是始终做出反应。第一个步骤始终应该是尝试屏蔽丢失的节点。
freeze
如果失去法定票数,群集分区将会冻结。资源管理会继续:正在运行的资源不会停止(但可能会因监控事件而重启动),但受影响分区中不会再启动其他资源。
如果群集中的某些资源依赖于与其他节点的通讯(例如,OCFS2 挂载),建议对此类群集使用此设置。在这种情况下,默认设置
no-quorum-policy=stop
不起作用,因为它将导致以下状况:既无法停止这些资源,又无法连接对等节点。任何停止资源的尝试最终都会超时,并出现stop failure
,触发升级的恢复和屏蔽。stop
(默认值)如果失去法定票数,受影响群集分区中的所有资源都将以一种有序的方式停止。
suicide
如果失去法定票数,受影响群集分区中的所有节点都将被屏蔽。此选项只能与 SBD 结合使用,具体请参见第 13 章 “存储保护和 SBD”。
5.3.2 全局选项 stonith-enabled
#
此全局选项定义是否要应用屏蔽,以允许 STONITH 设备关闭发生故障的节点以及无法停止其资源的节点。默认情况下,此全局选项设置为 true
,因为对于常规的群集操作,有必要使用 STONITH 设备。根据默认值,如果未定义 STONITH 资源,群集会拒绝启动任何资源。
如果出于任何原因而需要禁用屏蔽,请将 stonith-enabled
设置为 false
,但请注意,这会影响产品的支持状态。此外,在 stonith-enabled="false"
的情况下,分布式锁管理器 (DLM) 等资源以及依赖于 DLM 的所有服务(例如 lvmlockd、GFS2 和 OCFS2)都将无法启动。
不支持无 STONITH 资源的群集。
5.4 Hawk2 简介 #
要配置和管理群集资源,请使用 Hawk2 或 crm 外壳 (crmsh) 命令行实用程序。
Hawk2 的用户友好 Web 界面可让您从 Linux 或非 Linux 计算机监控和管理 High Availability 群集。可使用(图形)Web 浏览器从群集内外的任何计算机访问 Hawk2。
5.4.1 Hawk2 要求 #
仅当系统满足以下要求后,用户才能登录 Hawk2:
- hawk2 软件包
要使用 Hawk2 连接的所有群集节点上都必须安装 hawk2 软件包。
- Web 浏览器
在要使用 Hawk2 访问群集节点的计算机上,需要安装启用了 JavaScript 和 Cookie 的(图形)Web 浏览器才能建立连接。
- Hawk2 服务
要使用 Hawk2,必须在要通过 Web 界面连接到的节点上启动相应的 Web 服务。请参见过程 5.1 “启动 Hawk2 服务”。
如果您已使用 crm 外壳提供的引导脚本设置群集,那么此时 Hawk2 服务已启用。
- 每个群集节点上的用户名、组和口令
Hawk2 用户必须是
haclient
组的成员。安装程序将创建名为hacluster
的 Linux 用户,该用户将添加到haclient
组中。使用
crm cluster init
脚本进行设置时,将为hacluster
用户设置默认口令。在启动 Hawk2 之前,请将它更改为安全口令。如果您未使用crm cluster init
脚本,请先为hacluster
设置口令,或者创建属于haclient
组的新用户。请在要使用 Hawk2 连接的所有节点上执行此操作。- 通配符证书处理
通配符证书是指对多个子域有效的公共密钥证书。例如,
*.example.com
的通配符证书可以保障login.example.com
、www.example.com
等域的安全。Hawk2 支持通配符证书及可转换证书。
/srv/www/hawk/bin/generate-ssl-cert
可生成自我签名的默认私用密钥和证书。要使用您自己的证书(可转换或通配符证书),请将生成的证书(位于
/etc/ssl/certs/hawk.pem
处)替换为您自己的证书。
在要连接的节点上,打开外壳并以
root
用户身份登录。通过输入以下命令,检查服务的状态
#
systemctl status hawk
如果服务未在运行,请使用以下命令启动服务
#
systemctl start hawk
如果希望 Hawk2 在引导时自动启动,请执行以下命令:
#
systemctl enable hawk
5.4.2 登录 #
Hawk2 Web 界面使用 HTTPS 协议和端口 7630
。
您无需使用 Hawk 登录个别群集节点,而是可以将一个浮动的虚拟 IP 地址(IPaddr
或 IPaddr2
2)配置为群集资源。该地址无需任何特殊配置。如此,无论 Hawk 服务在哪个物理节点上运行,客户端都可以连接到该服务。
在使用 crm 外壳提供的引导脚本设置群集时,系统会询问您是否配置虚拟 IP 以用于群集管理。
在任一台计算机上,启动 Web 浏览器并输入以下 URL:
https://HAWKSERVER:7630/
使用运行 Hawk Web 服务的任何群集节点的 IP 地址或主机名替换 HAWKSERVER。如果已配置虚拟 IP 地址以使用 Hawk2 进行群集管理,请使用该虚拟 IP 地址替换 HAWKSERVER。
注意:证书警告当您首次尝试访问 URL 时如果显示证书警告,则表示使用了自我签名证书。默认情况下,自我签名证书不被视为可信证书。
要校验证书,请联系群集操作员获取证书细节。
要继续,可在浏览器中添加例外,以绕过警告。
有关如何将自我签名证书替换为官方证书颁发机构签名的证书的信息,请参见替换自我签名证书。
在 Hawk2 登录屏幕上,输入
hacluster
用户(或属于haclient
组的任何其他用户)的 和 。单击
。
5.4.3 Hawk2 概述:主要元素 #
登录 Hawk2 后,左侧会显示一个导航栏,右侧会显示一个顶层行,其中包含若干链接。
默认情况下,以 root
或 hacluster
身份登录的用户对所有群集配置任务具有完全读写访问权。不过,使用访问控制列表 (ACL) 可以定义细化的访问权限。
如果在 CRM 中启用了 ACL,Hawk2 中的可用功能取决于用户角色和指派给这些角色的访问权限。Hawk2 中的hacluster
来执行。
5.4.3.2 顶层行 #
Hawk2 的顶层行显示以下条目:
- :单击可切换到批模式。可用于模拟和分阶段进行更改并通过单次事务应用这些更改。有关详细信息,请参见
5.4.4 配置全局群集选项 #
全局群集选项控制群集在遇到特定情况时的行为方式。它们被分成若干组,可通过 Hawk2 和 crmsh 之类的群集管理工具来查看和修改。通常可保留预定义值。但为了确保群集的关键功能正常工作,需要在进行基本群集设置后调整以下参数:
登录 Hawk2:
https://HAWKSERVER:7630/
从左侧导航栏中,选择
› 。要在屏幕右侧显示参数的简要描述,请将光标悬停在该参数上。
图 5.1︰ Hawk2 - 群集配置 #检查
和 的值并根据需要进行调整。- 设置为合适的值。有关详细信息,请参见
如果出于某些原因需要禁用屏蔽,请将
设置为no
。默认情况下,该参数设置为true
,因为执行常规的群集操作必须要使用 STONITH 设备。根据默认值,如果未配置 STONITH 资源,群集会拒绝启动任何资源。重要:不支持无 STONITH 的配置您必须为群集配置节点屏蔽机制。
全局群集选项
stonith-enabled
和startup-fencing
必须设置为true
。如果您更改这些选项,将会失去支持。
要从群集配置中去除某个参数,请单击该参数旁边的
图标。如果删除了某个参数,群集会将该参数视为采用了默认值。要向群集配置添加新参数,请从下拉框中选择一个参数。
如果您需要更改
或 ,请执行以下步骤:要调整某个值,请从下拉框中选择一个不同的值,或直接编辑该值。
要添加新的资源默认值或操作默认值,请从空下拉框中选择一项,然后输入值。如果有默认值,Hawk2 会自动建议这些值。
要去除某个参数,请单击该参数旁边的第 6.12 节 “资源选项(元属性)”和第 6.14 节 “资源操作”中所述的默认值。
图标。如果没有为 和 指定值,群集会使用
确认更改。
5.4.5 显示当前群集配置 (CIB) #
群集管理员有时需要知道群集配置。Hawk2 可以 crm 外壳语法、XML 和图表形式显示当前配置。要查看 crm 外壳语法形式的群集配置,请从左侧导航栏中选择
› ,并单击 。要改为以原始 XML 显示配置,请单击 。单击 会以图表显示 CIB 中配置的节点和资源。它还会显示各资源之间的关系。5.4.6 使用向导添加资源 #
Hawk2 向导是设置简单资源(如虚拟 IP 地址或 SBD STONITH 资源)的便捷方式。对于包含多个资源的复杂配置(例如 DRBD 块设备或 Apache Web 服务器的资源配置)而言,这种方法也十分有用。向导会引导您完成所有配置步骤,并提供您需要输入的参数的相关信息。
登录 Hawk2:
https://HAWKSERVER:7630/
从左侧导航栏中,选择
› 。单击各个类别旁边的向下箭头图标将其展开,然后选择所需的向导。
按照屏幕指导执行操作。完成最后的配置步骤后,
您所输入的值。Hawk2 会显示它将执行的操作以及配置的最终成果。根据配置,您可能会收到提示要求输入
root
口令才能 配置。
有关详细信息,请参见第 6 章 “配置群集资源”。
5.4.7 使用批模式 #
Hawk2 提供群集模拟器。该模式可用于以下操作:
,包括对群集进行分阶段更改并通过单次事务应用这些更改,而不是让每项更改立即生效。
模拟更改和群集事件,例如,了解可能失败的情况。
例如,在创建相互依赖的资源组时,可以使用批模式。通过使用批模式,您可以避免将中间或不完整的配置应用到群集。
启用批模式后,您可以添加或编辑资源和约束,或更改群集配置。此外,还可以模拟群集中的事件,包括变为上线或下线的节点、资源操作,以及要授予或撤消的票据。有关详细信息,请参见 过程 5.6 “插入节点、资源或票据事件”。
群集模拟器会在每次更改后自动运行,并在用户界面上显示预期效果。举例而言,这还意味着当您在批模式下停止某资源时,用户界面上会将该资源显示为已停止,但实际上,该资源仍在运行中。
某些向导包含除纯群集配置以外的其他操作。在批模式下使用这些向导时,群集配置以外的任何其他更改都将立即应用到在线系统。
因此,需要 root
权限的向导无法在批模式下执行。
登录 Hawk2:
https://HAWKSERVER:7630/
要激活批模式,请从顶层行选择
。顶层行下方即会另外显示一栏,指出批模式处于活动状态,且包含指向您可在批模式下执行的操作的链接。
图 5.3︰ Hawk2 批模式已激活 #当批模式处于活动状态时,对群集执行任意更改,例如添加或编辑资源和约束,或编辑群集配置。
系统将会模拟更改,并将其显示在所有屏幕上。
要查看所做更改的细节,请从批模式栏中选择
。 窗口即会打开。对于任何配置更改,该模式会以 crmsh 语法显示实时状态与模拟更改之间的差异:以
-
字符开头的行表示当前状态,而以+
开头的行显示的是预期状态。要插入事件或查看更多细节,请参见过程 5.6。否则请 窗口。
选择
或 模拟的更改,并确认您的选择。此操作还会停用批模式,使您回到正常模式。
在批模式下运行时,Hawk2 还允许您插入
和 。可让您更改节点的状态。可用的状态有
、 和 。可让您更改资源的一些属性。例如,您可以设置操作(如
monitor
、start
、stop
)、操作要应用到的节点,以及要模拟的预期结果。可让您测试授予和撤消票据(用于 Geo 群集)的影响。
登录 Hawk2:
https://HAWKSERVER:7630/
如果批模式未启动,请单击顶层行上的
切换到批模式。在批模式栏中,单击
打开 窗口。要模拟节点的状态更改:
单击
› 。选择要操作的
,然后选择其目标 。确认更改。您的事件便会添加到
对话框中所列的事件队列中。
模拟资源操作:
单击
› 。选择要操作的
和要模拟的 。如果必要,请定义
。选择要运行操作的
及目标 。您的事件便会添加到 对话框中所列的事件队列中。确认更改。
要模拟票据操作,请执行以下操作:
单击
› 。依次选择要操作的
和要模拟的 。确认更改。您的事件便会添加到
对话框中所列的事件队列中。
图 5.4)会为每个插入的事件显示新的一行。此处列出的所有事件都会立即被模拟并反映到 屏幕上。
对话框(如果您还执行了任何配置更改,在线状态和模拟更改之间的差异会显示在所插入事件的下方。
图 5.4︰ Hawk2 批模式 - 插入的事件和配置更改 #要去除插入的事件,请单击该事件旁边的
图标。Hawk2 会相应地更新 屏幕。要查看模拟运行的更多细节,请单击
并选择以下选项之一:显示详细的摘要。
- /
显示转换的图形表示形式。
显示转换的 XML 表示形式。
如果您已审阅模拟的更改,请关闭
窗口。要退出批模式,请
或 模拟的更改。
5.5 crmsh 简介 #
要配置和管理群集资源,可以使用 crm 外壳 (crmsh) 命令行实用程序或 Hawk2(基于 Web 的用户界面)。
本节介绍命令行工具 crm
。crm
命令有多个子命令,用于管理资源、CIB、节点和资源代理等对象。它提供了全面的帮助系统,并嵌入了示例。所有示例都遵循附录 B 中所述的命名约定。
事件记录到 /var/log/crmsh/crmsh.log
中。
使用不带参数(或只带一个 sublevel 参数)的 crm,crm 外壳将进入交互式模式。此模式由以下提示符指示:
crm(live/HOSTNAME)
为了容易阅读,我们的文档在交互式 crm 提示符中省略了主机名。仅当您需要在特定的节点(如 alice)上运行交互式外壳时,才包含主机名,例如:
crm(live/alice)
5.5.1 登录 #
管理群集需要有充足的权限。以下用户可以运行 crm
命令及其子命令:
root
用户或具有sudo
特权的用户。这些用户通过使用 SSH 执行 crmsh 操作(例如crm cluster init
、crm cluster join
和crm report
)拥有所有群集节点的完整权限。他们还可以对 CIB 进行更改,例如添加资源和约束。CRM 所有者用户(通常是在群集安装期间默认创建的用户
hacluster
)。此用户可以对 CIB 进行更改,但执行使用 SSH 的操作(例如crm report
)的权限受到限制。提示:非特权用户使用
user
选项,您能以普通(非特权)用户身份运行crm
及其子命令,而且必要时能使用sudo
更改其 ID。例如,下面的命令会将hacluster
设置为特权用户 ID:#
crm options user hacluster
必须设置
/etc/sudoers
,这样sudo
就不会要求提供口令。
对于使用 SSH 的操作,群集使用无口令 SSH 访问方式在节点之间进行通讯。如果使用 crm cluster init
设置群集,脚本会检查 SSH 密钥是否存在,如果尚不存在,则会生成这些密钥。如果使用 YaST 群集模块设置群集,您必须自行配置 SSH 密钥。
在大多数情况下,root
或 sudo
用户的 SSH 密钥必须存在于节点上(或在其上生成)。或者,sudo
用户的 SSH 密钥可以存在于本地计算机上,并通过 SSH 代理转发传递到节点。如果您需要避免在节点上存储 SSH 密钥,此方法可能很有用,不过这需要进行额外的配置。
在本地计算机上,启动 SSH 代理并为其添加密钥。有关详细信息,请参见 SUSE Linux Enterprise Server 的《Security and Hardening Guide》中的 Automated public key logins with ssh-agent。
以具有
sudo
特权的用户身份登录到第一个群集节点,并使用-A
选项启用 SSH 代理转发:user@local >
ssh -A USER@NODE1
使用
crm cluster init
脚本初始化群集:user@node1 >
sudo --preserve-env=SSH_AUTH_SOCK \
1crm cluster init --use-ssh-agent
2初始配置完成后,退出第一个节点并使用
-A
选项登录到第二个节点。使用
crm cluster join
脚本为群集添加第二个节点。使用-c
选项指定之前初始化群集的用户和节点:user@node2 >
sudo --preserve-env=SSH_AUTH_SOCK \ crm cluster join --use-ssh-agent -c USER@NODE1
如果您是使用 YaST 而不是引导脚本设置群集的,系统将不会自动生成 SSH 密钥。要在启用 SSH 代理转发的情况下配置 SSH 密钥,可以单独使用引导脚本的 ssh
阶段。应在使用 YaST 配置群集后、在使群集上线前运行这些命令。
在第一个节点上运行以下命令:
user@node1 >
sudo --preserve-env=SSH_AUTH_SOCK \
crm cluster init ssh --use-ssh-agent
在所有其他节点上运行以下命令:
user@node2 >
sudo --preserve-env=SSH_AUTH_SOCK \
crm cluster join ssh --use-ssh-agent -c USER@NODE1
5.5.2 获得帮助 #
可通过以下方式之一访问帮助:
输出
crm
及其命令行选项的用法:#
crm --help
列出所有可用的命令:
#
crm help
访问其他帮助部分,而不只是命令参考:
#
crm help topics
查看
configure
子命令的完整帮助文本:#
crm configure help
列显
configure
的子命令group
的语法、用法及示例:#
crm configure help group
以下命令的作用相同:
#
crm help configure group
基本上 help
子命令(不要与 --help
选项混淆)的所有输出都会打开一个文本编辑器。此文本编辑器允许您向上/向下滚动,以便更加方便地阅读帮助文本。要退出文本编辑器,请按 Q 键。
crmsh 不仅为交互式外壳提供 Tab 键补全,还全面支持在 Bash 中直接使用此功能。例如,键入 crm help
config
→| 会补全文字,就像在交互式外壳中一样。
5.5.3 执行 crmsh 的子命令 #
crm
命令本身可按以下方式使用:
直接: 将所有子命令与
crm
结合使用,按 Enter 键,便会立即看到输出。例如,输入crm help ra
可获取有关ra
子命令(资源代理)的信息。可以缩写子命令,前提是缩写后的子命令是唯一的。例如,您可以将
status
缩写为st
,crmsh 可以识别该缩写。另一项功能是缩写参数。通常,您是通过
params
关键字添加参数的。如果params
是第一个且是唯一存在的部分,则可以省略。例如,下面一行:#
crm primitive ipaddr IPaddr2 params ip=192.168.0.55
相当于下行:
#
crm primitive ipaddr IPaddr2 ip=192.168.0.55
作为 crm 外壳脚本: 外壳脚本包含
crm
crm 的子命令。有关详细信息,请参见第 5.5.5 节 “使用 crmsh 的外壳脚本”。作为 crmsh 群集脚本:此类脚本是元数据、对 RPM 包的参照、配置文件及多个 crmsh 子命令捆绑在一起并以单个描述性名称命名的集合。可以通过
crm script
命令来管理这些内容。请不要将它们与 crmsh 外壳脚本相混淆:尽管两者具有一些共同的目标,但 crm 外壳脚本只包含子命令,而群集脚本所包含的远远不只是简单的命令枚举。有关详细信息,请参见第 5.5.6 节 “使用 crmsh 的群集脚本”。
作为内部外壳交互: 输入
crm
以进入内壳。提示符会切换为crm(live)
。使用help
可获取可用子命令的概述。由于内壳具有不同级别的子命令,您可以键入一个子命令然后按 Enter“进入”相应的级别。例如,如果输入
resource
,则进入资源管理级别。提示符会切换为crm(live)resource#
。要退出该内部的外壳,请使用quit
命令。如果需要返回上一个级别,可使用back
、up
、end
或cd
。键入
crm
和相应的子命令(不带任何选项)并按 Enter,即可直接进入该级别。该内部外壳还支持使用 Tab 键补全子命令和资源。键入命令的开头,然后按 →| 键,
crm
便会补全相应命令。
crmsh 还支持执行同步命令。使用 -w
选项可以激活该功能。如果已启动 crm
但未指定 -w
,之后可以将用户首选项的 wait
设为 yes
(options
wait yes
) 来启用它。如果此选项已启用,则 crm
将会等到事务完成为止。事务一经启用,就会打印出点以指示进度。同步命令执行仅适用于 resource
start
之类的命令。
crm
工具有管理功能(子命令 resource
和 node
),可用于配置设置(configure
和 cib
)。
下面的小节概述了 crm
工具的重要方面。
5.5.4 显示有关 OCF 资源代理的信息 #
由于在群集配置中一直需要处理资源代理,crm
工具包含了 ra
命令。使用该命令可以显示有关资源代理的信息并对其进行管理(如需其他信息,另请参见第 6.2 节 “支持的资源代理类别”):
#
crm ra
crm(live)ra#
classes
命令可列出所有类别和提供方:
crm(live)ra#
classes
lsb
ocf / heartbeat linbit lvm2 ocfs2 pacemaker
service
stonith
systemd
要大致了解某个类别(和提供方)的所有可用资源,请使用 list
命令:
crm(live)ra#
list ocf
AoEtarget AudibleAlarm CTDB ClusterMon
Delay Dummy EvmsSCC Evmsd
Filesystem HealthCPU HealthSMART ICP
IPaddr IPaddr2 IPsrcaddr IPv6addr
LVM LinuxSCSI MailTo ManageRAID
ManageVE Pure-FTPd Raid1 Route
SAPDatabase SAPInstance SendArp ServeRAID
...
可使用 info
查看资源代理的概述:
crm(live)ra#
info ocf:linbit:drbd
This resource agent manages a DRBD* resource
as a master/slave resource. DRBD is a shared-nothing replicated storage
device. (ocf:linbit:drbd)
Master/Slave OCF Resource Agent for DRBD
Parameters (* denotes required, [] the default):
drbd_resource* (string): drbd resource name
The name of the drbd resource from the drbd.conf file.
drbdconf (string, [/etc/drbd.conf]): Path to drbd.conf
Full path to the drbd.conf file.
Operations' defaults (advisory minimum):
start timeout=240
promote timeout=90
demote timeout=90
notify timeout=90
stop timeout=100
monitor_Slave_0 interval=20 timeout=20 start-delay=1m
monitor_Master_0 interval=10 timeout=20 start-delay=1m
按 Q 退出查看器。
crm
在之前的示例中,我们使用了 crm
命令的内壳。但是您不一定非要使用它。将相应子命令添加到 crm
中也可获得相同的结果。例如,在外壳中输入 crm ra list ocf
可以列出所有 OCF 资源代理。
5.5.5 使用 crmsh 的外壳脚本 #
Crmsh 外壳脚本提供了将 crmsh 子命令枚举到文件中的便捷方式。如此,您便可轻松地注释特定行或稍后重新运行这些行。请注意,crmsh 外壳脚本只能包含 crmsh 子命令,不允许包含任何其他命令。
您需要先创建包含特定命令的文件,然后才能使用 crmsh 外壳脚本。例如,下面的文件会列显群集的状态并提供所有节点的列表:
# A small example file with some crm subcommands
status
node list
以井字符号 (#
) 开头的所有行都是注释,系统会将其忽略。如果某行过长,可在结尾插入反斜杠 (\
),然后换到下一行。为方便阅读,建议将属于特定子命令的行进行缩进。
要使用此脚本,请使用以下其中一种方法:
#
crm -f example.cli
#
crm < example.cli
5.5.6 使用 crmsh 的群集脚本 #
从所有群集节点收集信息并部署任何更改是一项关键的群集管理任务。您不必在不同的节点上手动执行相同的过程(这很容易出错),可以使用 crmsh 群集脚本来代替该过程。
请不要将它们与 crmsh 外壳脚本相混淆,第 5.5.5 节 “使用 crmsh 的外壳脚本”中对后者进行了介绍。
对比 crmsh 外壳脚本,群集脚本另外会执行如下任务:
安装特定任务所需的软件。
创建或修改任何配置文件。
收集信息并报告群集的潜在问题。
将更改部署到所有节点。
crmsh 群集脚本并不能取代其他群集管理工具,它只是提供了一种集成的方式用于在群集中执行上述任务。有关详细信息,请参见https://crmsh.github.io/scripts/。
5.5.6.1 用法 #
要获取所有可用群集脚本的列表,请运行:
#
crm script list
要查看脚本的组成部分,请使用 show
命令和群集脚本的名称,例如:
#
crm script show mailto
mailto (Basic)
MailTo
This is a resource agent for MailTo. It sends email to a sysadmin
whenever a takeover occurs.
1. Notifies recipients by email in the event of resource takeover
id (required) (unique)
Identifier for the cluster resource
email (required)
Email address
subject
Subject
show
的输出包含标题、简要说明和过程。每个过程分为一系列按给定顺序执行的步骤。
每个步骤都包含一份必要参数与可选参数及其简要说明和默认值的列表。
每个群集脚本都可识别一组通用参数。这些参数可传递给任何脚本:
参数 | 参数 | 说明 |
---|---|---|
action | INDEX | 如果设置此参数,则只会执行单个操作(verify 会返回索引) |
dry_run | BOOL | 如果设置此参数,则只会模拟执行(默认值:no) |
nodes | LIST | 列出要对其执行脚本的节点 |
port | NUMBER | 要连接的端口 |
statefile | FILE | 在以单一步进方式执行时,状态将保存在给定文件中 |
sudo | BOOL | 如果设置此参数,crm 会在适当的情况下提示输入 sudo 口令并使用 sudo(默认值为 no) |
timeout | NUMBER | 以秒为单位的执行超时(默认值:600) |
user | USER | 以给定用户的身份运行脚本 |
5.5.6.2 校验和运行群集脚本 #
在运行某个群集脚本之前,请检查该脚本将要执行的操作并校验其参数,以免出现问题。群集脚本可能会执行一系列操作,并且可能会出于各种原因而失败。因此,在运行脚本之前校验参数有助于避免出现问题。
例如,mailto
资源代理需要唯一的标识符和一个电子邮件地址。要校验这些参数,请运行:
#
crm script verify mailto id=sysadmin email=tux@example.org
1. Ensure mail package is installed
mailx
2. Configure cluster resources
primitive sysadmin MailTo
email="tux@example.org"
op start timeout="10"
op stop timeout="10"
op monitor interval="10" timeout="10"
clone c-sysadmin sysadmin
verify
命令会列显步骤,并将所有占位符替换为给定的参数。verify
会报告发现的任何问题。如果一切正常,请将 verify
命令替换为 run
:
#
crm script run mailto id=sysadmin email=tux@example.org
INFO: MailTo
INFO: Nodes: alice, bob
OK: Ensure mail package is installed
OK: Configure cluster resources
使用 crm status
检查您的资源是否已集成到群集中:
#
crm status
[...]
Clone Set: c-sysadmin [sysadmin]
Started: [ alice bob ]
5.5.7 使用配置模板 #
配置模板可为 crmsh 提供即时可用的群集配置。请不要将其与资源模板(如第 6.8.2 节 “使用 crmsh 创建资源模板”中所述)混淆。资源模板只适用于群集,而不适用于 crm 外壳。
配置模板只需稍作更改,即可满足特定用户的需要。每次使用模板创建配置时,都会出现警告消息,提示您哪些可以稍后编辑以供将来自定义。
以下步骤显示了如何创建简单有效的 Apache 配置:
以
root
用户身份登录,然后启动crm
交互式外壳:#
crm configure
从配置模板创建一个新配置:
切换到
template
子命令:crm(live)configure#
template
列出可用的配置模板:
crm(live)configure template#
list templates
gfs2-base filesystem virtual-ip apache clvm ocfs2 gfs2确定需要的配置模板。由于我们需要 Apache 配置,因此选择了
apache
模板并将其命名为g-intranet
:crm(live)configure template#
new g-intranet apache
INFO: pulling in template apache INFO: pulling in template virtual-ip
定义参数:
列出您创建的配置:
crm(live)configure template#
list
g-intranet显示需要由您填充的最少的必要更改:
crm(live)configure template#
show
ERROR: 23: required parameter ip not set ERROR: 61: required parameter id not set ERROR: 65: required parameter configfile not set调用首选的文本编辑器,填写显示为错误(如步骤 3.b 中所示)的所有行:
crm(live)configure template#
edit
显示配置并检查配置是否有效(粗体文本取决于您在步骤 3.c 中进入的配置):
crm(live)configure template#
show
primitive virtual-ip ocf:heartbeat:IPaddr \ params ip="192.168.1.101" primitive apache apache \ params configfile="/etc/apache2/httpd.conf" monitor apache 120s:60s group g-intranet \ apache virtual-ip应用配置:
crm(live)configure template#
apply
crm(live)configure#
cd ..
crm(live)configure#
show
将更改提交到 CIB:
crm(live)configure#
commit
如果知道细节,可以更加简化命令。上述过程可汇总为外壳上的以下命令:
#
crm configure template \
new g-intranet apache params \
configfile="/etc/apache2/httpd.conf" ip="192.168.1.101"
如果在 crm
内壳中,可使用以下命令:
crm(live)configure template#
new intranet apache params \
configfile="/etc/apache2/httpd.conf" ip="192.168.1.101"
但是,前一条命令仅会从配置模板创建其配置。它不会将其应用或提交到 CIB。
5.5.8 使用阴影配置进行测试 #
阴影配置可用于测试不同的配置方案。如果创建了多个阴影配置,则可逐一测试这些配置,以查看更改的影响。
一般的流程显示如下:
以
root
用户身份登录,然后启动crm
交互式外壳:#
crm configure
创建新的阴影配置:
crm(live)configure#
cib new myNewConfig
INFO: myNewConfig shadow CIB created如果省略阴影 CIB 的名称,将会创建临时名称
@tmp@
。要将当前的活动配置复制到阴影配置中,可使用以下命令,否则请跳过此步骤:
crm(myNewConfig)#
cib reset myNewConfig
使用上面的命令便于稍后修改现有资源。
照常进行更改。创建阴影配置后,会应用所有更改。要保存所有更改,请使用以下命令:
crm(myNewConfig)#
commit
如果再次需要活动群集配置,可使用以下命令切换回此配置:
crm(myNewConfig)configure#
cib use live
crm(live)#
5.5.9 调试配置更改 #
将配置更改加载回群集之前,建议使用 ptest
复查更改。使用 ptest
命令可显示提交更改后产生的操作图。需要 graphviz 软件包才能显示这些图。以下示例是一个抄本,添加了监控操作:
#
crm configure
crm(live)configure#
show fence-bob
primitive fence-bob stonith:apcsmart \
params hostlist="bob"
crm(live)configure#
monitor fence-bob 120m:60s
crm(live)configure#
show changed
primitive fence-bob stonith:apcsmart \
params hostlist="bob" \
op monitor interval="120m" timeout="60s"
crm(live)configure#
ptest
crm(live)configure#
commit
5.5.10 群集图表 #
要输出群集图表,请使用 crm configure graph
命令。它会在当前的窗口上显示当前配置,因此需要配备 X11。
如果您希望使用可缩放矢量图 (SVG),请使用以下命令:
#
crm configure graph dot config.svg svg
5.5.11 管理 Corosync 配置 #
Corosync 是大多数 HA 群集的基础消息交换层。corosync
子命令提供用于编辑和管理 Corosync 配置的命令。
例如,要列出群集的状态,请使用 status
:
#
crm corosync status
Printing ring status.
Local node ID 175704363
RING ID 0
id = 10.121.9.43
status = ring 0 active with no faults
Quorum information
------------------
Date: Thu May 8 16:41:56 2014
Quorum provider: corosync_votequorum
Nodes: 2
Node ID: 175704363
Ring ID: 4032
Quorate: Yes
Votequorum information
----------------------
Expected votes: 2
Highest expected: 2
Total votes: 2
Quorum: 2
Flags: Quorate
Membership information
----------------------
Nodeid Votes Name
175704363 1 alice.example.com (local)
175704619 1 bob.example.com
diff
命令会比较所有节点上的 Corosync 配置(如果未另行指定)并列显各节点之间的差异:
#
crm corosync diff
--- bob
+++ alice
@@ -46,2 +46,2 @@
- expected_votes: 2
- two_node: 1
+ expected_votes: 1
+ two_node: 0
有关细节,请参见https://crmsh.nongnu.org/crm.8.html#cmdhelp_corosync。
5.5.12 设置独立于 cib.xml
的口令 #
如果群集配置包含口令之类的敏感信息,应将其存储在本地文件中。这样的话,这些参数将永远不会记录到或导入支持报告中。
使用 secret
前,请先运行 show
命令了解一下所有资源的概况:
#
crm configure show
primitive mydb mysql \
params replication_user=admin ...
要为上面的 mydb
资源设置口令,请使用以下命令:
#
crm resource secret mydb set passwd linux
INFO: syncing /var/lib/heartbeat/lrm/secrets/mydb/passwd to [your node list]
使用以下命令可以取回保存的密码:
#
crm resource secret mydb show passwd
linux
各节点间的参数需要同步;crm resource secret
命令可用于执行此操作。强烈建议仅使用此命令来管理机密参数。
5.6 更多信息 #
- https://crmsh.github.io/
用于 High Availability 群集管理的高级命令行界面 crm 外壳 (crmsh) 的主页。
- https://crmsh.github.io/documentation
提供有关 crm 外壳的若干文档,包括使用 crmsh 完成基本群集设置的 Getting Started 教程,以及 crm 外壳的综合性Manual。后者可在 https://crmsh.github.io/man-2.0/ 上访问。https://crmsh.github.io/start-guide/ 上提供了相关教程。
- https://clusterlabs.org/
Pacemaker 主页,Pacemaker 是 SUSE Linux Enterprise High Availability 随附的群集资源管理器。
- https://www.clusterlabs.org/pacemaker/doc/
提供数个综合性手册,以及一些解释一般概念的简短文档。例如:
Pacemaker Explained:包含全面、详细的参考信息。
Colocation Explained
Ordering Explained