pacemaker_remoteとは
Pacemaker1.1系で盛り込まれている機能でPacemaker本体で、他ノード(実マシン、仮想マシン、コンテナ)上のリソースを制御する機能です。
他ノード側には、Pacemaker本体プロセスは必要なく、pacemaker_remoteプロセスとresource-agentのみが(当然、起動するリソースの本体は必要:apacheや、postgresSQL)必要になります。
現時点では、まだまだ不安定な部分も有り不具合もありますが、起動・監視・停止の一連の動作は制限付きですが、可能です。
(リリース版はかなり不安定であり、問題はありますが、ある程度動作可能なのは、Pacemakerの開発中のトップの最新版です)
ベアメタルでのpacemaker_remoteでのクラスタ構成
実環境内で起動したpacemaker_remoteと通信を行って、Pacemakerを起動するノードからの指示に従って実環境内でリソースを起動する構成です。
この場合も先に書いた通り、実環境内に必要なのは、pacemaker_remoteとresource-agent(当然、起動するリソースの本体は必要:apacheや、postgresSQL)です。
本来は、ホスト複数台でPacemakerのクラスタを構成する事になると思いますが、まずは、pacemakerホスト1台(cent7-host)とベアメタルノード2台(cent7-remote1,cent7-remote2)を想定して、仮想マシン3台で構成してみます。
リソースは簡易にDummyのみとしています。
以下はstonith無の例ですが、実際にはstonith構成を組むことをお勧めします。
また、pacemakerホストでは、リソースを起動しないことがわかっている為、以下で説明しているdiscovery設定も行っています。
property no-quorum-policy="ignore" \
stonith-enabled="false" \
startup-fencing="false"
rsc_defaults resource-stickiness="INFINITY" \
migration-threshold="INFINITY"
primitive remote1 ocf:pacemaker:remote \
params \
server="cent7-remote1" \
op monitor interval=3 timeout=15
primitive remote2 ocf:pacemaker:remote \
params \
server="cent7-remote2" \
op monitor interval=3 timeout=15
primitive dummy-remote Dummy \
op start interval=0s timeout=60s \
op monitor interval=30s timeout=60s \
op stop interval=0s timeout=60s
location loc1 dummy-remote \
rule 300: #uname eq remote1 \
rule 200: #uname eq remote2
location loc2 dummy-remote resource-discovery="never" \
rule -inf: #uname eq cent7-host
動作について
pacemaker_remoteは、Pacemakerからの接続ホストの形で動作し、Pacemakerから接続を行います。
また、pacemaker_remote自体は、Pacemaker本体のlrmdプロセスの拡張として実装されていますので、単体で動作するlrmdプロセスという認識で良いと思います。
pacemaker_remoteの動作するノード側(実マシン、仮想マシン、コンテナ)でも、crm_monなどのコマンドは実行可能で、これは、Proxy機能を経由して、Pacemakerノードに要求が送られて処理される実装になっています。
- Paemaker/corosync環境を構築します。
- 本来remoteで接続するノードにはcrosoyncなどは不要ですが、今回は綺麗にいれてあります。
- また、現時点の最新版Pacemake:pacemaker-4e6f6d6e62d9418ce590a6f7471e96479cb0fdc8を入れています。
- 今回も簡易な構成の為、firewalldは停止してあります。
- ホスト側でキーを作成します。(/etc/pacemakerが無い場合はmkdirしてください)
dd if=/dev/urandom of=/etc/pacemaker/authkey bs=4096 count=1
-
作成したキーをリモートへコピーします。(/etc/pacemakerが無い場合はmkdirしてからコピーしてください)
-
remoteノードで先にpacemaker_remoteを起動して、hostノードでpacemakerを起動します。
[root@cent7-remote1 ~]# systemctl start pacemaker_remote
[root@cent7-remote2 ~]# systemctl start pacemaker_remote
[root@cent7-host ~]# systemctl start pacemaker
- CLIファイルを投入します
[root@cent7-host ~]# crm configure load update bare.crm
WARNING: loc1: referenced node remote1 does not exist
WARNING: loc1: referenced node remote2 does not exist
WARNING: remote1: default timeout 20s for start is smaller than the advised 60
WARNING: remote1: default timeout 20s for stop is smaller than the advised 60
WARNING: remote1: specified timeout 15 for monitor is smaller than the advised 30
WARNING: remote2: default timeout 20s for start is smaller than the advised 60
WARNING: remote2: default timeout 20s for stop is smaller than the advised 60
WARNING: remote2: specified timeout 15 for monitor is smaller than the advised 30
- crm_monでremoteでリソースが起動していることが確認出来ます。
[root@cent7-host ~]# crm_mon -1 -Af
..
Stack: corosync
Current DC: cent7-host (version 1.1.13-4e6f6d6) - partition WITHOUT quorum
3 nodes and 3 resources configured
Online: [ cent7-host ]
RemoteOnline: [ remote1 remote2 ]
dummy-remote (ocf::heartbeat:Dummy): Started remote1
remote1 (ocf::pacemaker:remote): Started cent7-host
remote2 (ocf::pacemaker:remote): Started cent7-host
Node Attributes:
* Node cent7-host:
* Node remote1:
* Node remote2:
Migration Summary:
* Node cent7-host:
* Node remote1:
* Node remote2:
7)念の為、各ノードでプロセスを確認してみます。リモートノードでは、pacemaker_remotedのみが動いていることがわかります。
[root@cent7-host ~]# ps -ef |grep pace
root 15839 1 0 20:46 ? 00:00:00 /usr/sbin/pacemakerd -f
haclust+ 15840 15839 0 20:46 ? 00:00:00 /usr/libexec/pacemaker/cib
root 15841 15839 0 20:46 ? 00:00:00 /usr/libexec/pacemaker/stonithd
root 15842 15839 0 20:46 ? 00:00:00 /usr/libexec/pacemaker/lrmd
haclust+ 15843 15839 0 20:46 ? 00:00:00 /usr/libexec/pacemaker/attrd
haclust+ 15844 15839 0 20:46 ? 00:00:00 /usr/libexec/pacemaker/pengine
haclust+ 15845 15839 0 20:46 ? 00:00:00 /usr/libexec/pacemaker/crmd
root 15907 12074 0 20:48 pts/0 00:00:00 grep --color=auto pace
[root@cent7-host ~]# ps -ef |grep coro
root 14494 1 1 20:09 ? 00:00:24 corosync
root 15909 12074 0 20:48 pts/0 00:00:00 grep --color=auto coro
[root@cent7-remote1 ~]# ps -ef |grep pace
root 2248 1 0 20:46 ? 00:00:00 /usr/sbin/pacemaker_remoted
root 2304 2190 0 20:48 pts/0 00:00:00 grep --color=auto pace
[root@cent7-remote1 ~]# ps -ef |grep coro
root 2306 2190 0 20:48 pts/0 00:00:00 grep --color=auto coro
[root@cent7-remote2 ~]# ps -ef |grep pace
root 7037 1 0 20:46 ? 00:00:00 /usr/sbin/pacemaker_remoted
root 7063 1088 0 20:48 pts/0 00:00:00 grep --color=auto pace
[root@cent7-remote2 ~]# ps -ef |grep coro
root 7065 1088 0 20:48 pts/0 00:00:00 grep --color=auto coro
8)リモートノードでリソースを移動させてみます
[root@cent7-host ~]# crm_resource -M -r dummy-remote -N remote2 -f
WARNING: Creating rsc_location constraint 'cli-ban-dummy-remote-on-remote1' with a score of -INFINITY for resource dummy-remote on remote1.
This will prevent dummy-remote from running on remote1 until the constraint is removed using the 'crm_resource --clear' command or manually with cibadmin
This will be the case even if remote1 is the last node in the cluster
This message can be disabled with --quiet
[root@cent7-host ~]# crm_mon -1 -Af
....
Stack: corosync
Current DC: cent7-host (version 1.1.13-4e6f6d6) - partition WITHOUT quorum
3 nodes and 3 resources configured
Online: [ cent7-host ]
RemoteOnline: [ remote1 remote2 ]
dummy-remote (ocf::heartbeat:Dummy): Started remote2
remote1 (ocf::pacemaker:remote): Started cent7-host
remote2 (ocf::pacemaker:remote): Started cent7-host
Node Attributes:
* Node cent7-host:
* Node remote1:
* Node remote2:
Migration Summary:
* Node cent7-host:
* Node remote1:
* Node remote2:
注意点
pacemaker_remoteとPacemaker本体の同居は出来きません。
- pacemakre_remoteを起動して、Pacemaker本体の起動は出来ないという意味。