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社のサポートサービスの利用をおすすめします。