DRBDをrpmパッケージ化してインストールした時の備忘録です。

■DRBD公式(日本語)
http://www.drbd.org/ja/home/what-is-drbd/

■DRBDとは?
ネットワークを使用してディスクのミラーリングが行えます。
HAクラスタを構築する際によく使用されます。

DRBDイメージ図


■説明
ここでは、ホスト「example.loca(プライマリー)」の「/dev/sdb1」とホスト「example2.local(セカンダリー)」の「/dev/sdb1」を同期させます。
DRBDは、リポジトリを登録すると「yum」で簡単に入りますが、ここでは最新版のソースからrpmパッケージを作成してインストールします。
rpmパッケージ作成に使用するspecファイルはDRBD付属のものを使用しますが、そのままでは使用できないため修正を加えます。

イメージ図のやじるしが「→」になっているが、どちらかと言うと「←→」が正しい。書き間違いに気づいたけど修正がめんどくさくてほったらかしなのはナイショ:D


■使用OS
CentOS 5.6 64bit
注)OSのインストール方法は、以下アドレスの通りにしています。
http://www.kurobuti.com/linuxserver/index.php?option=com_content&view=artic
le&id=68&Itemid=74


■DRBDバージョン
drbd-8.3.10

■specファイル
drbd-km.spec
drbd.spec
ここでは、上記スペックファイルを使用します。
注)上記specファイルはパッケージの作成、動作を完全に保証しません。使用は自己責任でお願いします。

(1)「drbd-8.3.10.tar.gz」をダウンロード
[root@example ~]# cd /usr/src/redhat/SOURCES/
[root@example SOURCES]# wget http://oss.linbit.com/drbd/8.3/drbd-8.3.10.tar.gz
最新版は下記URLを参照してください。
http://oss.linbit.com/drbd/

(2)specファイルをダウンロード
[root@example SOURCES]# cd ../SPECS/
[root@example SPECS]# wget http://www.kurobuti.com/download/drbd/8.3.10/spec/drbd-km.spec
[root@example SPECS]# wget http://www.kurobuti.com/download/drbd/8.3.10/spec/drbd.spec

(3)「DRBD」のカーネルモジュールパッケージを作成
[root@example SPECS]# rpmbuild -bb drbd-km.spec

(4)「DRBD」のパッケージを作成
[root@example SPECS]# rpmbuild -bb drbd.spec

(5)パッケージのインストール
[root@example SPECS]# cd ../RPMS/x86_64/
[root@example x86_64]# rpm -ivh drbd-8.3.10-1.x86_64.rpm drbd-heartbeat-8.3.10-1.x86_64.rpm drbd-udev-8.3.10-1.x86_64.rpm drbd-bash-completion-8.3.10-1.x86_64.rpm drbd-kmod-8.3.10-1.x86_64.rpm drbd-utils-8.3.10-1.x86_64.rpm drbd-pacemaker-8.3.10-1.x86_64.rpm drbd-xen-8.3.10-1.x86_64.rpm

(6)作成したパッケージをexample2.localにコピーする。
[root@example x86_64]# tar cf drbd_set.tar *
[root@example x86_64]# scp drbd_set.tar 192.168.0.62:
root@192.168.0.62's password:
drbd_set.tar                                                                      100% 1670KB   1.6MB/s   00:00
ここでは、アーカイブ化してscpでコピーします。

(7)example.localのhostsを編集
[root@example ~]# vi /etc/hosts
# 以下を追加
192.168.0.60    example.local
192.168.0.62    example2.local

(8)example.localの「DRBD」の設定
[root@example ~]# cd /etc/drbd.d/
[root@example drbd.d]# vi r0.res
resource r0 {
    protocol C;
    device /dev/drbd0;
    meta-disk internal;
    disk /dev/sdb1;

    on example.local {
        address 192.168.0.60:7801;
    }
    on example2.local {
        address 192.168.0.62:7801;
    }

(9)example.localの同期するパーティッション作成
[root@example ~]# fdisk /dev/sdb
コマンド (m でヘルプ): n
コマンドアクション
   e   拡張
   p   基本領域 (1-4)
p
領域番号 (1-4): 1
最初 シリンダ (1-130, default 1):
Using default value 1
終点 シリンダ または +サイズ または +サイズM または +サイズK (1-130, default 130):
Using default value 130

コマンド (m でヘルプ): w

(10)example.localで同期情報に必要なメタデータを作成
[root@example ~]# drbdadm create-md r0
  --==  Thank you for participating in the global usage survey  ==--
The server's response is:

you are the 1415th user to install this version
Writing meta data...
initializing activity log
NOT initialized bitmap
New drbd meta data block successfully created.
success

(11)example.localの「DRBD」を起動
[root@example ~]# /etc/rc.d/init.d/drbd start
Starting DRBD resources: [ d(r0) n(r0) ]..........
***************************************************************
 DRBD's startup script waits for the peer node(s) to appear.
 - In case this node was already a degraded cluster before the
   reboot the timeout is 0 seconds. [degr-wfc-timeout]
 - If the peer was available before the reboot the timeout will
   expire after 0 seconds. [wfc-timeout]
   (These values are for resource 'r0'; 0 sec -> wait forever)
 To abort waiting enter 'yes' [  12]:yes
注)example2.localのセットアップが終わっておらず認識できないため、「To abourt wating enter ‘yes’[ n]:yes」で一旦抜ける。

