Help us understand the problem. What is going on with this article?

CentOS7.4でDRBD8.4を構築してみた

More than 1 year has passed since last update.

CentOS7.4でDRBD8.4を構築したときのメモです。

構成

項目 VM1 VM2
OS CentOS7.4 CentOS7.4
ソフトウェア DRBD8.4 DRBD8.4
IPアドレス 192.168.33.10 192.168.33.20
同期するディスク /dev/sdb (5GB) /dev/sdb (5GB)

事前作業

以下、手順を実施して、2台構成の準備と同期用のディスクを準備しています。

firewallは本手順実施時は止めています。もしfirewalldが動作している場合はTCPポート7788を許容するように設定する。

手順

/etc/hostsファイルの設定(VM1,VM2で実施)

terminal
[root@VM1 ~]# echo "192.168.33.10 VM1" >> /etc/hosts
[root@VM1 ~]# echo "192.168.33.20 VM2" >> /etc/hosts

ELRepoのrepoファイルのインストール(VM1,VM2で実施)

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

terminal
[root@VM1 ~]# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
[root@VM1 ~]# 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%]

パッケージのインストール(VM1,VM2で実施)

パッケージ(drbd84-utils,kmod-drbd84)をインストールする。

terminal
[root@VM1 ~]# yum install -y drbd84-utils
~省略~
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ drbd84-utils.x86_64 0:9.6.0-1.el7.elrepo を インストール
--> 依存性解決を終了しました。

依存性を解決しました

==============================================
 Package
       アーキテクチャー
              バージョン         リポジトリー
                                         容量
==============================================
インストール中:
 drbd84-utils
       x86_64 9.6.0-1.el7.elrepo elrepo 591 k

トランザクションの要約
==============================================
インストール  1 パッケージ

総ダウンロード容量: 591 k
インストール容量: 1.4 M
Downloading packages:
drbd84-utils-9.6.0-1.el7 | 591 kB   00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
警告: RPMDB は yum 以外で変更されました。
  インストール中          : drbd84-util   1/1 
  検証中                  : drbd84-util   1/1 

インストール:
  drbd84-utils.x86_64 0:9.6.0-1.el7.elrepo    

完了しました!

[root@VM1 ~]# yum install -y kmod-drbd84
~省略~
インストール:
  kernel.x86_64 0:3.10.0-957.1.3.el7          
  kmod-drbd84.x86_64 0:8.4.11-1.1.el7_6.elrepo

更新:
  selinux-policy-targeted.noarch 0:3.13.1-229.el7_6.6

依存性を更新しました:
  libselinux.x86_64 0:2.5-14.1.el7            
  libselinux-python.x86_64 0:2.5-14.1.el7     
  libselinux-utils.x86_64 0:2.5-14.1.el7      
  libsemanage.x86_64 0:2.5-14.el7             
  libsemanage-python.x86_64 0:2.5-14.el7      
  libsepol.x86_64 0:2.5-10.el7                
  linux-firmware.noarch 0:20180911-69.git85c5d90.el7
  policycoreutils.x86_64 0:2.5-29.el7         
  policycoreutils-python.x86_64 0:2.5-29.el7  
  selinux-policy.noarch 0:3.13.1-229.el7_6.6  
  setools-libs.x86_64 0:3.3.8-4.el7           

完了しました!


リソースの作成(VM1,VM2で実施)

リソースの設定ファイルを新規に作成します(*.resファイル)。r1はリソース名(任意の名前)を表します。

terminal
[root@VM1 ~]# vi /etc/drbd.d/drbd1.res
[root@VM1 ~]# cat /etc/drbd.d/drbd1.res 
resource r1 {
  device    /dev/drbd1;
  disk      /dev/sdb;
  meta-disk internal;
  on VM1 {
    address   192.168.33.10:7788;
  }
  on VM2 {
    address   192.168.33.20:7788;
  }
}

リソースの有効化

メタデータの作成(VM1,VM2で実施)

この手順は初めてDRBDを起動するときにだけ必要な操作です。

terminal
[root@VM1 ~]# drbdadm create-md r1
modinfo: ERROR: Module drbd not found.
modinfo: ERROR: Module drbd not found.
initializing activity log
initializing bitmap (160 KB) to all zero
Writing meta data...
New drbd meta data block successfully created.

ERROR: Module drbd not found.が表示されるが、kernelのupdateの反映がされていないため上記エラーが発生している(と想定された)。一旦、rebootを実施すれば問題なし。

