#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
[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)