CentOS6.5でDRBD8.4を使ってみる - vol.2 Corosync設定編

# しおり

[CentOS6.5でDRBD8.4を使ってみる - vol.0 準備編](http://qiita.com/takehironet/items/4d26198798fb4b7454f8)
[CentOS6.5でDRBD8.4を使ってみる - vol.1 インストール編](http://qiita.com/takehironet/items/c90cd89fb621e570571f)
[CentOS6.5でDRBD8.4を使ってみる - vol.2 Corosync設定編](http://qiita.com/takehironet/items/61a3da51af3b32957872)
[CentOS6.5でDRBD8.4を使ってみる - vol.3 DRBD初期設定編](http://qiita.com/takehironet/items/13518725ee7c694efe90)
[CentOS6.5でDRBD8.4を使ってみる - vol.4 CRM設定編](http://qiita.com/takehironet/items/486bcdfe5609c67d5148)


# 注意事項

ここで使用しているLinux-HA Japan配布のPacemakerは古いバージョンです。
Pacemaker 1.1.12が2015年3月現在の最新で、`corosync.conf`の設定項目が変更されていたりSysVinitではなくUpstartを使用するように変更されていたりします。
http://linux-ha.sourceforge.jp/wp/ をご確認の上、適宜設定をお願い致します。

# Corosyncの設定

## corosync.confの設定

`/etc/corosync/corosync.conf`を次のように編集します。

```plain:corosync.conf
compatibility: whitetank

aisexec {
        user: root
        group: root
}

service {
        name: pacemaker
        ver: 0
        use_mgmtd: yes
}

amf {
        mode: disabled
}

totem {
        version: 2
        secauth: off
        threads: 0
        rrp_mode: none
        clear_node_high_bit: yes
        token: 4000
        censensus: 7000
        join: 60
        interface {
                member {
                        memberaddr: 192.168.128.15
                }
                member {
                        memberaddr: 192.168.128.16
                }
                ringnumber: 0
                bindnetaddr: 192.168.128.0
                mcastport: 5405
                ttl: 1
        }
        transport: udpu
}

logging {
        fileline: off
        to_logfile: yes
        to_syslog: no
        logfile: /var/log/cluster/corosync.log
        debug: off
        timestamp: on
        logger_subsys {
                subsys: AMF
                debug: off
        }
}

quorum {
        provider: corosync_votequorum
        expected_votes: 2
        two_node: 1
}
```

`totem`セクションの`interface`についてはHeartbeatをやりとりするインターフェイス(インターコネクト)の数だけ用意します。
`ringnumber`はインクリメントします。

インターコネクトは複数用意するのが望ましいのですが、ここは1つだけ使っています。
複数用意する場合はbonding(Active/Backup)を使用するか、別々のインターフェイスで`interface`を定義し、`rrp_mode: active`を設定します。
bondingを使用する場合には`interface`は1つで良いです。

`logging`についてですが、`to_logfile: yes`と`to_syslog: yes`を同時に設定してしまうと、ログが重複して出力されてしまうためどちらか一方にしておくと良いです(Pacemakerのログは特に大量に出力される)。


## Firewallの設定

iptablesでCorosyncの通信を許可します。UDPの5405ポートを許可します。
具体的なポート番号は`/etc/corosync/corosync.conf`の`mcastport`の設定によります。

実際にはもっと正確にインターフェイスを限定したほうが良いと思います。

`/etc/sysconfig/iptables`に次の行を追加します
( `-A INPUT -j REJECT --reject-with icmp-host-prohibited` の前の行に割り込ませる)。

```
-A INPUT -m udp -p udp --dport 5405 -j ACCEPT
-A INPUT -m udp -p udp --sport 5405 -j ACCEPT
-A OUTPUT -m udp -p udp --dport 5405 -j ACCEPT
-A OUTPUT -m udp -p udp --sport 5405 -j ACCEPT
```

## Corosyncの起動

両方のノードでCorosyncを起動し、エラーが無いことを確認します。

```plain
service corosync start
```

どちらかのノードで`crm_mon -Aro`を実行し、次のようになっていれば問題ありません。

```plain
============
Last updated: Sun Aug 31 19:28:59 2014
Stack: openais
Current DC: drbd1 - partition with quorum
Version: 1.0.13-a83fae5
2 Nodes configured, 2 expected votes
0 Resources configured.
============

Online: [ drbd1 drbd2 ]

Full list of resources:


Node Attributes:
* Node drbd1:
* Node drbd2:

Operations:
* Node drbd1:
* Node drbd2:
```

## CRMの初期設定

CRM ShellでCRMの設定を行っていきます。

```plain
crm configure
```

CRM Shellに入りますので、ここで作業します。

```plain
crm(live)configure# property no-quorum-policy=ignore stonith-enabled=false
crm(live)configure# rsc_defaults resource-stickiness=200 migration-threshold=3
crm(live)configure# commit
crm(live)configure# exit
bye
```

2ノードクラスタなので、Quorumを利用しないようにします。また、STONITHも現段階では無効にしておきます(property)。

リソースの再配置を行う際に加算されるスコア(resource-stickiness)を200にしておきます。
この値の算出はややこしいので割愛しますが、リソースのスコアが変化した時に再配置が行われるようにしています。
`INFINITY`にするとリソースが故障するまで再配置が起こりませんし、`0`にすると故障したノードがクラスタに復帰するとフェイルバックするようになります。