pcsコマンドの使い方

PacenmakerはCUI(コマンドラインユーザインタフェース)で動かすソフトです。CUIとしてはcrmsh(crm)とpcsの2系統のコマンドが開発され、crmshはSuSE系、pcsはRedhat系のクラスタシステムに採用されています。とはいえ10年以上前から使われているcrmshはRedhat系のシステムで使いたいという要望もあり、RHEL7、CentOS7でもcrmshの開発サイトからcrmのレポジトリを追加するとインストールが可能になっています。

ところが2020年7月時点で、RHEL8、CentOS8に対応したバージョンはまだ公開されておらず、Redhatの最新OSではpcsコマンドを使わざるを得ない状況です。

このブログではRHEL8、CentOS8を使ってHAシステムを構築する場合に最低限覚えておきたいpcsのコマンドについて説明します。

1.インストール

CentOS7では次のコマンドを実行すればインストールできます。

[root@node1 ~]# yum install pcs corosync pacemaker

2.ソフトウェアの起動

pscの常駐プログラムpcsdを両ノードで起動します。

[root@node1 ~]# systemctl start pcsd

[root@node1 ~]# systemctl status pcsd
● pcsd.service - PCS GUI and remote configuration interface
Loaded: loaded (/usr/lib/systemd/system/pcsd.service; disabled; vendor preset: disabled)
Active: active (running) since 金 2020-07-17 13:20:11 JST; 37s ago
Docs: man:pcsd(8)
man:pcs(8)
Main PID: 2196 (pcsd)
CGroup: /system.slice/pcsd.service
└─2196 /usr/bin/ruby /usr/lib/pcsd/pcsd

7月 17 13:20:09 node1.example.com systemd[1]: Starting PCS GUI and remote configuration interface...
7月 17 13:20:11 node1.example.com systemd[1]: Started PCS GUI and remote configuration interface.

動作確認ができたら、haclusterユーザのパスワードを設定します。

[root@node1 ~]# passwd hacluster
ユーザー hacluster のパスワードを変更。
新しいパスワード:
新しいパスワードを再入力してください:
passwd: すべての認証トークンが正しく更新できました。

次にnode1とnode2の2ノードに対してクラスタを定義します。

[root@node1 ~]# pcs cluster auth node1 node2 -u hacluster
Password: <-- hacluser
node1: Authorized
node2: Authorized
[root@node1 ~]#

CentOS8ではpcsの仕様が変わっていて、pcs clusterではなくpcs hostと入力します。
クラスターの定義の後、setupを実行します。この実行でCorosyncの設定が作成されます。

[root@node1 ~]# pcs cluster setup hacluster node1 node2
No addresses specified for host 'node2', using 'node1'
No addresses specified for host 'node2', using 'node2'
....
Cluster has been successfully set up.
[root@node1 ~]# 

最後に両ノードでPacemakerを起動します。

[root@node1 ~]# systemctl start pacemaker
[root@node1 ~]# systemctl status pacemaker
● pacemaker.service - Pacemaker High Availability Cluster Manager
Loaded: loaded (/usr/lib/systemd/system/pacemaker.service; disabled; vendor preset: disabled)
Active: active (running) since 金 2020-07-17 13:32:04 JST; 20s ago
Docs: man:pacemakerd
https://clusterlabs.org/pacemaker/doc/en-US/Pacemaker/1.1/html-single/Pacemaker_Explained/index.html
Main PID: 2471 (pacemakerd)
CGroup: /system.slice/pacemaker.service
├─2471 /usr/sbin/pacemakerd -f
├─2472 /usr/libexec/pacemaker/cib
├─2473 /usr/libexec/pacemaker/stonithd
├─2474 /usr/libexec/pacemaker/lrmd
├─2475 /usr/libexec/pacemaker/attrd
├─2476 /usr/libexec/pacemaker/pengine
└─2477 /usr/libexec/pacemaker/crmd

7月 17 13:32:07 node1.example.com crmd[2477]: notice: Could not obtain a node name for corosync nodeid 2
7月 17 13:32:07 node1.example.com crmd[2477]: notice: Could not obtain a node name for corosync nodeid 2
7月 17 13:32:07 node1.example.com crmd[2477]: notice: Node (null) state is now member
7月 17 13:32:07 node1.example.com attrd[2475]: notice: Could not obtain a node name for corosync nodeid 2
7月 17 13:32:07 node1.example.com attrd[2475]: notice: Node (null) state is now member
7月 17 13:32:07 node1.example.com stonith-ng[2473]: notice: Could not obtain a node name for corosync nodeid 2
7月 17 13:32:07 node1.example.com stonith-ng[2473]: notice: Node (null) state is now member
7月 17 13:32:07 node1.example.com cib[2472]: notice: Could not obtain a node name for corosync nodeid 2
7月 17 13:32:07 node1.example.com cib[2472]: notice: Node (null) state is now member
7月 17 13:32:08 node1.example.com crmd[2477]: notice: Could not obtain a node name for corosync nodeid 2

