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

# 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ホスト１台(cent7-host)とベアメタルノード２台(cent7-remote1,cent7-remote2)を想定して、仮想マシン３台で構成してみます。
リソースは簡易にDummyのみとしています。
以下はstonith無の例ですが、実際にはstonith構成を組むことをお勧めします。
また、pacemakerホストでは、リソースを起動しないことがわかっている為、以下で説明しているdiscovery設定も行っています。
 * http://qiita.com/HideoYamauchi/items/bf97069072a8ffcf807e

```crm
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](https://qiita-image-store.s3.amazonaws.com/0/80018/01a1e91e-5b46-8935-5eee-54b00c7874fd.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本体の起動は出来ないという意味。

### リンク（詳細が本家のリンク先に記載してあります）
 * http://clusterlabs.org/doc/en-US/Pacemaker/1.1/html-single/Pacemaker_Remote/