ELRepoリポジトリーのインストール
# rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
DRBDのインストール
# yum -y install kmod-drbd84
drbdに割り当てるディスクはLVMで作成しそれぞれ /dev/vdd になっている
DRBDリソース(r0.res)設定ファイルの作成
# gedit /etc/drbd.d/r0.res
resource r0 { ← DRBDリソース名をr0とする device /dev/drbd0; meta-disk internal; on smb0 { ← node1ホスト名(「uname -n」コマンドで表示される名前) disk /dev/vdd; ← node1論理ボリューム名 address 192.168.11.60:7780; ← node1IPアドレス } on smb2 { ← node2ホスト名:本来はsmb1(「uname -n」コマンドで表示される名前) disk /dev/vdd; ← node2論理ボリューム名 address 192.168.11.61:7780; ← node2IPアドレス } }
メタデーターの作成
# drbdadm create-md r0 (注:データーのあるディスクに行ってもデータは消えない)
md_offset 499826814976
al_offset 499826782208
bm_offset 499811528704
Found some data
==> This might destroy existing data! <==
Do you want to proceed?
[need to type ‘yes’ to confirm] yes
initializing activity log
initializing bitmap (14896 KB) to all zero
Writing meta data…
New drbd meta data block successfully created.
これは前に何か使用していたディスクなので、Do you want to proceed? と聞いているが、マッサラなディスクだと聞いてこない。
ここまでを smb1でもやる
drbdの起動
# systemctl start drbd
smb1も起動しないとプロンプトに戻ってこない。
また、ここまでをsmb1でもやる
DRBD確認
DRBDディスク初期同期スキップ(空ディスクの場合のみ)※ディスクにデータが格納されている場合はスキップしてはいけないが、メタデーターがインターなるだと、データーが壊されている事も考えられる
# drbdadm new-current-uuid –clear-bitmap r0/0
# cat /proc/drbd
version: 8.4.11-1 (api:1/proto:86-101)
GIT-hash: 66145a308421e9c124ec391a7848ac20203bb03c build by mockbuild@, 2020-04-05 02:58:18
0: 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
cs が connected で、ro が両方共 Secondary(待機状態)になっている事。
smb1側でも行って同じになっている事。smb0側で
# drbdadm primary all
# cat /proc/drbd
前略
0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
後略
roがPrimary/Secondaryになっている事。smb1側でも行ってroが Secondary/Primaryになっている事。smb0 で DRBDデバイス(/dev/drbd0)にファイルシステム作成
# mkfs.xfs /dev/drbd0
meta-data=/dev/drbd0 isize=512 agcount=4, agsize=30506075 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=122024299, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=59582, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
# mount /dev/drbd0 /SmbData/
# df
devtmpfs 2006988 0 2006988 0% /dev
tmpfs 2022644 93032 1929612 5% /dev/shm
tmpfs 2022644 9764 2012880 1% /run
tmpfs 2022644 0 2022644 0% /sys/fs/cgroup
/dev/vda1 19520512 6486968 13033544 34% /
/dev/vdc 15718400 5144496 10573904 33% /Download
tmpfs 404532 4 404528 1% /run/user/42
tmpfs 404532 36 404496 1% /run/user/0
/dev/drbd0 487858868 32992 487825876 1% /SmbData
SmbDataにファイルを作って出来ているか確認
# touch /SmbData/test.txt
# ll /SmbData/
合計 0
-rw-r–r– 1 root root 0 10月 18 04:36 test.txt
次に、smb0をsecondayにし、smb1をprimaryにするが、マウントを外さないとならない
# umount /SmbData
dfでマウントされていない事を確認後
# drbdadm secondary all
smb1で
# drbdadm primary all
# cat /proc/drbd
で、ro:Secondary/Primary になっている事を確認後、マウントしdfでマウントされている事を確認後、llでファイルがsmb1にもあるか確認
# mount /dev/drbd0 /mnt
# df
<pre class="wp-block-code"><code><span style="color: #ff6600;">devtmpfs 2006988 0 2006988 0% /dev
tmpfs 2022644 93032 1929612 5% /dev/shm
tmpfs 2022644 9764 2012880 1% /run
tmpfs 2022644 0 2022644 0% /sys/fs/cgroup
/dev/vda1 19520512 6486968 13033544 34% /
/dev/vdc 15718400 5144496 10573904 33% /Download
tmpfs 404532 4 404528 1% /run/user/42
tmpfs 404532 36 404496 1% /run/user/0
/dev/drbd0 487858868 32992 487825876 1% /SmbData</span></code></pre>
# ll /SmbData
合計 0
-rw-r–r– 1 root root 0 10月 18 04:36 test.txt
そしてumount後、smb1をsecondaryにする
# umount /SmbData
# drbdadm secondary all
smb0をpromaryにし、
# drbdadm primary all
smb0とsmb1で cat /Proc/drbd を行いsmb0がprimary, smb1がsecondaryになっている事を確認
DRBDクラスタ化
グループ名は前にsmbgroupで定義している
# pcs resource create DRBD0 ocf:linbit:drbd drbd_resource=”r0″ –group smbgroup
DRBD0をmaster/slave※として設定
# pcs resource master MS_DRBD0 DRBD0 master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=true
DRBDのステータスをクリアー
# pcs resource cleanup MS_DRBD0
Cleaned up DRBD0:0 on smb1
Cleaned up DRBD0:0 on smb0
Cleaned up DRBD0:1 on smb1
Cleaned up DRBD0:1 on smb0
Waiting for 1 reply from the CRMd. OK
# pcs resource show
Resource Group: smbgroup
vipcheck_res (ocf::myres:VIPcheck): Started smb0
VirtualIP (ocf::heartbeat:IPaddr2): Started smb0
Master/Slave Set: MS_DRBD0 [DRBD0]
Masters: [ smb0 ]
Slaves: [ smb1 ]
/dev/drbd0をxfs形式で/mntディレクトリへマウントするクラスタリソースをFS_DRBD0という名前で追加
# pcs resource create FS_DRBD0 ocf:heartbeat:Filesystem device=/dev/drbd0 directory=/SmbData fstype=xfs –group smbgroup
# pcs resource show
Resource Group: smbgroup
vipcheck_res (ocf::myres:VIPcheck): Started smb0
VirtualIP (ocf::heartbeat:IPaddr2): Started smb0
FS_DRBD0 (ocf::heartbeat:Filesystem): Started smb0
Master/Slave Set: MS_DRBD0 [DRBD0]
Masters: [ smb0 ]
Slaves: [ smb1 ]
FS_DRBD0があることを確認
DRBDがmaster側のノードでリソースグループ(smbgroup)を起動する
# pcs constraint order promote MS_DRBD0 then start smbgroup
Adding MS_DRBD0 smbgroup (kind: Mandatory) (Options: first-action=promote then-action=start)
DRBDがMaster側のノードでFS_DRBD0リソースを起動する
# pcs constraint colocation add FS_DRBD0 MS_DRBD0 INFINITY with-rsc-role=Master
# pcs constraint order promote MS_DRBD0 then start FS_DRBD0
Adding MS_DRBD0 FS_DRBD0 (kind: Mandatory) (Options: first-action=promote then-action=start)
smb0とsmb1で df をやって、smb0でSmbDataがマウントされていて、smb1側ではマウントされていない事を確認。smb0をhalt
# halt -p
smb1側で
# pcs status
Cluster name: mycluster
Stack: corosync
Current DC: smb1 (version 1.1.21-4.el7-f14e36fd43) - partition with quorum
Last updated: Sun Oct 18 07:11:48 2020
Last change: Sun Oct 18 07:02:15 2020 by root via cibadmin on smb0
2 nodes configured
5 resources configured
Online: [ smb1 ]
OFFLINE: [ smb0 ]
Full list of resources:
Resource Group: smbgroup
vipcheck_res (ocf::myres:VIPcheck): Started smb1
VirtualIP (ocf::heartbeat:IPaddr2): Started smb1
FS_DRBD0 (ocf::heartbeat:Filesystem): Started smb1
Master/Slave Set: MS_DRBD0 [DRBD0]
Masters: [ smb1 ]
Stopped: [ smb0 ]
Daemon Status:
corosync: active/enabled
pacemaker: active/enabled
pcsd: active/enabled
smb0がofflineでsmb1がマスターになっていることを確認
# df
で SmbData がマウントされている事を確認後
smb0起動し、pcs statusで両方共オンラインになっている事、マスターはまだ smb1であることを確認
# pcs cluster standby smb1
# pcs status
で smb0 がマスターになっている事を確認
# pcs cluster unstandby smb1
# pcs status
で両方がオンラインになっている事を確認
# df
で smb0側にSmbDataがマウントされている事を確認