UbuntuでPacemaker + Heartbeatを使う

# Pacemaker + Heartbeat
## Pacemakerインストール準備

### Active / Standby 両方で実施
/etc/apt/sources.list へリポジトリ追加し、インストール

```
deb http://ppa.launchpad.net/ubuntu-ha/ppa/ubuntu karmic main
deb-src http://ppa.launchpad.net/ubuntu-ha/ppa/ubuntu karmic main
```

```
# atp-get update
# apt-get install pacemaker heartbeat fence-agents
```

## heartbeatの設定

### Active / Standby 両方で実施
/etc/ha.d/ha.cf を作成

```
pacemaker on
logfile /var/log/ha-log
keepalive 3
deadtime 30
deadping 40
warntime 10
initdead 60
udpport 694
node HOST_A
node HOST_B
ucast eth0 HOST_A_PrivateIP
ucast eth0 HOST_B_PrivateIP
uuidfrom nodename
```
/etc/ha.d/authkeys を作成
```
auth 1
1 crc
```

```
# chmod 600 /etc/ha.d/authkeys
```

heatbeatのlrmdをpacemakerに変更

```
# mv /usr/lib/heartbeat/lrmd /usr/lib/heartbeat/lrmd.org
# ln -sf /usr/lib/pacemaker/lrmd /usr/lib/heartbeat/lrmd
```

lrmdの変更をしたらcrm_monでのステータスがONLINEになる  
(変更していなかったらSSH接続が1〜2分程度で切れていました)


### Active サーバで実施
 *どちらか一方のサーバでやればOKです

crmコマンドで設定をする

```
# crm configure property stonith-enabled="false"
(STONITHの停止)

# crm configure property no-quorum-policy="ignore"
(Quorumの設定をignoreへ変更)
```

ついでにZabbixの設定もする  

```
# crm configure primitive zabbix-server lsb:zabbix-server \
 op start interval="0s" timeout="60s" on-fail="restart" \
 op monitor interval="30s" timeout="60s" on-fail="restart" \
 op stop interval="0s" timeout="60s" on-fail="fence"
```
Pacemaker,Heartbeatの起動

```
# /etc/init.d/heartbeat start
# /etc/init.d/pacemaker start
```

crm_monコマンドで確認

```
# crm_mon -i1
Last updated: Thu Nov 13 08:37:28 2014
Last change: Tue Nov 11 11:28:17 2014 via crm_resource on active
Stack: heartbeat
Current DC: standby (xxxxxxxx-xxx-xxxx-xxxx-xxxxxxxxxxxx) - partition with quorum
Version: 1.1.10-42f2063
2 Nodes configured
1 Resources configured


Online: [ active standby ]

zabbix-server   (lsb:zabbix-server):    Started active
```

activeサーバでZabbixServerが起動中であることがわかる

## テスト

注意: ZabbixServerのDBをRDSにしているのでDBの切替とか特に設定してません 

activeサーバでZabbixServerが起動してるのがわかったのでサーバを停止する
この後StandbyサーバでZabbixServerが起動すればOK

- activeサーバ停止前の状態

```
root@active:~# /etc/init.d/zabbix-server status
 * zabbix_server is running

root@standby:~# /etc/init.d/zabbix-server status
 * zabbix_server is not running
```

実際にサーバを停止してみる

```
Last updated: Thu Nov 13 08:46:31 2014
Last change: Tue Nov 11 11:28:17 2014 via crm_resource on active
Stack: heartbeat
Current DC: standby  (xxxxxxxx-xxx-xxxx-xxxx-xxxxxxxxxxxx)  - partition with quorum
Version: 1.1.10-42f2063
2 Nodes configured
1 Resources configured


Online: [ standby ]
OFFLINE: [ active ]

zabbix-server   (lsb:zabbix-server):    Started standby
```

standbyサーバでZabbixServerが起動していることがわかる

- activeサーバ停止後の状態
 
```
root@standby:~# /etc/init.d/zabbix-server status
 * zabbix_server is running
```

activeサーバを起動し、standbyサーバでZabbixServerが停止するのを確認する

```
Last updated: Thu Nov 13 10:21:23 2014
Last change: Tue Nov 11 11:28:17 2014 via crm_resource on active
Stack: heartbeat
Current DC: standby (32f23505-7a3b-e54c-9310-b26f6b13bece) - partition with quorum
Version: 1.1.10-42f2063
2 Nodes configured
1 Resources configured


Online: [ active standby ]

zabbix-server   (lsb:zabbix-server):    Started active
```

ZabbixServerがactiveに切り替わっていることを確認


- activeサーバ起動後の状態

```
root@active:~# /etc/init.d/zabbix-server status
 * zabbix_server is running

root@standby:~# /etc/init.d/zabbix-server status
 * zabbix_server is not running
```

これで自動的にフェイルバックまで実施されるようになる。
フェイルバックしない時はcrmで以下の設定を追加する

- どちらかのサーバで実行

```
# crm configure property defalut-resource-stickiness=INFINITY
# crm configure property default-resource-failure-stickiness=INFINITY
("Do you still want to commit?"にyを返す)
```