(12)example2.localに「DRBD」をインストール
[root@example2 ~]# tar xvf drbd_set.tar
[root@example2 ~]# rpm -ivh drbd-8.3.10-1.x86_64.rpm drbd-heartbeat-8.3.10-1.x86_64.rpm drbd-udev-8.3.10-1.x86_64.rpm drbd-bash-completion-8.3.10-1.x86_64.rpm drbd-kmod-8.3.10-1.x86_64.rpm drbd-utils-8.3.10-1.x86_64.rpm drbd-pacemaker-8.3.10-1.x86_64.rpm drbd-xen-8.3.10-1.x86_64.rpm

(13)example.localから「DRBD」の設定ファイルをコピー
[root@example2 ~]# scp 192.168.0.60:/etc/drbd.d/r0.res /etc/drbd.d/
root@192.168.0.60's password:
r0.res                                                                                      100%  229     0.2KB/s   00:00

(14)example2.localのhostsを編集
[root@example2 ~]# vi /etc/hosts
# 以下を追加
192.168.0.60    example.local
192.168.0.62    example2.local

(15)example2.localの同期するパーティッション作成
[root@example2 ~]# fdisk /dev/sdb
コマンド (m でヘルプ): n
コマンドアクション
   e   拡張
   p   基本領域 (1-4)
p
領域番号 (1-4): 1
最初 シリンダ (1-130, default 1):
Using default value 1
終点 シリンダ または +サイズ または +サイズM または +サイズK (1-130, default 130):
Using default value 130

コマンド (m でヘルプ): w

(16)example2.localで同期情報に必要なメタデータを作成
[root@example2 ~]# drbdadm create-md r0
  --==  Thank you for participating in the global usage survey  ==--
The server's response is:

you are the 1416th user to install this version
Writing meta data...
initializing activity log
NOT initialized bitmap
New drbd meta data block successfully created.
success

(16)example2.localの「DRBD」を起動
[root@example2 ~]# /etc/rc.d/init.d/drbd start
Starting DRBD resources: [ d(r0) n(r0) ].

(17)example.localをプライマリとして初期同期を実行
[root@example ~]# drbdadm -- --overwrite-data-of-peer primary r0

(18)同期ステータスを確認
・example.local
[root@example ~]# cat /proc/drbd
version: 8.3.10 (api:88/proto:86-96)
GIT-hash: 5c0b0469666682443d4785d90a2c603378f9017b build by root@example.local, 2011-04-16 16:36:32
 0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r-----
    ns:46464 nr:0 dw:0 dr:46464 al:0 bm:2 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:997660
        [>....................] sync'ed:  4.8% (997660/1044124)K
        finish: 0:12:40 speed: 1,292 (1,288) K/sec
・example2.local
[root@example2 ~]# cat /proc/drbd
version: 8.3.10 (api:88/proto:86-96)
GIT-hash: 5c0b0469666682443d4785d90a2c603378f9017b build by root@example.local, 2011-04-16 16:36:32
 0: cs:SyncTarget ro:Secondary/Primary ds:Inconsistent/UpToDate C r-----
    ns:0 nr:110976 dw:110976 dr:0 al:0 bm:6 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:933148
        [=>..................] sync'ed: 11.0% (933148/1044124)K
        finish: 0:11:57 speed: 1,292 (1,288) want: 250 K/sec
環境にもよると思いますが、同期はすごく・・・遅いです・・・。

(19)ファイルシステムの作成
[root@example ~]# mkfs.ext3 /dev/drbd0
注)ファイルシステムの作成は同期中でも可能のようです。

(20)example.localで「/dev/drbd0」をマウント
[root@example ~]# mkdir /test
[root@example ~]# mount /dev/drbd0 /test/
[root@example ~]# df
Filesystem           1K-ブロック    使用   使用可 使用% マウント位置
/dev/mapper/VolGroup00-LogVol00
                      18187836   2517932  14731104  15% /
/dev/sda1               101086     33364     62503  35% /boot
tmpfs                   513068         0    513068   0% /dev/shm
/dev/drbd0             1027700     17692    957804   2% /test

(21)動作確認
・example.localでテスト用のデータを作成する。
[root@example test]# dd if=/dev/zero of=test.file count=10 bs=1M
10+0 records in
10+0 records out
10485760 bytes (10 MB) copied, 0.030571 seconds, 343 MB/s
[root@example test]# ls
lost+found  test.file

・example.localで「/dev/drbd0」をアンマウントする。
[root@example ~]# umount /test/

・example.localをセカンダリにする。
[root@example ~]# drbdadm secondary r0
注)プライマリで設定してあるマシンでしか「/dev/drbd0」はマウントできない。

・example2.localで「/dev/drbd0」をマウントするディレクトリを作成する。
[root@example2 ~]# mkdir /test

・example2.localをプライマリにする。
[root@example2 ~]# drbdadm primary r0

・example2.localで「/dev/drbd0」をマウントする。
[root@example2 ~]# mount /dev/drbd0 /test/
[root@example2 ~]# ls /test/
lost+found  test.file
[root@example2 ~]# du -h /test/test.file
11M     /test/test.file
example.localで作成したファイルが見えれば大丈夫です。

・試しにexample.localをシャットダウンしてもexample2.localで「/dev/drbd0」をマウントしていられるか確かめる。

参考文献
1. http://www.drbd.org/ja/docs/about/
2. http://www.atmarkit.co.jp/flinux/special/linuxha01/01b.html


4月 16, 2011 at 5:29 pm by 黒ぶちメガネ
Category: Linux, 冗長化