LoginSignup
5
6

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-08-31

概要

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

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
6