リソースの有効化(VM1,VM2で実施)

terminal
[root@VM1 ~]# drbdadm up r1
  --==  Thank you for participating in the global usage survey  ==--
The server's response is:

you are the 8699th user to install this version

以上で、drbdのインストールまで完了。次で状態確認してみる。

状態の確認(VM1 or VM2で実施(どちらでやっても内容変わらず))

terminal
[root@VM1 ~]# cat /proc/drbd
version: 8.4.11-1 (api:1/proto:86-101)
GIT-hash: 66145a308421e9c124ec391a7848ac20203bb03c build by mockbuild@, 2018-11-03 01:26:55

 1: 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:5242684

表示内容の補足

項目 表示上の値 説明
cs Connected 接続状態(両系接続とれている状態になっている。)
ro Secondary/Secondary ノードのロール(左が自ホストで、右が相手ホストの状態を表す。起動した時点では両方Secondary)
ds Inconsistent/Inconsistent ディスク状態( Inconsistentはデータが一致しない状態。新規リソースを作成した直後に(初期フル同期の前に)両方のノードがこの状態になる。)

データ同期

VM1を同期元、VM2を同期先としてデータレプリケーションします。
が、何もないデータ同期しても意味ないのでスキップします。
*もし、時間がかかってもいいのであればVM1でdrbdadm primary --force r1を実施すればOK。

初期同期をスキップ(VM1で実施)

terminal
[root@VM1 ~]# drbdadm new-current-uuid --clear-bitmap r1/0
[root@VM1 ~]# cat /proc/drbd 
version: 8.4.11-1 (api:1/proto:86-101)
GIT-hash: 66145a308421e9c124ec391a7848ac20203bb03c build by mockbuild@, 2018-11-03 01:26:55

 1: cs:Connected ro:Secondary/Secondary ds:UpToDate/UpToDate 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:0

dsがUpToDate/UpToDateになっているので同期完了。

VM1のPrimary昇格(VM1で実施)

terminal
[root@VM1 ~]# drbdadm primary r1
[root@VM1 ~]# cat /proc/drbd
version: 8.4.11-1 (api:1/proto:86-101)
GIT-hash: 66145a308421e9c124ec391a7848ac20203bb03c build by mockbuild@, 2018-11-03 01:26:55

 1: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
    ns:0 nr:0 dw:0 dr:2096 al:8 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

ro:Secondary/Secondaryからro:Primary/Secondaryに変わる。なお、Secondary側でcat /proc/drbd実行するとro:Secondary/Primaryとなります。

また、この段階でPrimaryになったサーバは/dev/drbd1が作成される。/dev/drbd1はブロックストレージのように使用できるのでフォーマットを実施して使えるようにする。

ファイルシステム作成(VM1で実施)

terminal
[root@VM1 ~]# mkfs.xfs /dev/drbd1
meta-data=/dev/drbd1             isize=512    agcount=4, agsize=327668 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=1310671, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
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

動作確認してみる!

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

drbd1デバイスをマウント

terminal
[root@VM1 ~]# mount /dev/drbd1 /mnt/

マウントしたデバイスに作成したファイルにデータを書き込む。

terminal
[root@VM1 ~]# echo 12345 > /mnt/test.txt
[root@VM1 ~]# cat /mnt/test.txt
12345

primaryをVM2に変更

drbd1デバイスをアンマウント

terminal
[root@VM1 ~]# umount /mnt/

VM1をsecondaryに変更

terminal
[root@VM1 ~]# drbdadm secondary r1
[root@VM1 ~]# cat /proc/drbd
version: 8.4.11-1 (api:1/proto:86-101)
GIT-hash: 66145a308421e9c124ec391a7848ac20203bb03c build by mockbuild@, 2018-11-03 01:26:55

 1: cs:Connected ro:Secondary/Secondary ds:UpToDate/UpToDate C r-----
    ns:12692 nr:0 dw:12692 dr:5283 al:15 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

VM2をprimaryに変更

terminal
[root@VM2 ~]# drbdadm primary r1

drbd1デバイスをマウント

terminal
[root@VM2 ~]# mount /dev/drbd1 /mnt/

VM1で書き込んだデータがVM2でも読み込めることを確認する。

terminal
[root@VM2 ~]# cat /mnt/test.txt
12345

参考サイト

y_marito
インフラ系SEです。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away