VMwareでDRBDをテスト
おはようございます、牧野です。今週から朝型生活に切り替えました。できるだけがんばって続けていこうと思っています。
さて、今回はDRBDについてです。
DRBDについて簡単に説明すると、ハードディスクのRAID1(ミラーリング)を、ネットワークを介して離れた場所にあるマシンのハードディスクとできるようにするためのソフトです。
DRBDはオープンソースなので、高価な機器を買わなくてもよく、予めRAIDを組んでいなくてもミラーリングを実現できます。
さらにheartbeatと、データベースやNFSといった別サービスを組み合わせることにより、一方のマシンにトラブルが発生した場合に自動的にもう一方のマシンを使うようにする、というような冗長化システムを実現できます。
詳しくはこちらを見て下さい。英語のページの方が説明が充実しています。
http://www.drbd.jp/
ただ、いくつか制約があります。
・カーネルのバージョンに依存
カーネルモジュールを使用するため、カーネルがバージョンアップすると再インストールが必要です。
・ブロックデバイスごとの同期
RAIDなこともあり、ブロックデバイス丸ごとの同期になります。特定のディレクトリ以下だけ、という指定はできない場合もあります。
あとは、設定、検証が多少面倒とか。。
バージョンの違い(0.7系と0.8系)で、できることやコマンドが若干違ったりもします。
今回は、自分のCentOS環境でDRBDをインストールし、動作確認するところまでです。検証環境の構築にけっこう時間がかかってしまいました。。heartbeat等との組み合わせはまた後日、ということで。。。
最初、VMwareのCentOS環境を1つ作って、colinuxのCentOSと試そうとしたのですが、colinuxの方でyumインストールのカーネルモジュールが動かず…。colinuxのカーネルのバージョンとyumでインストールしたモジュールの対応カーネルバージョンが違っていたのが原因でした。
結局、VMwareでCentOS環境を2つ用意しました。CentOSは手元にあった4.5を使用しています。
1.yumでdrbdとkmod-drbdをインストール
2.検証用ハードディスクの作成
今回は、qemu、VMX Editor、VMware Playerを使って環境を作りました。
VMX Editorまたはqemuコマンドで新たにハードディスクを2つ作り、各VMware Player用設定ファイルを変更します。
最初、ディスク容量を100MBで作ったら動かず、1GBで作り直しました。
0.7系ではdrbdのメタデータ領域として、128MB必要です。
次に設定ファイルを変更します。
自分の設定ファイル vm01.vmx
これで起動すると「/dev/hdc」ができているので、
3.drbdの設定、準備
各マシンで実行します。
drbdカーネルモジュールの読み込み
/etc/drbd.conf
deviceの名前は同じにします。
meta-diskのinternalは、メタデータ領域をミラーリングに使用するディスクの一部に確保するという指定です。
設定ファイルが準備できたら、drbdを再起動しておきます。
ところで、drbdにはプライマリ、セカンダリという概念があって、プライマリ指定されているマシンのディスクだけマウントして使用することができます。
プライマリとして使用する方のマシンで
drbdのページにも解説がありますが、「--do-what-I-say」は0.7系のオプションで、0.8系では「--overwrite-data-of-peer」になります。
4.動作確認
プライマリのマシンで適当にディレクトリを作り、マウントします。
もう一方のマシンで
DRBDはheartbeatと組み合わせて冗長化システムを組むことで真価を発揮しますが、単体でも自動バックアップ等には使えます。
ところで今回初めてちゃんとVMwareを使用しました。colinuxより多少重く、特にファイル書き込みがもっさりしている気がしました。ただ、同じ環境をぽこぽこと手軽に作ることができるのは便利です。
パフォーマンス無視で、とりあえず環境を作りたい時にはいいですね。
さて、今回はDRBDについてです。
DRBDについて簡単に説明すると、ハードディスクのRAID1(ミラーリング)を、ネットワークを介して離れた場所にあるマシンのハードディスクとできるようにするためのソフトです。
DRBDはオープンソースなので、高価な機器を買わなくてもよく、予めRAIDを組んでいなくてもミラーリングを実現できます。
さらにheartbeatと、データベースやNFSといった別サービスを組み合わせることにより、一方のマシンにトラブルが発生した場合に自動的にもう一方のマシンを使うようにする、というような冗長化システムを実現できます。
詳しくはこちらを見て下さい。英語のページの方が説明が充実しています。
http://www.drbd.jp/
ただ、いくつか制約があります。
・カーネルのバージョンに依存
カーネルモジュールを使用するため、カーネルがバージョンアップすると再インストールが必要です。
・ブロックデバイスごとの同期
RAIDなこともあり、ブロックデバイス丸ごとの同期になります。特定のディレクトリ以下だけ、という指定はできない場合もあります。
あとは、設定、検証が多少面倒とか。。
バージョンの違い(0.7系と0.8系)で、できることやコマンドが若干違ったりもします。
今回は、自分のCentOS環境でDRBDをインストールし、動作確認するところまでです。検証環境の構築にけっこう時間がかかってしまいました。。heartbeat等との組み合わせはまた後日、ということで。。。
最初、VMwareのCentOS環境を1つ作って、colinuxのCentOSと試そうとしたのですが、colinuxの方でyumインストールのカーネルモジュールが動かず…。colinuxのカーネルのバージョンとyumでインストールしたモジュールの対応カーネルバージョンが違っていたのが原因でした。
結局、VMwareでCentOS環境を2つ用意しました。CentOSは手元にあった4.5を使用しています。
1.yumでdrbdとkmod-drbdをインストール
- #
yum install drbd kmod-drbd
2.検証用ハードディスクの作成
今回は、qemu、VMX Editor、VMware Playerを使って環境を作りました。
VMX Editorまたはqemuコマンドで新たにハードディスクを2つ作り、各VMware Player用設定ファイルを変更します。
最初、ディスク容量を100MBで作ったら動かず、1GBで作り直しました。
0.7系ではdrbdのメタデータ領域として、128MB必要です。
次に設定ファイルを変更します。
自分の設定ファイル vm01.vmx
- #worte
by vmx-editor - .encoding
= "Shift_JIS" - config.version
= "8" - virtualHW.version
= "4" - numvcpus
= "1" - nvram
= "nvram" - memsize
= "300" - displayName
= "vm01" - guestOS
= "otherlinux" - Ethernet0.present
= "TRUE" - Ethernet0.connectionType
= "bridged" - logging
= "FALSE" - usb.present
= "FALSE" - Floppy0.present
= "FALSE" - Sound.present
= "FALSE" - ide0:0.present
= "TRUE" - ide0:0.devicetype
= "disk" - ide0:0.filename
= "vm01.vmdk" - ide0:0.startConnected
= "TRUE" - ide0:1.present
= "TRUE" - ide0:1.autodetect
= "TRUE" - ide0:1.devicetype
= "cdrom-image" - ide0:1.startConnected
= "TRUE" - ide1:0.present
= "TRUE" - ide1:0.devicetype
= "disk" - ide1:0.filename
= "vm0102.vmdk" - ide1:0.startConnected
= "TRUE" - extendedConfigFile
= "vm01.vmxf" - virtualHW.productCompatibility
= "hosted" - tools.upgrade.policy
= "manual" - ethernet0.addressType
= "generated" - tools.syncTime
= "FALSE" - uuid.location
= "56 4d af ac 9d 5d 75 a4-99 8a 3d e3 35 d4 c3 28" - uuid.bios
= "56 4d af ac 9d 5d 75 a4-99 8a 3d e3 35 d4 c3 28" - ide0:0.redo
= "" - ide1:0.redo
= "" - vmotion.checkpointFBSize
= "18153472" - ethernet0.generatedAddress
= "00:0c:29:d4:c3:28" - ethernet0.generatedAddressOffset
= "0" - ide0:1.fileName
= "C:\centos\CentOS-4.5-i386-bin3of4.iso"
これで起動すると「/dev/hdc」ができているので、
- #mkfs.ext3
/dev/hdc
3.drbdの設定、準備
各マシンで実行します。
drbdカーネルモジュールの読み込み
- #modprobe
drbd - #lsmod
/etc/drbd.conf
- resource
drbd0 { protocol C; syncer { rate 50M; } disk { on-io-error pass_on; } on makmak-vm.jp { device /dev/drbd0; disk /dev/hdc; address 192.168.xxx.xxx:7789; meta-disk internal; } on makmak-vm2.jp { device /dev/drbd0; disk /dev/hdc; address 192.168.xxx.yyy:7789; meta-disk internal; } - }
deviceの名前は同じにします。
meta-diskのinternalは、メタデータ領域をミラーリングに使用するディスクの一部に確保するという指定です。
設定ファイルが準備できたら、drbdを再起動しておきます。
- #/etc/init.d/drbd
restart
ところで、drbdにはプライマリ、セカンダリという概念があって、プライマリ指定されているマシンのディスクだけマウントして使用することができます。
プライマリとして使用する方のマシンで
- drbdadm
-- --do-what-I-say primary all
drbdのページにも解説がありますが、「--do-what-I-say」は0.7系のオプションで、0.8系では「--overwrite-data-of-peer」になります。
4.動作確認
プライマリのマシンで適当にディレクトリを作り、マウントします。
- #mkdir
/data - #mount
/dev/drbd0 /data - #touch
/data/hogehoge
- #umount
/data - #drbdsetup
/dev/drbd0 secondary
- #drbdadm
state all - Secondary/Secondary
もう一方のマシンで
- #drbdsetup
/dev/drbd0 primary - #drbdadm
state all - Primary/Secondary
- #mount
/dev/drbd0 /data - #ls
-lah /data
DRBDはheartbeatと組み合わせて冗長化システムを組むことで真価を発揮しますが、単体でも自動バックアップ等には使えます。
ところで今回初めてちゃんとVMwareを使用しました。colinuxより多少重く、特にファイル書き込みがもっさりしている気がしました。ただ、同じ環境をぽこぽこと手軽に作ることができるのは便利です。
パフォーマンス無視で、とりあえず環境を作りたい時にはいいですね。
トラックバックURI
最近の記事
JavaScriptのクロスドメイン問題対応方法 [2012年05月17日 : 笹亀弘]
JavaScriptのコーディング規約を気軽にチェック [2012年05月14日 : 中川善樹]
誕生日プレゼント [2012年05月10日 : 阿部恵]
イラストでわかる!git入門の入門 [2012年05月09日 : 志田仁美]
【CSS3】HSL色空間による色指定のすゝめ [2012年05月09日 : 橋本章史]
インスピレーションをかきたてるポスターデザインのまとめ記事のまとめ [2012年04月25日 : 鴨田健次]
エンジニアの英会話 〜とっさの一言〜 [2012年04月19日 : 斉藤勝也]
イコライザーをFireworksで描いてみました [2012年04月16日 : 和田記光]
SFNewTech Japan Night のファイナリストに選出されました!(他、もろもろの出展の御案内) [2012年04月06日 : 小林有佳]
使えるとちょっと便利なSSHのTIPS [2012年04月04日 : 牧野克俊]













コメントフォーム