インフラエンジニアXの備忘

とある企業のシステム部門のインフラエンジニアです。忘れっぽい自分のメモ書きとしてこのブログを使用します。

DRBD構築手順メモ その2

前回の続き…。

DRBDの起動

■DRBDの起動

# /etc/rc.d/init.d/drbd start ← プライマリ機にてDRBD起動
   Starting DRBD resources:    [ d(r0) s(r0) n(r0) ].
   ..........
   ***************************************************************
    DRBD's startup script waits for the peer node(s) to appear.
    - In case this node was already a degraded cluster before the
      reboot the timeout is 120 seconds. [degr-wfc-timeout]
    - If the peer was available before the reboot the timeout will
      expire after 0 seconds. [wfc-timeout]
      (These values are for resource 'r0'; 0 sec -> wait forever)
    To abort waiting enter 'yes' [  29]:yes ← yes応答

# /etc/rc.d/init.d/drbd start ← スタンバイ機にてDRBD起動
  Starting DRBD resources:    [ d(r0) s(r0) n(r0) ].

ついでにお約束だけどchkconfigで自動起動を設定しておく

# chkconfig drbd on → 自動起動に追加
# chkconfig --list drbd → 自動起動設定を確認
  drbd            0:off   1:off   2:on    3:on    4:on    5:on    6:off
>

■DRBDの状態確認

 # /etc/init.d/drbd status
 
 drbd driver loaded OK; device status:
 version: 8.2.6 (api:88/proto:86-88)
 GIT-hash: 3e69822d3bb4920a8c1bfdf7d647169eba7d2eb4 build by buildsvn@c5-i386-build, 2008-10-03 11:42:32
 m:res  cs         st                 ds                 p  mounted  fstype
 0:r0   Connected  Secondary/Secondary  UpToDate/UpToDate  C 
 
 ← 同期完了して両方ともにスタンバイで起動していることを確認

■アクティブ機でのプライマリ設定とファイルシステム作成、マウント

 # drbdadm primary all プライマリ機で実行
 # /etc/init.d/drbd status プライマリ機で実行
 
 drbd driver loaded OK; device status:
 version: 8.2.6 (api:88/proto:86-88)
 GIT-hash: 3e69822d3bb4920a8c1bfdf7d647169eba7d2eb4 build by buildsvn@c5-i386-build, 2008-10-03 11:42:32
 m:res  cs         st                 ds                 p  mounted  fstype
 0:r0   Connected  Primary/Secondary  UpToDate/UpToDate  C 
 
 →プライマリになったことを確認

 # /etc/init.d/drbd status セカンダリ機で実行
 
 drbd driver loaded OK; device status:
 version: 8.2.6 (api:88/proto:86-88)
 GIT-hash: 3e69822d3bb4920a8c1bfdf7d647169eba7d2eb4 build by buildsvn@c5-i386-build, 2008-10-03 11:42:32
 m:res  cs         st                 ds                 p  mounted  fstype
 0:r0   Connected  Secondary/Primary  UpToDate/UpToDate  C 
 
 →セカンダリ状態とプライマリを検知したことを確認

 # mkfs -t ext4 /dev/drbd0 プライマリ機で実施 
 → /dev/drbd0にext4にてファイルシステム作成(少し時間がかかる。)
 # mkdir /pgdata
 # mount /dev/drbd0 /pgdata
 # df -kh
 Filesystem          サイズ  使用  残り 使用% マウント位置
 /dev/mapper/VolGroup00-LogVol02
                      556G  5.2G  522G   1% /
 /dev/sda1              99M   13M   82M  14% /boot
 tmpfs                  16G     0   16G   0% /dev/shm
 /dev/drbd0            197G  188M  187G   1% /pgdata

 →ファイルシステムを作成して、postgres用のディレクトリを作成し
  DRBD領域にマウント。その後dfで確認。

# /etc/init.d/drbd status プライマリ機で実行

 drbd driver loaded OK; device status:
 version: 8.4.2 (api:1/proto:86-101)
 GIT-hash: 7ad5f850d711223713d6dcadc3dd48860321070c build by dag@Build64R6, 2012-09-06 08:16:10
 m:res  cs         ro                 ds                 p  mounted   fstype
 0:r0   Connected  Primary/Secondary  UpToDate/UpToDate  C  /pgdata   ext4

 →/pgdataにext4でマウントされたことを確認する。

■DRBDの動作確認

テストとしてデータのレプリケーションの確認はもちろんだが
パーミッションについても引継ぎは問題ないのかどうかを確認する。

プライマリ機でテスト準備

 # chown postgres:postgres /pgdata
  → /pgdataをpostgresユーザー(既に作成済)に変更して引き継ぐのか確認
 # echo test > /pgdata/test.txt → テストファイルを作成
 # echo "test hoge" > /pgdata/test2.txt → テストファイルを作成
 # chown hoge:hoge /pgdata/test2.txt → テストファイルの所有者を変更
 # umount /pgdata → ディレクトリをアンマウント
 # ls /pgdata → ファイルがないことを確認
 # drbdadm secondary r0 → プライマリ機をセカンダリ機に変更
 # /etc/init.d/drbd status
 
 drbd driver loaded OK; device status:
 version: 8.4.2 (api:1/proto:86-101)
 GIT-hash: 7ad5f850d711223713d6dcadc3dd48860321070c build by dag@Build64R6, 2012-09-06 08:16:10
 m:res  cs         ro                   ds                 p  mounted  fstype
 0:r0   Connected  Secondary/Secondary  UpToDate/UpToDate  C

  → 両方ともにスタンバイになっていることを確認
  → mountedが解除されていることを確認

 # df -kh
 Filesystem          サイズ  使用  残り 使用% マウント位置
 /dev/mapper/VolGroup00-LogVol02
                       556G  5.2G  522G   1% /
 /dev/sda1              99M   13M   82M  14% /boot
 tmpfs                  16G     0   16G   0% /dev/shm
 
   → /pgdataのマウントが解除されたことを確認

