pacemaker

pacemaker_remoteについて(その1) ベアメタル環境

More than 1 year has passed since last update.


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設定も行っています。

* http://qiita.com/HideoYamauchi/items/bf97069072a8ffcf807e

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ノードに要求が送られて処理される実装になっています。

remote構成.png

1) Paemaker/corosync環境を構築します。


  • 本来remoteで接続するノードにはcrosoyncなどは不要ですが、今回は綺麗にいれてあります。

  • また、現時点の最新版Pacemake:pacemaker-4e6f6d6e62d9418ce590a6f7471e96479cb0fdc8を入れています。

  • 今回も簡易な構成の為、firewalldは停止してあります。

2) ホスト側でキーを作成します。(/etc/pacemakerが無い場合はmkdirしてください)

dd if=/dev/urandom of=/etc/pacemaker/authkey bs=4096 count=1

3) 作成したキーをリモートへコピーします。(/etc/pacemakerが無い場合はmkdirしてからコピーしてください)

4) 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

5) 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

6) 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本体の起動は出来ないという意味。


リンク(詳細が本家のリンク先に記載してあります)