DRBD(ネットワークディスクミラー)の設定

DRBD(ネットワークディスクミラーリング)は、あるディスクパーティションを2つのサーバ間で同期するソフトウェアです。

ネットワーク経由のRaid1と考えれば理解しやすいと思います。

 

このDRBDとHeartbeatを組み合わせて利用する事により、共有ディスクなどを利用しなくても、非常に多くのサービスをHAクラスタ構成にする事が可能になります。

例えば、Apacheのドキュメントフォルダ、MySQLやPostgreSQLなどのデータベースなど、データをファイル形式で管理されている物なら、Heartbeat+DRBDでHAクラスタ化する事が可能になり、HAクラスタを構築する場合は非常に有用なソフトウェアです。

 

また、DRBDはkernel-2.6.33からLinuxカーネルに統合されており、将来的にも比較的安心して利用出来ると思いますし、DRBDの日本語サイトも充実しており、DRBDの利用に関する敷居は随分と低くなりました。

HAクラスタシステムを検討されている場合は、候補の1つとして考慮したいソフトウェアです。

 

ここでは、LVMでDRBDを利用する方法について記載します。

検証OSには、CentOS-5を利用しました。

 

 

DRBD用ディスクパーティションの設定

OSを新規でインストールする場合には、OSインストール時にDRBDで利用する領域をフリースペースとして残しておきます。

DRBD用パーティションは、OSインストール後に手動で作成します。

既にインストールされているOSを利用する場合は、フリーで利用出来る領域またはディスクを確保してください。

 

ディスクパーティションの例

DRBDを利用するにはメタデータを保存するメタ領域と、データを保存するデータ領域の2つが必要です。

この2つの領域のパーティションを別々に作成しても、1つのパーティションで共用しても問題ありません。

なお、1つのデータ領域を管理する為に必要なメタ領域の容量は、128MBです。

パーティションを別々に作成する場合は、メタ領域の容量に注意してください。

ここでは、LVM上にDRBD用の1つのVGを作成し、LV00をメタ領域、データ領域で共用して利用します。

以下が、今回テスト環境で作成するパーティションの構成です。

|---------------------------------|
| /dev/hda1  (ext3)        /boot    256MB |
| /VG00/LV00 (ext3)      /                 6G |
| /VG00/LV01 (swap)     Swap           1G |
| /VG01/LV00 (ext3:DRBD) /data 1.55G |
|______________________________________|

 

 

ディスク領域の作成

ディスク領域は、fdiskでパーティションを作成後、LVMを作成します。

 

パーティションの作成

パーティションの作成は、fdiskコマンドで行います。

例えば、ハードディスクのデバイスが、/dev/hdaの場合に、以下のコマンドでfdiskを起動し新規にパーティションを1つ作成します。また、パーティションタイプはLinux LVMに設定します。

fdisk /dev/hda
fdiks起動時のメッセージ
The number of cylinders for this disk is set to 1044.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
   (e.g., DOS FDISK, OS/2 FDISK)

現状のパーティションを確認
Command (m for help):p
Disk /dev/hda: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

    Device Boot      Start         End      Blocks   Id  System
/dev/hda1   *           1          13      104391   83  Linux
/dev/hda2              14         842     6658942+  8e  Linux LVM

新規パーティションの作成
Command (m for help):n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4):3
First cylinder (843-1044, default 843):[enter]
Using default value 843
Last cylinder or +size or +sizeM or +sizeK (843-1044, default 1044): [enter]
Using default value 1044

パーティションタイプの変更
Command (m for help):t
Partition number (1-4):3
Hex code (type L to list codes):8e
Changed system type of partition 3 to 8e (Linux LVM)

パーティションの確認
Command (m for help): p

Disk /dev/hda: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

    Device Boot      Start         End      Blocks   Id  System
/dev/hda1   *           1          13      104391   83  Linux
/dev/hda2              14         842     6658942+  8e  Linux LVM
/dev/hda3             843        1044     1622565   8e  Linux LVM

パーティション情報を保存して終了
Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table.
The new table will be used at the next reboot.
Syncing disks.

fdiskの基本操作コマンド

m = 操作コマンドのヘルプを表示する

p = 現在の状態を確認する

n = 新規にパーティションを作成する

t = パーティションタイプを変更する

w = 変更を保存し終了する

q = 変更を破棄し終了する

fdiskでパーティションの作成が完了したら、一度再起動します。

 

LVMボリュームの作成

LVMを作成ために、以下の作業を行います。

・PV(Physical Volume)の作成