セカンダリ機にてテスト確認

 # drbdadm primary r0 → プライマリ機に昇格するように設定変更
 # /etc/init.d/drbd status
 
 drbd driver loaded OK; device status:
 version: 8.4.2 (api:1/proto:86-101)
 GIT-hash: 7ad5f850d711223713d6dcadc3dd48860321070c build by dag@Build64R6, 2012-09-06 08:16:10
 m:res  cs         ro                 ds                 p  mounted  fstype
 0:r0   Connected  Primary/Secondary  UpToDate/UpToDate  C

 → プライマリに変化したことを確認

 # mkdir /pgdata
 # ls -la → 作成された/pgdataが/配下でrootの所有になっていることを確認
 # mount /dev/drbd0 /pgdata →/pgdata をマウント
 # df -kh
 Filesystem            Size  Used Avail Use% Mounted on
 /dev/mapper/VolGroup00-LogVol02
                       290G  1.8G  273G   1% /
 tmpfs                  32G     0   32G   0% /dev/shm
 /dev/sda1             485M   54M  406M  12% /boot
 /dev/drbd0            197G  188M  187G   1% /pgdata

 → /pgdataがマウントされたことを確認

 # ls -la /
 
 → マウントした/pgdataがアクティブ側で設定したpostgresの
   所有になっていることを確認
 
 # cd /pgdata
 # ls -la
 total 32
 drwxr-xr-x   3 postgres  postgres   4096 Jul  3 16:18 .
 dr-xr-xr-x. 23 root      root       4096 Jul  3 16:26 ..
 drwx------   2 root      root      16384 Jul  3 15:50 lost+found
 -rw-r--r--   1 postgres  postgres      5 Jul  3 16:17 test.txt
 -rw-r--r--   1 hoge      hoge         11 Jul  3 16:18 test2.txt

 → アクティブ側で作成したファイルが存在して
   所有者も同様になっていることを確認
   ※ユーザー環境はdevel1とdevel2で同一となっています。

 # cat test.txt
 test
 # cat test2.txt
 test hoge

 → アクティブ側で作成したファイルの中身となっていることを確認

セカンダリ機にてテスト準備

 # echo "test devel2 create" > /pgdata/test3.txt テストファイル作成
 # chown hogehoge:hogehoge /pgdata/test3.txt
 # umount /pgdata → ディレクトリをアンマウント
 # ls /pgdata → ファイルがなにもないことを確認
 # drbdadm secondary r0
 → 一旦プライマリにしたセカンダリ機を再度セカンダリ機に変更
 # /etc/init.d/drbd status
 
 drbd driver loaded OK; device status:
 version: 8.4.2 (api:1/proto:86-101)
 GIT-hash: 7ad5f850d711223713d6dcadc3dd48860321070c build by dag@Build64R6, 2012-09-06 08:16:10
 m:res  cs         ro                   ds                 p  mounted  fstype
 0:r0   Connected  Secondary/Secondary  UpToDate/UpToDate  C

 → 両方ともにスタンバイになっていることを確認する。
 → mountedが解除されていることを確認する。

 # df -kh
 Filesystem          サイズ  使用  残り 使用% マウント位置
 /dev/mapper/VolGroup00-LogVol02
                       556G  5.2G  522G   1% /
 /dev/sda1              99M   13M   82M  14% /boot
 tmpfs                  16G     0   16G   0% /dev/shm
 
 → /pgdataのマウントが解除されたことを確認

 # drbdadm primary r0
 → 一旦セカンダリにしたプライマリ機を再度プライマリ機に変更
 # /etc/init.d/drbd status
 
 drbd driver loaded OK; device status:
 version: 8.4.2 (api:1/proto:86-101)
 GIT-hash: 7ad5f850d711223713d6dcadc3dd48860321070c build by dag@Build64R6, 2012-09-06 08:16:10
 m:res  cs         ro                 ds                 p  mounted  fstype
 0:r0   Connected  Primary/Secondary  UpToDate/UpToDate  C

 → プライマリに変化したことを確認

 # ls -la → /pgdataがrootの所有になっていることを確認
 # mount /dev/drbd0 /pgdata →/pgdata をマウント
 # df -kh
 Filesystem            Size  Used Avail Use% Mounted on
 /dev/mapper/VolGroup00-LogVol02
                       290G  1.8G  273G   1% /
 tmpfs                  32G     0   32G   0% /dev/shm
 /dev/sda1             485M   54M  406M  12% /boot
 /dev/drbd0            197G  188M  187G   1% /pgdata

 → /pgdataがマウントされたことを確認

 # ls -la / → マウントした/pgdataがpostgresの所有になっていることを確認
 # cd /pgdata
 # ls -la
 total 32
 drwxr-xr-x   3 postgres  postgres   4096 Jul  3 16:18 .
 dr-xr-xr-x. 23 root      root       4096 Jul  3 16:26 ..
 drwx------   2 root      root      16384 Jul  3 15:50 lost+found
 -rw-r--r--   1 postgres  postgres      5 Jul  3 16:17 test.txt
 -rw-r--r--   1 hoge      hoge         11 Jul  3 16:18 test2.txt
 -rw-r--r--   1 hogehoge  hogehoge     11 Jul  3 16:54 test3.txt

 → セカンダリ側で作成したファイルが存在して
   所有者も同様になっていることを確認

 # cat test3.txt
 test devel2 create

 → セカンダリ側で作成したファイルの中身となっていることを確認
本日は一旦ここまで。お疲れ様でした。