離れた場所にある2つのストレージの同期 その2~デュアルプライマリモードに設定する~ [Linux(LVM/RAID/Storage)]
検証用環境をVirtualPCで2サーバ作成して実行しているため、drbdのディスク同期が猛烈に遅くて重いので、夜間ほったらかして同期実行をさせていたら、Windows Updateの自動更新でPCが勝手に再起動してしまい、また1から同期をすることになってしまって悲しい今日この頃、皆様いかがお過ごしでしょうか。(滝涙)
さて、前アーティクルでdrbdをごく普通にセットアップしたので今回は両方のサーバから同時に更新できるようにするためdrbdを「デュアルプライマリモード」にすることとします。
結論から言ってしまうと、物凄くあっけないです。(笑)
手順を確認しますと、以下のような感じ。
① /etc/drbd.confにデュアルプライマリモード用の設定を追加する
② 両サーバにてdrbdの切断&再接続&プライマリ昇格を実行(コマンド3発)
こんだけ。drbd.confへの追記内容も非常に簡単で拍子抜けします。(笑)
① /etc/drbd.confにデュアルプライマリモード用の設定を追加する
drbd.confに以下を追記します。場所は「resource」ブロックの中。(外でもいいみたいですが、リソースが1個しかないのでどちらでも一緒。一応ここではブロックの中に書いています。)
意味としては「net」ブロックでデュアルプライマリモードの動作を許可して、「startup」ブロックで両方のサーバが起動時にプライマリモードになるように設定しています。こんだけ。これを「resource」ブロックの中に記述するだけです。
念のため、今回のテスト環境におけるdrbd.confを晒しておくと…
という具合。
なお、このファイルはreinとfineと両方に同じファイルを置く必要がある。片方で編集したら、scpなりなんなりしてやればよろしいかと。
② 両サーバにてdrbdの切断&再接続&プライマリ昇格を実行(コマンド3発)
で、drbd.confの編集と配布が終わったら、この内容を反映させるべくコマンドを3発ほど投入する。
これらのコマンドは両方のサーバで実行する必要がある。
作業としてはたったこれだけ。簡単ですなあ。
では、drbdの状態を確認してみることにする。/proc/drbdを見れば一目瞭然。
「ro:Primary/Primary」という表示部分がソレ。ロールが両方のサーバ共に「Primary」となっている。ちなみに前アーティクルでは「ro:Primary/Secondary」となっていたので、明らかにロールが異なっていることが確認できよう。
では、両方のサーバで同じボリュームをマウントしてみよう…。
なお、先に断っておくがまだこの状態では双方のサーバから「同時に」ファイルやディレクトリのアクセス・更新は出来ないので要注意。なぜなら前アーティクルで/dev/drbd0の領域を「ext3」でフォーマットしているが、ext3は複数のサーバから同時にアクセスされることを想定していないファイルシステムなので、ファイルやディレクトリを破壊してしまう恐れがある。この対策は次アーティクルで。
…という訳なので、確認の内容としては前アーティクルでやったような「プライマリ・セカンダリの切り替えをすることなく」mount/umountできるということにとどまる。
まず、reinでマウントしてみよう。
はい。きちんと確認できました。
では、fine側でも同じ事をしてみます。この時drbdadmコマンドでprimary/secondaryの切り替えを行わないでマウント出来ることに注目。
コマンドプロンプトのサーバ名の所をエディタか何かで書き換えたんじゃないか?と思うような全く同じ結果になっていますな。(笑)
このように、両方のサーバから同じデータにアクセスできるということが確認できました。
次は両方のボリュームを同時にマウントして、同時にアクセスできるようにします。
さて、前アーティクルでdrbdをごく普通にセットアップしたので今回は両方のサーバから同時に更新できるようにするためdrbdを「デュアルプライマリモード」にすることとします。
結論から言ってしまうと、物凄くあっけないです。(笑)
手順を確認しますと、以下のような感じ。
① /etc/drbd.confにデュアルプライマリモード用の設定を追加する
② 両サーバにてdrbdの切断&再接続&プライマリ昇格を実行(コマンド3発)
こんだけ。drbd.confへの追記内容も非常に簡単で拍子抜けします。(笑)
① /etc/drbd.confにデュアルプライマリモード用の設定を追加する
drbd.confに以下を追記します。場所は「resource」ブロックの中。(外でもいいみたいですが、リソースが1個しかないのでどちらでも一緒。一応ここではブロックの中に書いています。)
net { allow-two-primaries; } startup { become-primary-on both; }
意味としては「net」ブロックでデュアルプライマリモードの動作を許可して、「startup」ブロックで両方のサーバが起動時にプライマリモードになるように設定しています。こんだけ。これを「resource」ブロックの中に記述するだけです。
念のため、今回のテスト環境におけるdrbd.confを晒しておくと…
include "/etc/drbd.d/global_common.conf"; include "/etc/drbd.d/*.res"; resource r0 { net { allow-two-primaries; } startup { become-primary-on both; } on rein { device /dev/drbd0; disk /dev/hdb1; address ***.***.***.241:7789; meta-disk internal; } on fine { device /dev/drbd0; disk /dev/hdb1; address ***.***.***.242:7789; meta-disk internal; } }
という具合。
なお、このファイルはreinとfineと両方に同じファイルを置く必要がある。片方で編集したら、scpなりなんなりしてやればよろしいかと。
② 両サーバにてdrbdの切断&再接続&プライマリ昇格を実行(コマンド3発)
で、drbd.confの編集と配布が終わったら、この内容を反映させるべくコマンドを3発ほど投入する。
drbdadm disconnect r0 drbdadm connect r0 drbdadm primary r0
これらのコマンドは両方のサーバで実行する必要がある。
作業としてはたったこれだけ。簡単ですなあ。
では、drbdの状態を確認してみることにする。/proc/drbdを見れば一目瞭然。
[root@rein ~]# cat /proc/drbd version: 8.3.8 (api:88/proto:86-94) GIT-hash: d78846e52224fd00562f7c225bcc25b2d422321d build by mockbuild@builder10.centos.org, 2010-06-04 08:04:16 0: cs:SyncSource ro:Primary/Primary ds:UpToDate/Inconsistent C r---- ns:480676 nr:8 dw:76 dr:597401 al:0 bm:36 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:3399932 [=>..................] sync'ed: 12.5% (3399932/3880540)K delay_probe: 658127 finish: 1:46:14 speed: 416 (308) K/sec
「ro:Primary/Primary」という表示部分がソレ。ロールが両方のサーバ共に「Primary」となっている。ちなみに前アーティクルでは「ro:Primary/Secondary」となっていたので、明らかにロールが異なっていることが確認できよう。
では、両方のサーバで同じボリュームをマウントしてみよう…。
なお、先に断っておくがまだこの状態では双方のサーバから「同時に」ファイルやディレクトリのアクセス・更新は出来ないので要注意。なぜなら前アーティクルで/dev/drbd0の領域を「ext3」でフォーマットしているが、ext3は複数のサーバから同時にアクセスされることを想定していないファイルシステムなので、ファイルやディレクトリを破壊してしまう恐れがある。この対策は次アーティクルで。
…という訳なので、確認の内容としては前アーティクルでやったような「プライマリ・セカンダリの切り替えをすることなく」mount/umountできるということにとどまる。
まず、reinでマウントしてみよう。
[root@rein ~]# mount /dev/drbd0 /mnt/work [root@rein ~]# df -h Filesystem サイズ 使用 残り 使用% マウント位置 /dev/mapper/VolGroup00-LogVol00 14G 1.2G 13G 9% / /dev/hda1 99M 19M 76M 20% /boot tmpfs 379M 0 379M 0% /dev/shm /dev/drbd0 16G 222M 15G 2% /mnt/work [root@rein ~]# find /mnt/work/etc -print | head /mnt/work/etc /mnt/work/etc/fonts /mnt/work/etc/fonts/fonts.dtd /mnt/work/etc/fonts/conf.d /mnt/work/etc/fonts/conf.d/60-latin.conf /mnt/work/etc/fonts/conf.d/80-delicious.conf /mnt/work/etc/fonts/conf.d/20-fix-globaladvance.conf /mnt/work/etc/fonts/conf.d/69-unifont.conf /mnt/work/etc/fonts/conf.d/90-synthetic.conf /mnt/work/etc/fonts/conf.d/64-nonlatin-fedora.conf [root@rein ~]# umount /mnt/work
はい。きちんと確認できました。
では、fine側でも同じ事をしてみます。この時drbdadmコマンドでprimary/secondaryの切り替えを行わないでマウント出来ることに注目。
[root@fine ~]# mount /dev/drbd0 /mnt/work [root@fine ~]# df -h Filesystem サイズ 使用 残り 使用% マウント位置 /dev/mapper/VolGroup00-LogVol00 14G 1.2G 13G 9% / /dev/hda1 99M 19M 76M 20% /boot tmpfs 379M 0 379M 0% /dev/shm /dev/drbd0 16G 222M 15G 2% /mnt/work [root@fine ~]# find /mnt/work/etc -print | head /mnt/work/etc /mnt/work/etc/fonts /mnt/work/etc/fonts/fonts.dtd /mnt/work/etc/fonts/conf.d /mnt/work/etc/fonts/conf.d/60-latin.conf /mnt/work/etc/fonts/conf.d/80-delicious.conf /mnt/work/etc/fonts/conf.d/20-fix-globaladvance.conf /mnt/work/etc/fonts/conf.d/69-unifont.conf /mnt/work/etc/fonts/conf.d/90-synthetic.conf /mnt/work/etc/fonts/conf.d/64-nonlatin-fedora.conf [root@fine ~]# umount /mnt/work
コマンドプロンプトのサーバ名の所をエディタか何かで書き換えたんじゃないか?と思うような全く同じ結果になっていますな。(笑)
このように、両方のサーバから同じデータにアクセスできるということが確認できました。
次は両方のボリュームを同時にマウントして、同時にアクセスできるようにします。
2011-11-15 10:47
nice!(0)
コメント(0)
トラックバック(0)
コメント 0