CentOS
drbd

DRBD 8.4 の設定、切り替え手順(マルチPrimaryバージョン)

More than 3 years have passed since last update.


概要


  • 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を構築したい場合


  • この手順に沿って構築してあげてください