LoginSignup
5
7

More than 5 years have passed since last update.

DRBD8.4の構築手順

Last updated at Posted at 2017-09-30

1 環境

VMware Workstation 12 Player上の仮想マシンを使いました。
仮想マシンは2台です。それぞれのホスト名は、drbd1 ,drbd2です。
/dev/sdbをdrbdのテスト用のデバイスとして追加しました。

構成
      +---- drbd1 ----+               +---- drbd2 ----+
      |  (CentOS7.3)  |               |  (CentOS7.3)  |
      |               |               |               |
      |               |               |               |
      |   /dev/sda    |               |   /dev/sda    |
      |   /dev/sdb    |               |   /dev/sdb    |
      |               |               |               |
      +----- eth0 ----+               +----- eth0 ----+
              | .50                            | .60
              |                                |
              |                                |
      -------------------------------------------------
                        192.168.0.0/24
OS版数
[root@drbd1 ~]# cat /etc/redhat-release
CentOS Linux release 7.3.1611 (Core)

[root@drbd1 ~]# uname -r
3.10.0-514.el7.x86_64

2 事前準備

2.1 仮想マシンにディスクの追加(drbd1,drbd2で実施)

私の場合、
「仮想マシン設定の編集(D)」->「追加(A)」->「ハードディスクの追加」->「SCSI(s) (推奨)」
->「仮想ディスクの新規作成(V)」-> 「仮想ディスクを単一ファイルとして格納(O)」を実行して、
ディスク(★)を追加しました。