3.リソースの定義

pcsコマンドでの設定入力は、pcsで設定を直接更新しても良いのですが入力を失敗したときの修正が難しいため、一旦ファイルを作って設定を更新する方法を紹介します。

まずdrbdclusterという名前の設定ファイルを作成し、-fオプションでPacemakerの設定をこのファイルに書き込みます。下記の例ではsetup.shというファイルにpcsコマンドを順番に書いてあります。

-----
[root@node1 ~]# cat setup.sh
pcs cluster cib drbdcluster
pcs -f drbdcluster resource create res_drbd_r0 ocf:linbit:drbd drbd_resource=r0
pcs -f drbdcluster resource create res_fsmnt Filesystem device=/dev/drbd0 directory=/drbd fstype=xfs op start timeout=100s op monitor interval=100s timeout=100s
pcs -f drbdcluster resource create res_vip IPaddr2 ip=192.168.3.90 cidr_netmask=24 nic=enp0s3
pcs -f drbdcluster resource master ms_drbd_r0 res_drbd_r0 master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=true
pcs -f drbdcluster resource create res_mariadb ocf:heartbeat:mysql binary="/usr/bin/mysqld_safe" op start timeout=100s op stop timeout=100s op monitor interval=100s timeout=100s
pcs -f drbdcluster constraint colocation add master ms_drbd_r0 with res_fsmnt INFINITY
pcs -f drbdcluster constraint colocation add res_mariadb with res_fsmnt INFINITY
pcs -f drbdcluster constraint colocation add res_vip with res_mariadb INFINITY
pcs -f drbdcluster constraint order promote ms_drbd_r0 then res_fsmnt
pcs -f drbdcluster constraint order res_fsmnt then res_mariadb
pcs -f drbdcluster constraint order res_mariadb then res_vip
pcs -f drbdcluster property set stonith-enabled=false
pcs -f drbdcluster resource
-----

setup.shファイルを実行してdrbdclusterファイルを完成します。

[root@node1 ~]# bash setup.sh
Assumed agent name 'ocf:heartbeat:Filesystem' (deduced from 'Filesystem')
Assumed agent name 'ocf:heartbeat:IPaddr2' (deduced from 'IPaddr2')
Adding ms_drbd_r0 res_fsmnt (kind: Mandatory) (Options: first-action=promote then-action=start)
Adding res_fsmnt res_mariadb (kind: Mandatory) (Options: first-action=start then-action=start)
Adding res_mariadb res_vip (kind: Mandatory) (Options: first-action=start then-action=start)

設定が正常にできたら、drbdclusterファイルの内容をPacemakerに登録します。

[root@node1 ~]# pcs cluster cib-push drbdcluster
CIB updated

設定が読み込まれました。正常に動作しているかpcs statusで状態を確認します。

[root@node1 ~]# pcs status
Cluster name: dbcluster

Stack: corosync
Current DC: node2.example.com (version 1.1.21-4.el7-f14e36fd43) - partition with quorum
Last updated: Fri Jul 17 15:37:29 2020
Last change: Fri Jul 17 15:36:51 2020 by root via cibadmin on node1.example.com

2 nodes configured
5 resources configured

Online: [ node1.example.com node2.example.com ]

Full list of resources:

res_fsmnt (ocf::heartbeat:Filesystem): Started node1.example.com
res_vip (ocf::heartbeat:IPaddr2): Started node1.example.com
Master/Slave Set: ms_drbd_r0 [res_drbd_r0]
Masters: [ node1.example.com ]
Slaves: [ node2.example.com ]
res_mariadb (ocf::heartbeat:mysql): Started node1.example.com

Daemon Status:
corosync: active/disabled
pacemaker: active/disabled
pcsd: active/disabled

4.便利なコマンド

pcs status

クラスタの状態を確認します。

pcs resource disable リソース名

リソースを停止します。一部のリソースの実行を停止したい場合に使います。

pcs resource enable リソース名

disableで停止したリソースを起動します。

pcs cluster start/stop –all

pacemakerを起動/停止します。–allの代わりにノード名を指定すると、指定したノードの起動停止ができます。

pcs resource cleanup

リソースがエラー状態となった場合にPacemakerが保持しているエラー状態をリセットします。

 

 

5.最後に

LINBIT HAクラスタスタックサポートを契約すると、LINBIT社が作成したPacemakerのパッケージが利用できます。この中にはRHEL8、CentOS8に対応したcrmshのパッケージが含まれていて、crmコマンドを使ってPacemakerを操作できます。
これまでcrmコマンドを使って操作に慣れていた方には、LINBIT社のサポートサービスの利用をおすすめします。