・VG(Volume Group)の作成

・LV(Logical Volume)の作成

 

PVの作成

DRBD用に確保しておいたパーティションにPVを作成します。

PVを作成するには、pvcreateコマンドを使用します。

pvcreate /dev/hda3

Physical volume “/dev/hda3” successfully created と表示されれば終了です。

 

作成したPVを確認するには、pvdisplayコマンドを使用します。

pvdisplay /dev/hda3
 "/dev/hda3" is a new physical volume of "1.55 GB"
  --- NEW Physical volume ---
  PV Name               /dev/hda3
  VG Name
  PV Size               1.55 GB
  Allocatable           NO
  PE Size (KByte)       0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               vEsHuY-jrJF-ofcY-ZfAB-FXrY-Ww0H-aXCm1d

 

VGの作成

次に、PV上にVGを作成します。

VGを作成するには、vgcreateコマンドを使用します。

作成するVG名は、VG01です。

この時PEも作成します。今回は32MBでPEを作成します。

vgcreate -s 32m VG01 /dev/hda3

Volume group “VG01” successfully created と表示されれば終了です。

 

作成したVGを確認するには、vgdisplayコマンドを使用します。

vgdisplay -C
  VG   #PV #LV #SN Attr   VSize VFree
  VG00   1   2   0 wz--n- 6.34G    0
  VG01   1   0   0 wz--n- 1.53G 1.53G

 

vgdisplay VG01
  --- Volume group ---
  VG Name               VG01
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               1.53 GB
  PE Size               32.00 MB
  Total PE              49
  Alloc PE / Size       0 / 0
  Free  PE / Size       49 / 1.53 GB
  VG UUID               ahUEBo-R4m0-iTtf-ZcqZ-O9og-5zrx-1pKMup

 

LVの作成

ここでは、VG01上にLV00を作成します。

LVを作成するには、lvcreateコマンドを使用します。

lvcreate -L 1.53G -n LV00 VG01

Logical volume “LV00” created と表示されれば終了です。

 

作成したLVの確認は、lvdisplayコマンドで確認します。

lvdisplay /dev/VG01/LV00
  --- Logical volume ---
  LV Name                /dev/VG01/LV00
  VG Name                VG01
  LV UUID                578IYe-MYhd-lAUP-0snR-Bl9w-lUmP-mpXskS
  LV Write Access        read/write
  LV Status              available
  # open                 0
  LV Size                1.53 GB
  Current LE             49
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:2

通常Linuxからパーティションを利用するには、ファイルシステムの作成(フォーマット)が必要ですが、DRBDで利用する場合は、/dev/drbd0に対して行います。

これでDRBD用のパーテションの準備は終了です。

 

 

DRBDのインストール

CentOSでは、DRBDパッケージが提供されているためこれを利用します。

yum install drbd83 kmod-drbd83


DRBDの設定

DRBDの設定は、/etc/drbd.confで行います。

今回は、メタ領域とデータ領域の定義を行います。

ここでは、以下のホスト間でディスクミラーリングを行うと仮定します。

host1.local 192.168.1.1

host2.local 192.168.1.2

設定ファイルに記載するホスト名は、uname -n で求めます。

drbd.confの作成は、/usr/share/doc/drbd83-8.3.2/drbd.confにサンプルがありますので、これを参考に作成します。

/etc/drbd.conf

global {
    usage-count yes;
}
common {
    syncer { rate 10M; }
}
resource r0 {
  protocol C;

  handlers {
    pri-on-incon-degr "/usr/lib/drbd/notify-pri-on-incon-degr.sh; \
    /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f";
    pri-lost-after-sb "/usr/lib/drbd/notify-pri-lost-after-sb.sh; \
    /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f";
    local-io-error "/usr/lib/drbd/notify-local-io-error.sh; \
    /usr/lib/drbd/notify-emergency-shutdown.sh; echo o > /proc/sysrq-trigger ; halt -f";
  }
  startup {
    wfc-timeout 30;
    degr-wfc-timeout 120;
    outdated-wfc-timeout 2;
  }
  disk {
    on-io-error detach;
  }
  syncer {
    rate 10M;
  }
  on host1.local {
    device  /dev/drbd0;
    disk    /dev/VG01/LV00;
    address 192.168.1.1:7788;
    flexible-meta-disk  internal;
  }
  on host2.local {
    device /dev/drbd0;
    disk    /dev/VG01/LV00;
    address 192.168.1.2:7788;
    flexible-meta-disk  internal;
  }
}

なお、drbd.confは、2つのサーバで同一の設定がされている必要があります。

 

 

