サーバー間でミラーリングする(DRBD)

カテゴリ: Linux
執筆者: fujimi
updated: 2009/03/30
ページビュー(2482)



  • データをサーバ単位で二重化する
  • DRBDのインストール・設定・運用方法を紹介する
  • 2 前提条件

  • このレシピを編集する
  • 編集履歴を表示する
  • レシピの上部にジャンプする

  • ファイルシステムの基本的な知識がある
  • linuxのコマンドに慣れている

2.1 テスト環境

  • CentOS5.1(32bitバージョン)
  • 3 DRBDを使うメリット

  • このレシピを編集する
  • 編集履歴を表示する
  • レシピの上部にジャンプする

  • データの同期速度が早い

DRBDは、稼動側のサーバ(Primary)と待機側のサーバ(Secondary)の間で、データを同期させるソフトウェアである。稼動側のサーバにデータを書き込むと、待機側のサーバにも書き込まれる。ただし、待機側のサーバのデータは、Primaryにならない限り、読み書きできない。

  • 5 DRBDのインストール

  • このレシピを編集する
  • 編集履歴を表示する
  • レシピの上部にジャンプする

  • DRBDをインストールする(yumコマンド)
# yum install drbd
  • カーネルのカーネルのバージョンを確認する
[hogehoge@hostname ]$ uname -a
Linux nfs2.hoge.jp 2.6.18-92.1.6.el5 #1 SMP Wed Jun 25 13:49:24 EDT 2008 i686 i686 i386 GNU/Linux
  • kmod-drbdをインストールする
※カーネルのバージョンと同じにする
# yum install kmod-drbd
  • 再起動時に自動的にdrbdが立ち上がるようにする
# chkconfig --list |grep drbd
drbd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
# /sbin/chkconfig drbd on
# /sbin/chkconfig --list
drbd 0:off 1:off 2:off 3:on 4:on 5:on 6:off

  • 6 DRBDの初期設定

  • このレシピを編集する
  • 編集履歴を表示する
  • レシピの上部にジャンプする


6.1 稼動側


  • デバイスファイルがあるか確認する
# ls /dev/drbd*
以下のように表示されればよい
/dev/drbd0 /dev/drbd10 /dev/drbd12 /dev/drbd14 /dev/drbd2 /dev/drbd4 /dev/drbd6 /dev/drbd8
/dev/drbd1 /dev/drbd11 /dev/drbd13 /dev/drbd15 /dev/drbd3 /dev/drbd5 /dev/drbd7 /dev/drbd9
  • /dataを作成する
# mkdir /data
  • 設定ファイルを作成する
※設定ファイルの詳細は次のコマンドで確認できる
# man drbd.conf
# vi /etc/drbd.conf

#
# please have a a look at the example configuration file in
# /usr/share/doc/drbd/drbd.conf
#

resource r0 {
protocol B;
#handlers {
#incon-degr-cmd "echo '!DRBD! pri on incon-degr' | wall ; sleep 60 ; halt -f";
#pri-on-incon-degr-cmd "echo o > /proc/sysrq-trigger ; halt -f";
#}

#startup {
#wfc-timeout 120;
#degr-wfc-timeout 120; # 2 minutes.
#}

disk {
#on-io-error panic;
on-io-error pass_on;
}

syncer {
rate 700000K;
}

on nfs1.example.com {
device /dev/drbd0;
disk /dev/sda4;
address 192.168.5.81:7788;
meta-disk internal;
}

on nfs2.example.com {
device /dev/drbd0;
disk /dev/sda4;
address 192.168.5.82:7788;
meta-disk internal;
}
}
    • protocol
      • A データを自分のディスクとTCP送信バッファに送った時点で完了
      • B データを自分のディスクと相手ノードのバッファキャッシュに送った時点で完了
      • C データを自分と相手のディスクに送った時点で完了
    • rate 700000K; ← 転送速度。7000000Kが最大値。
    • device /dev/drbd0; ← ファイルを置くデバイス
    • disk /dev/sda4; ← 同期するパーティション
    • address 192.168.5.81:7788; ← 同期に用いるLANポート
    • meta-disk internal; ← メタファイルの置き場所。internalはデータと同じ領域にメタファイルを置くことを示す

6.2 待機側


  • 設定ファイルを作成する
※稼動側と同じ内容なので省略
  • 7 DRBDのデータ同期

  • このレシピを編集する
  • 編集履歴を表示する
  • レシピの上部にジャンプする


最初に、稼動側のサーバと待機側のサーバのデータを同期する。その際、DRBD用のmetaファイルを作成する。そして、データを保存する領域をext3でフォーマットする

7.1 稼動側


  • DRBDを起動する
# /etc/init.d/drbd start
  • Primaryに設定する。最初に起動すると、metaデータを作成する。そして、データを同期する。
# /sbin/drbdadm -- --overwrite-data-of-peer primary r0
  • Primaryになっていることを確認する
# cat /proc/drbd

version: 8.0.12 (api:86/proto:86)
GIT-hash: 5c9f89594553e32adb87d9638dce591782f947e3 build by buildsvn@c5-i386-build, 2008-06-26 19:22:58
0: cs:Connected st:Primary/Secondary ds:UpToDate/UpToDate B r---
ns:3186224 nr:0 dw:3243296 dr:561230 al:315 bm:48 lo:0 pe:0 ua:0 ap:0
resync: used:0/61 hits:18267 misses:25 starving:0 dirty:0 changed:25
act_log: used:0/127 hits:810509 misses:315 starving:0 dirty:0 changed:315

7.2 待機側


  • DRBDを起動する

# /etc/init.d/drbd start
  • Secondaryになっていることを確認する
$ cat /proc/drbd
version: 8.0.12 (api:86/proto:86)
GIT-hash: 5c9f89594553e32adb87d9638dce591782f947e3 build by buildsvn@c5-i386-build, 2008-06-26 19:22:58
0: cs:Connected st:Secondary/Primary ds:UpToDate/UpToDate B r---
ns:0 nr:3186224 dw:3186224 dr:0 al:0 bm:25 lo:0 pe:0 ua:0 ap:0
resync: used:0/61 hits:18267 misses:25 starving:0 dirty:0 changed:25
act_log: used:0/127 hits:0 misses:0 starving:0 dirty:0 changed:0

7.3 稼動側

  • DRDBデバイスを/data以下にマウントする
# mount -t ext3 /dev/drbd0 /data
  • 8 動作確認

  • このレシピを編集する
  • 編集履歴を表示する
  • レシピの上部にジャンプする

  • マウントしたディレクトリが存在するか確認する
# ls -la /drbd 
  • 9 参考文献・参考サイト

  • このレシピを編集する
  • 編集履歴を表示する
  • レシピの上部にジャンプする

The DRBD User's Guide
  • 執筆者情報

  • このレシピを編集する
  • 編集履歴を表示する
  • レシピの上部にジャンプする

ニックネーム:fujiyama
自己紹介:
都内大学4年生です。 プログラミングとサーバ関係のレシピを書いてます。

  • 関連レシピ

  • このレシピを編集する
  • 編集履歴を表示する
  • レシピの上部にジャンプする

レシピを書く


Feedback Form