你不知道什么是起搏器模块吗?不要一呆呆地活着啊!

從一開始就用標題冒犯了大家,其實只是個惡作劇而已。

首先

你知道心脏起搏器吗?Pacemaker是一个高可用性群集平台的开源软件,可以说是事实上的标准。在Qiita上有许多带有pacemaker标签的文章。不熟悉Pacemaker的系统工程师们可能没有注意到它。请注意,尽管在容器时代,Kubernetes开始承担应用系统的高可用性群集平台的角色,但不是所有软件都被容器化。Pacemaker在各种系统中仍然扮演着重要的高可用性群集平台的角色。

然而,尽管如上所述,没有专门用于配置Pacemaker的Ansible模块。虽然有一个名为pacemaker_cluster的模块,但它不适用于集群配置,只能用于在线、离线、重启和清理已配置的集群。

因此,使用Ansible配置Pacemaker上的集群一直以来都是困难的。有些人制作了专门用于资源配置的Ansible角色,而其他人制作了使用Pacemaker配置命令的Ansible模块。然而,这些方法往往难以保证幂等性,存在各种限制和困难。

我也在编写类似的Ansible模块,但由于crm命令已经过时,所以我创建了一个新的用于设置Pacemaker的Ansible模块。我已经在https://github.com/yosshy/ansible-pacemaker2 上发布了该模块。

模块构成

目前,以下8种Ansible模块已经完备。

    • pacemaker_resource:リソース設定用

 

    • pacemaker_resource_default:リソースのデフォルト設定用

 

    • pacemaker_resource_group:リソースグループ設定用

 

    • pacemaker_colocation:Colocation 制約設定用

 

    • pacemaker_location:Location 制約設定用

 

    • pacemaker_order:Order 制約設定用

 

    • pacemaker_order_set:Order Set 制約設定用

 

    pacemaker_property:クラスタプロパティ設定用

这些模块使用cibadmin来获取当前的Pacemaker集群配置,并进行配置,因此Ansible需要预先在SSH连接的主机上安装cibadmin。不过,通常Pacemaker集群配置了环境,cibadmin已经安装在其中了。

每个模块都在执行相同的处理任务。

    1. 使用cibadmin命令以XML格式获取现有的Pacemaker设置。

 

    1. 根据模块的参数修改XML的一部分。

 

    如果在修改之前和之后XML之间有差异,则使用cibadmin命令将XML应用于Pacemaker。

这样一来,确保了 Ansible 模块要求的“如果需要,则进行配置;如果不需要,则不做任何操作”的等同性。

安装指南

我会准备一个Ansible模块存放处。

$ mkdir -p ~/.ansible/plugins/modules

我会克隆存储库。

$ git clone https://github.com/yosshy/ansible-pacemaker2

将位于库中的文件复制到Ansible模块位置。

$ cp ansible-pacemaker2/library/* ~/.ansible/plugins/modules

Ansible 模块的存放位置默认有几个选项,可以通过 ansible.cfg、环境变量或 ansible/ansible-playbook 执行时的选项进行更改。详情请参考以下页面。

    • DEFAULT_MODULE_PATH

 

    Embedding Modules and Plugins In Roles

例子的应用

我会引用在README中写的示例(用于MariaDB主从集群设置的2个节点的Ansible Playbook)。节点名暂时设为server1、server2。


# ①Pacemaker クラスタの設定
- pacemaker_property:
    params: stonith-enabled=false start-failure-is-fatal="false"

# ②MariaDB 実行リソースの設定
- pacemaker_resource:
    name: mariadb-service
    type: ocf:heartbeat:mysql
    params: |
      binary=/usr/bin/mysqld_safe
      datadir=/var/lib/mysql
      log=/var/log/mariadb/mariadb.log
      pid=/run/mariadb/mariadb.pid
      replication_user=repl
      replication_passwd=slavepass
    op:
      - start interval=0 timeout=120s
      - stop interval=0 timeout=120s
      - monitor interval=20s timeout=30s
      - monitor interval=10s role=Master timeout=30s
      - monitor interval=30s role=Slave timeout=30s
      - promote interval=0 timeout=120s
      - demote interval=0 timeout=120s
      - notify interval=0 timeout=90s
    master: |
      master-max=1
      master-node-max=1
      clone-max=2
      clone-node-max=1
      notify=true

#③MariaDB 用フローティング IP リソースの設定
- pacemaker_resource:
    name: mariadb-vip
    type: ocf:heartbeat:IPaddr2
    params: ip=192.168.0.100
    op:
      - monitor interval=30s

#④2,3の各リソースによるリソースグループの設定
- pacemaker_resource_group:
    resource:
      - mariadb-service
      - mariadb-vip

#⑤2,3の各リソースの同居設定
- pacemaker_colocation:
    resource1: mariadb-service=master
    resource2: mariadb-vip
    score: INFINITY

#⑥3のリソース起動サーバで server1 を優先するよう設定
- pacemaker_locaiton:
    resource: mariadb-vip
    node: server1
    score: 100

基于纸面限制,我不会在这里进行详细解释,但对于已经使用过 pcs 命令的人来说,这并不是太难的内容。
各种属性将以 key=value 的形式列举为 params 参数的值。我曾考虑过使用字典类型,但为了避免与 pacemaker_resource 模块的 op 参数列表条目的格式不匹配(或变得复杂),选择了这种形式。如果使用 “|” ,则可以相对清晰地描述。

请在安装模块后执行以下命令以获取各模块的说明。

$ ansible-doc <モジュール名>

请注意

正常设置的Pacemaker集群环境通常可以通过在集群节点上执行pcs命令来进行Pacemaker的配置和控制。这同样适用于Pacemaker模块集。
因此,在使用Pacemaker模块集的Ansible Playbook中,可以将Pacemaker的配置和控制放在Playbook或者Task中进行。

run_once: yes

最好指定一个节点来执行模块。

在日本时间的平成时代最后一个圣诞节中,请大家尽情享受pacemaker模块系列。

广告
将在 10 秒后关闭
bannerAds