概要
- DRBD8.4の設定、切り替え手順(マルチPrimaryバージョン)になります
- マルチPrimaryといっても、umountするタイミングで同期するので、Master-Slave構成になります。
- ただPrimary/Secondaryと違って切り替えが簡単になります
- マルチPrimaryの場合は、非ファイルシステムが推奨なので、今回はLVM + GFSで組みます
設定手順
- 両方のホスト同じ作業してください
①DRBDで使うディスクとパーティションの追加
$ mkdir /data
$ chmod 777 /data
$ sudo fdisk -cu /dev/vdb
とかでパーティション作る
### 今回はvdb1ができました。使えるようにします。
$ sudo pvcreate /dev/vdb1
$ sudo vgcreate drbd /dev/vdb1
$ sudo lvcreate -l 100%FREE -n drbd_data drbd
$ sudo dd if=/dev/zero of=/dev/vdb1 bs=1M count=1
$ chmod 777 /data
②DRBDのインストール、設定、ファイルシステム作成、マウント用ディレクトリ作成
### 8.4.4をwgetで落としてインストールします。最新バージョンだと色々とbug fixされてるので、そちらを使用。
### http://git.drbd.org/?p=drbd-8.4.git;a=blob;f=ChangeLog;hb=HEAD
$ cd /tmp
$ sudo wget http://ftp.kddilabs.jp/Linux/RPMS/elrepo/elrepo/el6/x86_64/RPMS/drbd84-utils-8.4.4-2.el6.elrepo.x86_64.rpm
$ sudo wget http://ftp.kddilabs.jp/Linux/RPMS/elrepo/elrepo/el6/x86_64/RPMS/kmod-drbd84-8.4.4-1.el6.elrepo.x86_64.rpm
$ sudo rpm -Uvh *drbd*
### DRBDの設定
$ sudo vim /etc/drbd.d/global_common.conf
global {
usage-count no;
}
common {
net {
protocol C;
}
syncer {
rate 100M;
}
}
### データを同期する設定。今回はdataという名前で設定します
$ sudo vim /etc/drbd.d/sync.res
resource data {
net {
allow-two-primaries;
}
startup {
become-primary-on both;
after-sb-0pri discard-zero-changes;
after-sb-1pri discard-secondary;
after-sb-2pri disconnect;
}
volume 0 {
device /dev/drbd_data minor 0;
disk /dev/drbd/drbd_data;
meta-disk internal;
}
on host-192-168-1-1 {
address 192.168.1.1:7789;
}
on host-192-168-1-2 {
address 192.168.1.2:7789;
}
}
# デバイスにマイナー番号が使用されていない場合は、minor0をつける。名前/dev/drbd_で始まらないとだめ。
# diskは論理ボリュームだとだめ。
#
# /etc/drbd.conf:7: Parse error: 'dialog-refresh | minor-count | disable ip-verification' expected, but got '・
# ってのは文法エラーだと出たりします。全角スペースがあっても怒られるよ!
# onの部分は$ uname -nの名前に設定します
#
# allow-two-primaries;・・・マルチPrimaryにする宣言
# become-primary-on both;・・・DRBD起動時にPrimaryに切り替えてくれる設定
# スプリットブレイン(通信が全て切断された状態)が起こったら、
# ①両ノードがセカンダリの場合、もしデータの変更がない場合には、無視してその状態を継続します。
# ②どっちかがプライマリの場合、セカンダリになってるホストのデータを破棄し、再同期
# ③両ノードともプライマリの場合、コネクションを切断して切断モード
### drbdのデバイスを作成
$ sudo drbdadm create-md data
# ダメだったらこれ sudo drbdmeta /dev/drbd_data v08 /dev/vdb1 internal create-md
### drbd起動。新しく追加する場合は、追加するサーバだけ実行すればOKです。
### ただし、120秒以内にお互いを起動してあげないと同期が取れません。とれなかったらvirt-managerで強制電源OFFせざるを得なくなります。
$ sudo service drbd start
### Masterの新規構築の場合は、初回フル同期が必要(Slaveだけ作るときはいりません)
[Primary]
### primary側から初回フル同期
$ sudo drbdadm -- --overwrite-data-of-peer primary data
### UpToDateに変わってるか確認
$ drbd-overview
[ここまで]
### 状態確認。 新しくSlaveを追加された際は、syncが走ってるのを確認出来ます
$ drbd-overview
### もし、secondaryになってたらPrimaryにしましょう
$ sudo drbdadm -- --overwrite-data-of-peer primary data
③Masterの新規構築の場合は、初回フル同期が必要(Slaveだけ作るときはいりません)
[Active系]
### Active系から初回フル同期
$ drbdadm -- --overwrite-data-of-peer primary data
### UpToDateに変わってるか確認
$ drbd-overview
GFS野設定
### GFSが使える様に準備
$ sudo yum -y install cman clvmd gfs2-utils lvm2-cluster
$ sudo vim /etc/cluster/cluster.conf
<?xml version="1.0"?>
<cluster name="drbd_cluster" config_version="1">
<clusternodes>
<clusternode name="192.168.1.1" nodeid="1">
</clusternode>
<clusternode name="192.168.1.2" nodeid="2">
</clusternode>
</clusternodes>
</cluster>
$ sudo service cman start
### lock方法をcluster用に、LVMキャッシュ無効の設定
$ sudo vim /etc/lvm/lvm.conf
-locking_type = 1
+locking_type = 3
-write_cache_state = 1
+write_cache_state = 0
### キャッシュを消しておく
$ sudo rm -f /etc/lvm/cache/.cache
$ sudo service clvmd start
### chkconfig
$ sudo chkconfig clvmd on
$ sudo chkconfig cman on
### gfs2のファイルシステムを作る
$ sudo mkfs.gfs2 -p lock_dlm -j 2 -t drbd_cluster:data /dev/drbd/drbd_data
# -p: ロックマネージャの指定
# -j: ジャーナルの数量。http://www.drbd.jp/users-guide/s-gfs-create.html 公式が2。
# -t: ロックテーブルの名前。/etc/cluster/cluster.confに記述したクラスタシステム名:クラスタシステム内で一意の名前であればよいとのこと。
### fstabに書く
$ sudo vim /etc/fstab
/dev/drbd_data /data gfs2 defaults 0 0
### サービス起動(起動するとマウントもされます)
$ sudo service gfs2 start
### chkconfigのon。
$ sudo chkconfig gfs2 on
### gfs2よりdrbdのほうが先に起動しなければならないので、起動順序を入れ替えます
$ cd /etc/rc3.d
$ sudo mv S26gfs2 S70gfs2
$ sudo mv S70drbd S26drbd
切り替え手順
①Masterがrebootした場合、Masterが起動しなくなった場合
- 再起動後、自然と復旧します
- Masterが復旧するまで、slaveがそのままPrimaryになります
②Slaveがrebootした場合
- slaveの確認をしてください
### drbdの状況
$ sudo service drbd status
$ sudo drbd-overview
### secondaryになってたらprimaryにします
$ sudo drbdadm -- --overwrite-data-of-peer primary data
### 下記状態になってるかを確認
$ drbd-overview
0:data/0 Connected Primary/Primary UpToDate/UpToDate C r-----
### gfs2起動
$ sudo service gfs2 start
### gfsで/dataがマウントされてるか確認
$ df -Th
③新しくSlaveを構築したい場合
- この手順に沿って構築してあげてください