DRBDの初期化

まずはDRBDの初期化を行います。

 

カーネルモジュールのロード

カーネルモジュールをロードします。

この時、DRBDでミラーするパティションの個数も指定します。

modprobe drbd minor_count=1

 

ロードの確認をするには、以下のコマンドを利用します。

lsmod | grep drbd
drbd       268264  0

 

/proc/drbdも確認します。

cat /proc/drbd
version: 8.3.2 (api:88/proto:86-90)

 

メタ領域の初期化

以下のコマンドで、メタ領域を初期化します。

drbdadm create-md r0
Writing meta data...
initializing activity log
NOT initialized bitmap
New drbd meta data block successfully created.

 

初期同期の実施

DRBDを起動して、ミラーリングするパーティションの初期同期を行います。

起動順は、プライマリ-セカンダリの順番でDRBDを起動します。

 

プライマリを起動

drbdadm up all

 

状態確認

cat /proc/drbd
ersion: 8.3.2 (api:88/proto:86-90)
状態はWFConnectionになる
 0: cs:WFConnection ro:Secondary/Unknown ds:Inconsistent/DUnknown C r----
    ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:1605544

 

セカンダリを起動

drbdadm up all

 

状態確認

cat /proc/drbd
version: 8.3.2 (api:88/proto:86-90)
状態がConnectedになる
 0: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r----
    ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:1605544

プライマリとセカンダリがConnected状態になったら、同期を行います。

 

同期を行うには、プライマリ側で以下のコマンドを実行します。

drbdadm -- --overwrite-data-of-peer primary all

 

同期作業の状態を確認するには、/proc/drbdを参照します。

cat /proc/drbd
version: 8.3.2 (api:88/proto:86-90)
 0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r----
    ns:33792 nr:0 dw:0 dr:33792 al:0 bm:2 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:1571752
	[>....................] sync'ed:  2.3% (1571752/1605544)K
	finish: 0:02:18 speed: 11,264 (11,264) K/sec

同期が終了すると、/proc/drbdは以下のような内容になります。

 

確認しておく点は以下の通りです。

1.接続がConnectedになっている事

2.プライマリで、Primary/Secondaryになっている事

3.セカンダリで、Secondary/Primaryになっている事

 

プライマリ側

version: 8.3.2 (api:88/proto:86-90)
 0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r----
    ns:1605544 nr:0 dw:0 dr:1605544 al:0 bm:98 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0

 

セカンダリ側

version: 8.3.2 (api:88/proto:86-90)
 0: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r----
    ns:0 nr:1605544 dw:1605544 dr:0 al:0 bm:98 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0

 

 

ファイルシステムの作成

同期が完了したら、DRBD領域(/dev/drbd0)にファイルシステムを作成します。

この作業はプライマリで行う必要があります。

mkfs.ext3 -j /dev/drbd0

 

次に、マウントポイントを作成しマウントしてみます。

ここでは、DRBD領域を/dataにマウントします。

 

マウントポイントの作成

mkdir /data

 

マウントの実行

mount /dev/drbd0 /data

正常にマウントされている事を確認してください。

 

自動起動の設定

DRBDがシステムの起動時に自動で実行するように設定します。

CentOSのパッケージでインストールした場合は、/etc/init.d/drbdが既にありますので、これを登録します。

chkconfig drbd on

 

 

Heartbeatとの組み合わせ

DRBDのプライマリとセカンダリ切り替えに利用するのは、Heartbeatが適しています。

heartbeatでHAクラスタ構成を作成し、HAクラスタのプライマリ側がDRBDのプライマリとなるように、Heartbeatで管理します。また、DRBD領域のマウント処理もHeartbeatで行います。

なお、Heartbeatの基本的な設定は終了している物とします。Heartbeatの設定については、こちらのHeartBeatによるHAクラスタの設定をご覧ください。

ここでは、Heartbeatの設定にDRBDを追加する方法を記載します。

 

Heartbeatの設定

DRBDのリソースをHeartbeatで管理させるには、/etc/ha.d/haresourcesにDRBDのファイルシステム設定を追加します。

/etc/ha.d/haresources

host1.local drbddisk Filesystem::/dev/drbd0::/data::ext3 192.168.1.100/24

これで、HeartbeatでプライマリになっているサーバがDRBDのプライマリになり、Heartbeatで切り替わった場合は、DRBDも切り替わります。

また、DRBD領域の/dataのマウントもHeartbeatにより実行されます。

Leave a Comment


NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <img localsrc="" alt="">