[root@drbd1 ~]# lsblk -pi
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
/dev/sda      8:0    0   20G  0 disk
|-/dev/sda1   8:1    0    1G  0 part /boot
|-/dev/sda2   8:2    0    1G  0 part [SWAP]
`-/dev/sda3   8:3    0   18G  0 part /
/dev/sdb      8:16   0    2G  0 disk ★
/dev/sr0     11:0    1  4.1G  0 rom

2.2 /etc/hostsファイルの設定(drbd1,drbd2で実施)

[root@drbd1 ~]# cat /etc/hosts
192.168.0.50 drbd1
192.168.0.60 drbd2

2.3 ELRepoのrepoファイルのインストール(drbd1,drbd2で実施)

drbdパッケージはELRepoにあるので、ELRepoのrepoファイルを事前にインストールします。
ELRepoのインストールはここを参照しました。

[root@drbd1 ~]# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
[root@drbd1 ~]# rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm を取得中
準備しています...              ################################# [100%]
更新中 / インストール中...
   1:elrepo-release-7.0-3.el7.elrepo  ################################# [100%]

[root@drbd1 ~]# yum clean all
[root@drbd1 ~]# yum --disablerepo=* --enablerepo=elrepo repolist
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
 * elrepo: ftp.ne.jp
リポジトリー ID                リポジトリー名                                                                 状態
elrepo                         ELRepo.org Community Enterprise Linux Repository - el7                        222
repolist: 222

2.4 パッケージのインストール(drbd1,drbd2で実施)

パッケージ(drbd84-utils,kmod-drbd84)をインストールする。
私の環境では、最新のkmod-drbd84(8.4.10)をインストールしようとすると、依存関係のエラーがでたため、
1つ古い版数のkmod-drbd84(8.4.9)をインストールしました。

[root@drbd1 ~]# yum --disablerepo=* --enablerepo=elrepo install drbd84-utils-8.9.8-1.el7.elrepo
[root@drbd1 ~]# rpm -qa drbd84-utils
drbd84-utils-8.9.8-1.el7.elrepo.x86_64

[root@drbd1 ~]# yum --disablerepo=* --enablerepo=elrepo install kmod-drbd84-8.4.9-1.el7.elrepo
[root@drbd1 ~]# rpm -qa kmod-drbd84
kmod-drbd84-8.4.9-1.el7.elrepo.x86_64

なお、ELRepoリポジトリに含まれているパッケージ一覧の表示方法は以下のとおりです。
[root@drbd1 ~]# yum --disablerepo=* --enablerepo=elrepo --showduplicates list kmod-drbd84
[root@drbd1 ~]# yum --disablerepo=* --enablerepo=elrepo --showduplicates list drbd84-utils

2.5 リソースの作成(drbd1,drbd2で実施)

リソースの設定ファイルを作成する。
r0はリソース名を表します。任意の名前を付けることができます。
[root@drbd1 ~]# vi /etc/drbd.d/test.res
[root@drbd1 ~]# cat /etc/drbd.d/test.res
resource r0 {
  device    /dev/drbd0;
  disk      /dev/sdb;
  meta-disk internal;
  on drbd1 {
    address   192.168.0.50:7788;
  }
  on drbd2 {
    address   192.168.0.60:7788;
  }
}

2.6 7788番ポートへのアクセス許可(drbd1,drbd2で実施)

マニュアル(5.2. Preparing your network configuration)によると、DRBDは7788番ポート以上を使用するようです。

In terms of local firewall considerations, it is important to understand that DRBD (by convention) uses TCP ports
from 7788 upwards, with every resource listening on a separate port. DRBD uses two TCP connections for every
resource configured. For proper DRBD functionality, it is required that these connections are allowed by your
firewall configuration.

7788番ポートへのアクセスを許可する。
[root@drbd1 ~]# firewall-cmd --add-port=7788/tcp
success

パーマネントルールに追加する。
[root@drbd1 ~]# firewall-cmd --runtime-to-permanent
success

3 リソースの有効化

3.1 メタデータの作成(drbd1,drbd2で実施)

[root@drbd1 ~]# drbdadm create-md r0
initializing activity log
NOT initializing bitmap
Writing meta data...
New drbd meta data block successfully created.
success

[root@drbd2 ~]# drbdadm create-md r0
-以下、略-

3.2 リソースの有効化(drbd1,drbd2で実施)

[root@drbd1 ~]# drbdadm up r0
[root@drbd2 ~]# drbdadm up r0

3.3 状態の確認

マニュアルによると、この時点では、ディスクの状態がInconsistent/Inconsistent(★)になっているようです。
[root@drbd1 ~]# cat /proc/drbd
version: 8.4.9-1 (api:1/proto:86-101)
GIT-hash: 9976da086367a2476503ef7f6b13d4567327a280 build by akemi@Build64R7, 2016-12-04 01:08:48
 0: cs:Connected ro:Secondary/Secondary ds:★Inconsistent/Inconsistent C r-----
    ns:0 nr:0 dw:0 dr:0 al:8 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:10485404

4 デバイスの初期同期

4.1 同期元の選択

今回は、drbd1を同期元に選択します。
つまり、drbd1からdrbd2にデータのレプリケーション(複製)が行われることを意味します。

4.2 初期フル同期の開始(drbd1で実施)

ここでは、同期元に選択した仮想マシンで実行します。

[root@drbd1 ~]# drbdadm primary --force r0

4.3 同期中の状態確認

/proc/drbdを参照すると、同期中の状態が確認できます。

drbd1の状態を確認する。drbd1は"SyncSource"になっていることがわかる。
[root@drbd1 ~]# cat /proc/drbd
version: 8.4.9-1 (api:1/proto:86-101)
GIT-hash: 9976da086367a2476503ef7f6b13d4567327a280 build by akemi@Build64R7, 2016-12-04 01:08:48
 0: cs:★SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r-----
    ns:240496 nr:0 dw:0 dr:241408 al:8 bm:0 lo:0 pe:4 ua:0 ap:0 ep:1 wo:f oos:1857436
        [=>..................] sync'ed: 11.6% (1857436/2097052)K
        finish: 0:04:38 speed: 6,660 (5,572) K/sec


drbd2の状態を確認する。drbd2は"SyncTarget"になっていることがわかる。
[root@drbd2 ~]# cat /proc/drbd
version: 8.4.9-1 (api:1/proto:86-101)
GIT-hash: 9976da086367a2476503ef7f6b13d4567327a280 build by akemi@Build64R7, 2016-12-04 01:08:48
 0: cs:★SyncTarget ro:Secondary/Primary ds:Inconsistent/UpToDate C r-----
    ns:0 nr:225220 dw:225220 dr:0 al:8 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:1871832
        [=>..................] sync'ed: 11.0% (1871832/2097052)K
        finish: 0:04:33 speed: 6,824 (5,492) want: 9,120 K/sec

4.4 同期完了後の状態確認

[root@drbd1 ~]# cat /proc/drbd
version: 8.4.9-1 (api:1/proto:86-101)
GIT-hash: 9976da086367a2476503ef7f6b13d4567327a280 build by akemi@Build64R7, 2016-12-04 01:08:48
 0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
    ns:2097052 nr:0 dw:0 dr:2097964 al:8 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

[root@drbd2 ~]# cat /proc/drbd
version: 8.4.9-1 (api:1/proto:86-101)
GIT-hash: 9976da086367a2476503ef7f6b13d4567327a280 build by akemi@Build64R7, 2016-12-04 01:08:48
 0: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r-----
    ns:0 nr:2097052 dw:2097052 dr:0 al:8 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

5 drbdサービスの起動(drbd1,drbd2で実施)

[root@drbd1 ~]# systemctl start drbd.service
[root@drbd2 ~]# systemctl start drbd.service

6 リソースのアタッチ(drbd1,drbd2で実施)

[root@drbd1 ~]# drbdadm attach r0
[root@drbd2 ~]# drbdadm attach r0

7 ファイルシステムの作成(drbd1で実施)

[root@drbd1 ~]# mkfs.ext4 /dev/drbd0

8 動作確認

8.1 drbd1(primary)でテスト用ファイルの作成

drbd0デバイスをマウントする。
[root@drbd1 ~]# mount /dev/drbd0 /mnt/

マウントしたデバイスに作成したファイルにデータを書き込む。
[root@drbd1 ~]# echo 12345 > /mnt/test.txt
[root@drbd1 ~]# cat /mnt/test.txt
12345

8.2 primaryをdrbd2に変更

drbd1のデバイスをアンマウントする。
[root@drbd1 ~]# umount /mnt/

drbd1をsecondaryに変更
[root@drbd1 ~]# drbdadm secondary r0


drbd2をprimaryに変更
[root@drbd2 ~]# drbdadm primary r0
[root@drbd2 ~]# mount /dev/drbd0 /mnt/

drbd1で書き込んだデータを確認する。正しく読めたことがわかる。
[root@drbd2 ~]# cat /mnt/test.txt
12345

[root@drbd2 ~]# echo 67890 > /mnt/test.txt
[root@drbd2 ~]# cat /mnt/test.txt
67890

8.3 primaryをdrbd1に変更(元に戻す)

[root@drbd2 ~]# umount /mnt/
[root@drbd2 ~]# drbdadm secondary r0

[root@drbd1 ~]# drbdadm primary r0
[root@drbd1 ~]# mount /dev/drbd0 /mnt/

drbd2で書き込んだデータを確認する。正しく読めたことがわかる。
[root@drbd1 ~]# cat /mnt/test.txt
67890

X 参考情報

DRBD:公式サイト
DRBD:wikipedia
DRBD設定ファイル
DRBDの日本語解説
DRBD構築支援サービスとは
DRBD導入検証
DRBDで行こう!

DRBDとPacemakerによるLinux-HA環境
第8章 DRBDとPacemakerクラスタ
★障害時にサブサーバへ自動で切り替える「高可用性WordPressシステム」の作り方 後編 (1/3)

5
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
7