DRBD,  pacemaker + corosyncでクラスタ設定

自力でクラスタ化するときの設定。
DRBDで1，2号機のストレージの共有、pacemaker + corosyncでフェイルオーバー制御等をする。
手順はCentOS7で検証。

## DRBD設定
```
### DRBDインストールと設定(両ノードで実施する)
## パーティション作成
fdisk /dev/vdc
## elrepoリポジトリ追加
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
## DRBDインストール
yum --enablerepo=elrepo install drbd84-utils-8.9.8-1.el7.elrepo.x86_64
## kmod-drbdインストール
rpm -Uvh http://ftp.kddilabs.jp/Linux/RPMS/elrepo/elrepo/el7/x86_64/RPMS/kmod-drbd84-8.4.9-1.el7.elrepo.x86_64.rpm
kmod-drbd84-8.4.10-1_2.el7_4.elrepo.x86_64.rpm
※カーネルバージョンが古くエラーになる場合はカーネルアップデートを行う
## OS再起動
## ホスト名変更
vi /etc/hostname
※DRBD設定のホスト名と一致させる
## cloud-init設定変更
vi /etc/cloud/cloud.cfg
---
# - update_hostname
# - update_etc_hosts
---
## カーネルモジュールロード
modprobe drbd
## カーネルモジュール確認
lsmod | grep drbd
## DRBD設定
vi /etc/drbd.d/drbd0.res
---
resource drbd0 {
protocol C;
handlers {
fence-peer "/usr/lib/drbd/crm-fence-peer.sh";
after-resync-target "/usr/lib/drbd/crm-unfence-peer.sh";
}
syncer {
use-rle;
rate 50M;
verify-alg sha1;
}
disk {
on-io-error detach;
fencing resource-and-stonith;
}
on 1号機インスタンス名 {
device /dev/drbd0;
disk /dev/vdc;
address 1号機インターコネクト用IP:7789;
meta-disk internal;
}
on 2号機インスタンス名 {
device /dev/drbd0;
disk /dev/vdc;
address 2号機インターコネクト用IP:7789;
meta-disk internal;
}
}
---
## meta-diskデバイスをゼロ設定
dd if=/dev/zero bs=1M count=1 of=/dev/vdc; sync
## メタファイル作成
drbdadm create-md drbd0
## 自動起動設定確認
systemctl is-enabled drbd
※無効であること
## DRBD起動
systemctl start drbd
## 1号機をプライマリ昇格
drbdadm -- --overwrite-data-of-peer primary drbd0
## 同期確認
cat /proc/drbd
※どちらかのノードで実行し以下の状態となることを確認する
　cs:Connected
　ro:Primary/Secondary(1号機から見た場合)
　ds:UpToDate/UpToDate
  
### DRBDボリュームマウント(1号機)
## データディレクトリ作成
mkdir -p /data/test
## ファイルシステム作成
mkfs.ext4 /dev/drbd0
## マウント
mount -t ext4 /dev/drbd0 /data/test/
## マウント確認
df -Th
## アンマウント
umount /data/test/
  
### DRBDボリュームマウント(2号機)
## データディレクトリ作成
mkdir -p /data/test
## 1号機をセカンダリに変更(1号機)
drbdadm secondary drbd0
## 2号機をプライマリに変更(2号機)
drbdadm primary drbd0
## マウント(2号機)
mount -t ext4 /dev/drbd0 /data/test/
## マウント確認
df -Th
## 同期確認
cat /proc/drbd
## アンマウント
umount /data/test
## 2号機をセカンダリに変更(2号機)
drbdadm secondary drbe0
## 1号機をプライマリに変更(1号機)
drbdadm primary drbd0
## 同期確認
cat /proc/drbd
```

## Pacemker+Corosyncインストールと設定
```
### Pacemaker+Corosync設定(両ノードで実施)
## インストール
yum install corosync pacemaker pcs
## /etc/hosts設定
vi /etc/hosts
---
1号機IP 1号機インスタンス名
2号機IP 2号機インスタンス名
---
## haclusterユーザのパスワード設定
※両ノードで同じパスワードに設定する
passwd hacluster
## pcsd起動
systemctl start pcsd
## pcsd自動起動有効化
systemctl enable pcsd
## 確認
systemctl is-enabled pcsd
## Pacemaker自動起動有効化
systemctl enable pacemaker
## 確認
systemctl is-enbled pacemaker
## クラスタ間ノード認証(片系のみ)
pcs cluster auth 1号機インスタンス名 2号機インスタンス名 -u hacluster -p パスワード --force
## 初期クラスタ作成(片系のみ)
pcs cluster setup --name ldapcluster 1号機インスタンス名 2号機インスタンス名
## クラスタ起動
pcs cluster start --all
## STONITH無効化
pcs property set stonith-enabled=false
## スプリットブレイン発生時にクォーラムが特別な動作を行わないように設定
pcs property set no-quorum-policy=ignore
## クラスタ状態確認
※両ノードOnlineでリソースが登録されていないことを確認する
pcs status
## 自動フェイルバック停止
pcs resource defaults resource-stickiness="INFINITY" migration-threshold="1"
  
### リソース登録
## VIPリソース
pcs resource create VIP ocf:heartbeat:IPaddr2 ip=vip cidr_netmask=24  op monitor interval=10s
## リソース確認
pcs status
## IP確認
ip a
## DRBDリソース
pcs resource create DRBD ocf:linbit:drbd params drbd_resource=drbd0 op monitor interval=10s
## マスター/スレーブリソースに設定
pcs resource master ms_drbd0 DRBD master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=true
## DRBDボリュームマウントリソース登録
pcs resource create FS_DRBD Filesystem device=/dev/drbd0 directory=/data/test fstype=ext4
## DRBDボリューム依存関係設定(DRBDがマスターのノードで起動)
pcs constraint colocation add FS_DRBD ms_drbd0 INFINITY with-rsc-role=Master
## リソース起動順設定(DRBDマスター昇格後にリソースグループ起動)
pcs constraint order promote ms_drbd0 then start FS_DRBD
## リソースグループ作成(VIP→DRBDの順に起動)
pcs resource group add DRBD_Group VIP FS_DRBD
## DRBDステータスクリア
pcs resource cleanup ms_drbd0
## リソース確認
pcs status
```