DRBDは2台で設定を実施しますので、2台それぞれでの設定が必要になります。
【DRBDのインストール】
※ 以下の手順は2台ともに実施します。
# cat /etc/redhat-release CentOS release 6.5 (Final)
# cd /usr/local/src
キーのインストール
# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
レポジトリの追加
# rpm -Uvh http://www.elrepo.org/elrepo-release-6-5.el6.elrepo.noarch.rpm
通常は利用しないので、以下の設定をしておきます。
# vi /etc/yum.repos.d/elrepo.repo [elrepo] name=ELRepo.org Community Enterprise Linux Repository - el6 baseurl=http://elrepo.org/linux/elrepo/el6/$basearch/ http://mirrors.coreix.net/elrepo/elrepo/el6/$basearch/ http://jur-linux.org/download/elrepo/elrepo/el6/$basearch/ http://repos.lax-noc.com/elrepo/elrepo/el6/$basearch/ http://mirror.ventraip.net.au/elrepo/elrepo/el6/$basearch/ mirrorlist=http://mirrors.elrepo.org/mirrors-elrepo.el6 #enabled=1 enabled=0 # 通常利用しないので、0。 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-elrepo.org protect=0
【DRBDをelrepoからインストール】
※ 以下は2台ともに実施します。
# yum --enablerepo=elrepo install drbd83-utils kmod-drbd83 略 Installed: drbd83-utils.x86_64 0:8.3.16-1.el6.elrepo kmod-drbd83.x86_64 0:8.3.16-1.el6.elrepo Dependency Installed: perl.x86_64 4:5.10.1-136.el6 perl-Module-Pluggable.x86_64 1:3.90-136.el6 perl-Pod-Escapes.x86_64 1:1.04-136.el6 perl-Pod-Simple.x86_64 1:3.13-136.el6 perl-libs.x86_64 4:5.10.1-136.el6 perl-version.x86_64 3:0.77-136.el6 Complete!
このようにインストールが完了します。
【不要サービス停止】
※ 以下は2台ともに実施します。
不用意に停止させる必要はありませんが、必要もない場合は問題の元ですので、停止させましょう。
とくにSElinuxは、場合によってパーミッションエラーを起こしたりします。
・iptables停止
# /etc/init.d/iptables stop
自動起動も停止
# chkconfig iptables off
・SElinux停止
動的に停止 # setenforce 0 静的に停止 # vi /etc/sysconfig/selinux SELINUX=disabled に変更。 ここで再起動もしておくとよし。
【DRBDの初期設定】
※ 以下は2台ともに実施します。
オリジナルの保存
# cp -rp /etc/drbd.conf /etc/drbd.conf.org
設定ファイルを編集します。
# vi /etc/drbd.conf global { usage-count yes; } common { syncer { rate 20M; } } resource drbd0 { protocol C; disk { on-io-error detach; } net { max-buffers 1600; } on ip-172-xx-xx-1 { device /dev/drbd0; disk /dev/xvdf; address 172.30.17.4:7788; meta-disk internal; } on ip-172-xx-xx-2 { device /dev/drbd0; disk /dev/xvdf; address 172.30.17.5:7788; meta-disk internal; } }
今回は「meta-disk」をinternalの設定にしています。
それぞれの設定値については、、記事の最後にある参照のURLを参考にしてください。
モジュールの読み込み
# modprobe drbd
※ これをしていないと、メタデータの作成でエラーになります。
メタデータの作成
# drbdadm create-md drbd0 md_offset 8589930496 al_offset 8589897728 bm_offset 8589635584 Found some data ==> This might destroy existing data! <== Do you want to proceed? [need to type 'yes' to confirm] yes Writing meta data... initializing activity log NOT initialized bitmap New drbd meta data block successfully created. success
出来ました。
# drbdadm adjust drbd0
# cat /proc/drbd version: 8.3.16 (api:88/proto:86-97) GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43 0: cs:WFConnection ro:Secondary/Unknown ds:Inconsistent/DUnknown C r----s ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:8388316
まだ片方しか出来ていないので、Secondary/Unknownになっています。
ここまでをもう片方でも実行します。
【自動起動確認】
※ 以下は2台ともに実施します。
# chkconfig --list drbd drbd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
自動起動になってますね。
【初回同期をしてみる】
まずは、同期をしていない現状での状態です。
1台目
# /etc/init.d/drbd status drbd driver loaded OK; device status: version: 8.3.16 (api:88/proto:86-97) GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43 m:res cs ro ds p mounted fstype 0:drbd0 WFConnection Secondary/Unknown Inconsistent/DUnknown C
2台目
# /etc/init.d/drbd status drbd driver loaded OK; device status: version: 8.3.16 (api:88/proto:86-97) GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43 m:res cs ro ds p mounted fstype 0:drbd0 WFConnection Secondary/Unknown Inconsistent/DUnknown C
では、初期同期をしてみます。
# drbdadm -- --overwrite-data-of-peer primary resource 'resource' not defined in your config.
リソースをリソース名にしました。
# drbdadm -- --overwrite-data-of-peer primary drbd0
エラーは出さない。
# watch cat /proc/drbd Every 2.0s: cat /proc/drbd Wed Aug 6 00:40:44 2014 version: 8.3.16 (api:88/proto:86-97) GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43 0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r----- ns:619008 nr:0 dw:0 dr:619672 al:0 bm:37 lo:6 pe:0 ua:6 ap:0 ep:1 wo:f oos:7769308 [>...................] sync'ed: 7.5% (7584/8188)M finish: 0:14:34 speed: 8,872 (9,520) K/sec
こんな感じで同期の状況が確認できます。
ちなみに、secandary側も同様に同期の状況が確認できます。
同期が完了すると、以下のように表示されて
version: 8.3.16 (api:88/proto:86-97) GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43 0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r----- ns:8388316 nr:0 dw:0 dr:8388980 al:0 bm:512 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
「Primary/Secondary」 という表示が見て取れます。
drbdの初期設定までできました。次からファイルシステムを設定してマウントまで進めます。
ここからは、
http://dev.classmethod.jp/cloud/amazon-linux-drbd/
を参照します。
ちなみに、drbdを停止してみる。
すると、プライマリ設定は外れて、Secondary/Secondary となる。
重要なのは、プライマリに昇格してからじゃないと、マウントしてはいけないということ。
# drbdadm -- --overwrite-data-of-peer primary drbd0
xfsファオーマットにして利用する。 ※ xfsは大容量データファイルの扱いに適している。
こちらも参考 http://www.e-agency.co.jp/column/20121107.html
# yum install xfs*
これは、プライマリ側で実行
# mkfs.xfs /dev/drbd0 meta-data=/dev/drbd0 isize=256 agcount=4, agsize=524270 blks = sectsz=512 attr=2, projid32bit=0 data = bsize=4096 blocks=2097079, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 log =internal log bsize=4096 blocks=2560, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0
ちなみに、これをsecondary側で実行すると、
# mkfs.xfs /dev/drbd0 mkfs.xfs: cannot open /dev/drbd0: Read-only file system
とエラーになる。
マウントする。これもプライマリ側でしか実行できない。
$ sudo mkdir /data $ sudo mount /dev/drbd0 /data
次での検証のために、/data配下にファイルをおいておく。
# ls /data hello.txt
【セカンダリを昇格させる】
セカンダリをプライマリへ昇格させて、もう片方のインスタンスにデータが同期されているか確認します。まずは、プライマリのデバイスをアンマウントしてセカンダリへ降格させます。
プライマリのデバイスをアンマウント
$ sudo umount /data
# drbdadm secondary drbd0 # service drbd status drbd driver loaded OK; device status: version: 8.3.16 (api:88/proto:86-97) GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43 m:res cs ro ds p mounted fstype 0:drbd0 Connected Secondary/Secondary UpToDate/UpToDate C
プライマリ/セカンダリだったものが、セカンダリ/セカンダリになりました。
次にもう片方のインスタンスから以下のコマンドでプライマリへ昇格させます。
# cat /proc/drbd version: 8.3.16 (api:88/proto:86-97) GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43 0: cs:Connected ro:Secondary/Secondary ds:UpToDate/UpToDate C r----- ns:0 nr:12642 dw:12642 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
# drbdadm primary drbd0
# cat /proc/drbd version: 8.3.16 (api:88/proto:86-97) GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43 0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r----- ns:0 nr:12642 dw:12642 dr:664 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
# mount /dev/drbd0 /data
データの確認
# ls /data hello.txt
【参考】
How to Install DRBD on CentOs 6.2 | Learn Basics of Linux OS, commands, tutorials, Linux server administration, free linux training, mail server, dhcp, dns (bind)
http://www.broexperts.com/2012/06/how-to-install-drbd-on-centos-6-2/
Amazon LinuxでDRBD 8.3.11を構築する | Developers.IO
http://dev.classmethod.jp/cloud/amazon-linux-drbd/
DRBD+heartbeat+LVM(on Fedora Core10)によるクラスタリング : アシアルブログ
http://blog.asial.co.jp/599