[wiki:ScalableStorageWithOSS03 OSS だけでスケーラブルなストレージを安価に構築する方法 #3] のつづき。今回は Device-Mapper Multipath をつかって、DRBD によりミラーされている2つのブロックデバイスを、仮想的にひとつに見えるようにします。
まずは client0 と client1 に device-mapper-multipath がインストールされていなければ、インストール。
$ sudo yum -y install device-mapper-multipath
/etc/multipath.conf を修正。デフォルトでは blacklist の devnode に * が指定されていて、すべてのデバイスに対して無効になっているので、blacklist をコメントアウト。
# Blacklist all devices by default. Remove this to enable multipathing
# on the default devices.
#blacklist {
# devnode "*"
#}
multipathd を restart。
$ sudo /etc/init.d/multipathd restart
multipath -l で確認。
$ sudo /sbin/multipath -l
mpath1 (1) dm-1 GNBD,GNBD
[size=1024M][features=0][hwhandler=0]
\_ round-robin 0 [prio=0][active]
\_ #:#:#:# gnbd2 252:2 [active][undef]
\_ #:#:#:# gnbd3 252:3 [active][undef]
mpath0 (0) dm-0 GNBD,GNBD
[size=1024M][features=0][hwhandler=0]
\_ round-robin 0 [prio=0][active]
\_ #:#:#:# gnbd0 252:0 [active][undef]
\_ #:#:#:# gnbd1 252:1 [active][undef]
gnbd0 と gnbd1 が /dev/mapper/mpath0 として見え、gnbd2 と gnbd3 が /dev/mapper/mpath1 として見える。
この状態で、/dev/mapper/mpath0 へ書き込みが発生すると、gnbd0 か gnbd1 のどちらかに書き込まれ、DRBD によりもう一方にミラーされる、という状態ができあがり。図にすると以下のような状態。/dev/mapper/mpath0 から読み込んだ場合にも、gnbd0 か gnbd1 のどちらかから読み込むことになるが、DRBD によりミラーされているので、どちらを読みに行っても OK。
次回は /dev/mapper/mpath0 と /dev/mapper/mpath1 を物理ボリュームとして、 CLVM によりひとつの論理ボリュームを構成し、論理ボリュームのメタデータを client0 と client1 間で共有する方法について解説します。