corosync + pacemakerの初期セットアップ

# corosync + pacemakerの初期セットアップ

## はじめに

CentOS6.5上で冗長化構成を組もうとした時に、初めはheartbeat + pacemakerでの構築を考えていたが、ネット上で調べたところどうもcorosyncの方が良さそうなので、corosync + pacemakerで検討してみることにした。

* heartbeatの開発は縮小してきており、メインストリームはcorosyncに変わりつつある
* corosyncはredhat主導で開発が進められており、同じくredhat主導のpacemakerとの親和性も高そう。
* ネット上の記事もcorosyncの方が豊富。

## 実行環境

* ハイパーバイザー　：　VirtualBox 5.0.0r101573
* ホストOS　：　MacOS Sierra 10.12.3
* ゲストOS　：　CentOS 6.5
  * corosync1-cent65 : 192.168.33.10
  * corosync2-cent65 : 192.168.33.11
  * VIP : 192.168.33.12
* その他　：　Vagrant 1.7.4

## インストール (corosync1-cent65,corosync2-cent65両方で実施)

まず、モジュールをインストールする。

corosync,pacemaker以外にpcs,cmanのインストールが必要。

* pcs : クラスタ制御用のコマンドラインインターフェース（crmコマンドみたいなもの。最近はpcsが主流らしい）
* cman : クラスタマネージャ（これがないとpcsコマンド実行時にエラーとなる）


`[root@corosync1-cent65 ~]# yum -y install corosync pacemaker pcs cman`
※ 私の環境ではcorosyncは標準で同梱されていたが念のため。。

## corosync.conf設定 (corosync1-cent65,corosync2-cent65両方で実施)

corosync.confの設定が必要。
サンプルがあるので今回はコピーして必要最小限の設定変更のみ実施。

```
[root@corosync1-cent65 ~]# cp /etc/corosync/corosync.conf.example /etc/corosync/corosync.conf
[root@corosync1-cent65 ~]# sed -i -e "/^compatibility: whitetank$/a aisexec {\n\tuser: root\n\tgroup: root\n}\n\nservice {\n\tname: pacemaker\n\tver: 0\n}" /etc/corosync/corosync.conf
[root@corosync1-cent65 ~]# sed -i -e "s/bindnetaddr: 192.168.1.0/bindnetaddr: 192.168.33.0/" /etc/corosync/corosync.conf
```

上記コマンド実施により、/etc/corosync/corosync.confに以下の設定が追加される。

```
aisexec {
  user: root
  group: root
}
service {
  name: pacemaker
  ver: 0
}
```

これによりrootユーザでpacemakerを利用したクラスタ実行がされます。
また、初期値ではクラスタがバインドされるネットワークセグメントが192.168.1.0となっているため、今回ゲストOSが起動される192.168.33.0/24に合わせて設定を変更。

```
totem  {
    ~略~
    interface {
      bindnetaddr: 192.168.33.0
    }
    ~略~
}
```


## hostsファイル変更 (corosync1-cent65,corosync2-cent65両方で実施)

クラスタリングはドメイン名指定で実施するため、ドメイン名で通信できるように/etc/hostsへの設定追加を実施。
更に同じドメイン名の定義が127.0.0.1にもあるとクラスタの通信に失敗するためコメントアウトする。

```
[root@corosync1-cent65 ~]# sed -i -e "s/127.0.0.1/#127.0.0.1/" /etc/hosts
[root@corosync1-cent65 ~]# echo 192.168.33.10 corosync1-cent65 >> /etc/hosts
[root@corosync1-cent65 ~]# echo 192.168.33.11 corosync2-cent65 >> /etc/hosts
```

## pcsコマンドインターフェース利用前準備 (corosync1-cent65,corosync2-cent65両方で実施)

cluster setupする時にcluster.confがないとエラーになるので、空ファイルを作成しておく。

`[root@corosync1-cent65 ~]# touch /etc/cluster/cluster.conf`

cluster authで認証する際に利用するパスワードを設定する。
`[root@corosync1-cent65 ~]# passwd hacluster`

pcsdを起動する。

`[root@corosync1-cent65 ~]# service pcsd start`

これでpcsコマンド実行の準備完了。

## クラスタ設定（corosync1-cent65でのみ実施）

ここから先は1号機でのみ実施する。
setupコマンド実行時に/etc/cluster/cluster.confに設定が追加される。

```
[root@corosync1-cent65 ~]# pcs cluster auth corosync1-cent65 corosync2-cent65 -u hacluster
[root@corosync1-cent65 ~]# pcs cluster setup --name testcluster corosync1-cent65 corosync2-cent65 --force
[root@corosync1-cent65 ~]# pcs cluster start --all
[root@corosync1-cent65 ~]# pcs resource create VIP ocf:heartbeat:IPaddr2 ip=192.168.33.12
```

testclusterという名前でclusterが生成されます。
以下のコマンドで状態を表示します。

```
[root@corosync1-cent65 ~]# pcs status
Cluster name: testcluster
Last updated: Sun Mar 26 04:13:13 2017		Last change: Sun Mar 26 02:20:21 2017 by root via cibadmin on corosync1-cent65
Stack: cman
Current DC: corosync1-cent65 (version 1.1.14-8.el6_8.2-70404b0) - partition with quorum
2 nodes and 1 resource configured

Online: [ corosync1-cent65 corosync2-cent65 ]

Full list of resources:

 VIP	(ocf::heartbeat:IPaddr2):	Started corosync1-cent65

PCSD Status:
  corosync1-cent65: Online
  corosync2-cent65: Online
```

corosync1-cent65にVIP192.168.33.12が付与されることも確認できた。

```
[root@corosync1-cent65 ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:4f:b8:06 brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15/24 brd 10.0.2.255 scope global eth0
    inet6 fe80::a00:27ff:fe4f:b806/64 scope link
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:cf:ef:3d brd ff:ff:ff:ff:ff:ff
    inet 192.168.33.10/24 brd 192.168.33.255 scope global eth1
    inet 192.168.33.12/24 brd 192.168.33.255 scope global secondary eth1
    inet6 fe80::a00:27ff:fecf:ef3d/64 scope link
       valid_lft forever preferred_lft forever
```

これで基本設定が完了。