月別アーカイブ: 2014年12月




CentOS6系にてDRBD 8.3.11を構築してマウント。クラスター構成を実現する手順




投稿日:

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