DRBDとPacemakerでNFSを構築する
ラズベリーパイ上で分散ファイルシステムのようなデータの可用性担保や冗長化を行うためにGlusterFSやCephを挙げてきました。
しかし、実際に動作させて様子をみてみると、そもそもサーバスペックやインターフェースがあまり強力ではないラズベリーパイでは、あまり動作状況良好とは言い難いです。
今回はより軽量で動作するDRBDの構築を行い、NFSで共有するところまでを実施していきます。
DRBDとは
DRBDはネットワーク上のストレージの冗長化を目的とした分散ファイルシステムの一つです。 Cephと同様にブロック単位で処理を行うことができ、書き込み速度を期待することができます。
また、厳密には分散ファイルシステムではなく、RAID1と同様、ディスクのミラーリングを行うシステムになります。
DRBD単品では、プライマリのブロックデバイスに直にアクセスする、セカンダリのブロックデバイスにプライマリのブロックデバイスを随時ミラーリングを行うという仕組みのみを提供しています。
DRBDだけではプライマリのノード上のディスクしか操作できません。逆に、プライマリのノードで全てのサービスを稼働させるタイプのサービスであれば、ストレージへのアクセスはハードウェア性能とほぼ一致ということになります。
このため、ノード数が増え大規模になるほど、分散処理能力が向上/高速になるCephとは逆で、小〜中規模および低スペックであればあるほど相対的に性能が高いという特徴を持ちます。
製品 | 処理単位 | 最小構成 | アクセス方法 | ミラーリング方法 |
---|---|---|---|---|
GlusterFS | ファイル | 2ノード | アクセス先のglusterdにファイルを問い合わせしディスク->ファイルにアクセス | 各ノード間で変更を感知し双方向同期を行っている |
Ceph | ブロック | 3ノード | Ceph Monitorにファイルを問い合わせして複数のノードからオブジェクトの位置を取得->ディスクにアクセス | ファイルをブロックで分割し、Monitorノード上で配置場所を管理(同期ではない) |
DRBD | ブロック | 2ノード | Primary指定されたノードのディスクのファイルシステムに直にアクセス | Primaryが変更されると差分をSecondaryに一方向同期 |
Pacemakerと連携させる理由
PacemakerはAct-Sby形のHAクラスタを構築するのにうってつけのOSSです。DRBDは自分自身でプライマリノードになったりセカンダリに降格したりはしないため、Pacemakerにこの部分を担保してもらおうというのが狙いです。
DRBDの導入
環境
一度構築した環境なのでノード設定がめちゃくちゃな感じですが、実施していきます。
- hostname: sandbox
- hostname: rasp2.nyan.local
インストール
リポジトリを追加することでdrbd9を利用することができます。
(追加しなくてもdrbd-utilsは存在しますが、バージョン8系がインストールされてしまいます。)
add-apt-repository ppa:linbit/linbit-drbd9-stack apt-get update apt install -y drbd-utils modprobe drbd
途中でpostfixの設定を聞かれるのでローカルを指定するか、DEBIAN_FRONTEND=noninteractive
で設定自体を回避します。
以下のような設定を作成します。
# You can find an example in /usr/share/doc/drbd.../drbd.conf.example #include "drbd.d/global_common.conf"; #include "drbd.d/*.res"; global { usage-count yes; udev-always-use-vnr; } resource r0 { protocol C; volume 0 { device /dev/drbd0; meta-disk internal; } net { cram-hmac-alg sha1; shared-secret "secret"; } on sandbox { disk /dev/sda; address 192.168.3.254:7788; } on rasp2.nyan.local { disk /dev/sda; address 192.168.3.22:7788; } }
ディスクについてはwipefs
を行い、superblockが存在する場合は削除しておきます。
root@sandbox:~# df ... /dev/sda 1952560720 13646572 1938914148 1% /mnt root@sandbox:/# wipefs -a /dev/sda /dev/sda: 4 bytes were erased at offset 0x00000000 (xfs): 58 46 53 42
削除後、drbdadm create-md <resource name>
を両方のクラスタで実行し、角ディスクを初期化します。
root@sandbox:/# drbdadm create-md r0 md_offset 2000398929920 al_offset 2000398897152 bm_offset 2000337846272 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 (59620 KB) to all zero Writing meta data... New drbd meta data block successfully created.
設定が完了したら、drbdデーモンを両方のクラスタで開始します。
systemctl enable --now drbd.service
初めはプライマリディスクを指定し、ディスクの同期を行う必要があります。 いずれかのノードを指定し、強制的にレプリケーションを実施します。
drbdadm primary --force r0
上記を実施するとディスクの同期が開始します。
drbdadm status
で進捗の確認が可能です。
root@rasp2:~# watch drbdadm status r0 Every 2.0s: drbdadm status r0 r0 role:Primary disk:UpToDate sandbox role:Secondary replication:SyncSource peer-disk:Inconsistent done:0.29
完了すると、全てのディスクでステータスがUpToDateになります。
root@rasp2:~# drbdadm status r0 r0 role:Primary disk:UpToDate sandbox role:Secondary peer-disk:UpToDate
自動プロモーション機能の確認
DRBD9では自動プロモーション機能が利用可能です。
両方のノードを再起動しステータスを確認すると、いずれのノードもセカンダリに降格します。
root@sandbox:~# drbdadm status r0 r0 role:Secondary disk:UpToDate rasp2.nyan.local role:Secondary peer-disk:UpToDate
この状態でもフォーマット可能みたいでした。お好みの形式でフォーマットを実施します。
ちなみにフォーマット後もプライマリ昇格はしません。
root@sandbox:~# mkfs -t xfs /dev/drbd0 meta-data=/dev/drbd0 isize=512 agcount=4, agsize=122090933 blks = sectsz=4096 attr=2, projid32bit=1 = crc=1 finobt=1, sparse=1, rmapbt=0 = reflink=1 data = bsize=4096 blocks=488363732, imaxpct=5 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0, ftype=1 log =internal log bsize=4096 blocks=238458, version=2 = sectsz=4096 sunit=1 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 root@sandbox:~# drbdadm status r0 r0 role:Secondary disk:UpToDate rasp2.nyan.local role:Secondary peer-disk:UpToDate
マウントを実施すると、マウントしたホストがプライマリに昇格します。
root@sandbox:~# mount -t xfs /dev/drbd0 /mnt root@sandbox:/# drbdadm status r0 r0 role:Primary disk:UpToDate rasp2.nyan.local role:Secondary peer-disk:UpToDate
アンマウントすると両方セカンダリの状態に戻ります。
root@sandbox:/# umount /mnt root@sandbox:/# drbdadm status r0 r0 role:Secondary disk:UpToDate rasp2.nyan.local role:Secondary peer-disk:UpToDate
DRBD9の検証
以下の動作を確かめます。
- 正常時のSecondaryマウント操作
- Primaryが存在する場合
- Primaryが存在しない場合
- 異常時のSecondaryマウント操作
- drbd.serviceダウン時のマウント操作
- ダウン後のSecondaryマウント操作
- ダウン中の新プライマリへの書き込み
- ダウンしたノードの復旧/復旧後のステータス
- ネットワークダウン時の状態確認
正常時のSecondaryマウント操作
Primaryが存在する場合
mount(2) system call failed: Wrong medium type.
のメッセージでマウントに失敗しました。
root@rasp2:~# mount -t xfs /dev/drbd0 /mnt mount: /mnt: mount(2) system call failed: Wrong medium type. root@rasp2:~# drbdadm status r0 r0 role:Secondary disk:UpToDate sandbox role:Primary peer-disk:UpToDate
Primaryが存在しない場合
Primaryが存在しない場合は通常通りにマウントすることが可能です。
root@rasp2:~# drbdadm status r0 r0 role:Secondary disk:UpToDate sandbox role:Secondary peer-disk:UpToDate root@rasp2:~# mount -t xfs /dev/drbd0 /mnt root@rasp2:~# drbdadm status r0 r0 role:Primary disk:UpToDate sandbox role:Secondary peer-disk:UpToDate
異常時のSecondaryマウント操作
この後の検証のためにマウントポイントにファイルを設置しておきます。
root@rasp2:/# touch /mnt/mounted root@rasp2:/# ll /mnt total 4 drwxr-xr-x 2 root root 21 5月 7 21:40 ./ drwxr-xr-x 23 root root 4096 5月 7 21:22 ../ -rw-r--r-- 1 root root 0 5月 7 21:40 mounted root@rasp2:/mnt# df | grep /mnt /dev/drbd0 1952501096 13646156 1938854940 1% /mnt
drbd.serviceダウン後のSecondaryマウント操作
プライマリのノードのdrbdを停止します。
root@rasp2:~# drbdadm status r0 r0 role:Primary disk:UpToDate sandbox role:Secondary peer-disk:UpToDate root@rasp2:/# systemctl stop drbd.service root@rasp2:/# systemctl status drbd.service ● drbd.service - DRBD -- please disable. Unless you are NOT using a cluster manager. Loaded: loaded (/lib/systemd/system/drbd.service; enabled; vendor preset: enabled) Active: inactive (dead) since Fri 2021-05-07 21:37:41 JST; 4s ago Process: 821896 ExecStart=/lib/drbd/drbd start (code=exited, status=0/SUCCESS) Process: 823618 ExecStop=/lib/drbd/drbd stop (code=exited, status=0/SUCCESS) Main PID: 821896 (code=exited, status=0/SUCCESS)
リソースが存在しないという状態になります。
root@rasp2:/# drbdadm status r0 # No currently configured DRBD found. r0: No such resource Command 'drbdsetup status r0' terminated with exit code 10
この状態でセカンダリがマウントを実施すると、ノードがPrimaryに昇格し、ファイルが共有されています。
root@sandbox:/# mount -t xfs /dev/drbd0 /mnt root@sandbox:/# drbdadm status r0 r0 role:Primary disk:UpToDate rasp2.nyan.local connection:Connecting root@sandbox:/# ll /mnt total 4 drwxr-xr-x 2 root root 21 5月 7 21:40 ./ drwxr-xr-x 21 root root 4096 5月 5 18:03 ../ -rw-r--r-- 1 root root 0 5月 7 21:40 mounted
drbd.serviceダウン中の新プライマリへの書き込み
ダウン中のノードはマウントが解除されます。
root@rasp2:/# ll /mnt total 8 drwxr-xr-x 2 root root 4096 2月 1 20:02 ./ drwxr-xr-x 23 root root 4096 5月 7 21:22 ../ root@rasp2:/# df | grep /mnt
この状態で先ほど昇格したプライマリにファイルを作成してみます。
root@sandbox:/# drbdadm status r0 r0 role:Secondary disk:UpToDate rasp2.nyan.local connection:Connecting root@sandbox:/# mount -t xfs /dev/drbd0 /mnt root@sandbox:/# touch /mnt/update root@sandbox:/# ll /mnt total 4 drwxr-xr-x 2 root root 35 5月 7 21:51 ./ drwxr-xr-x 21 root root 4096 5月 5 18:03 ../ -rw-r--r-- 1 root root 0 5月 7 21:40 mounted -rw-r--r-- 1 root root 0 5月 7 21:51 update root@sandbox:/# drbdadm status r0 r0 role:Primary disk:UpToDate rasp2.nyan.local connection:Connecting
drbd.serviceダウンしたノードの復旧/復旧後のステータス
Primaryが変更された状態でサービスダウンしたノードを復旧します。
root@rasp2:/# systemctl is-active drbd.service inactive root@rasp2:/# systemctl start drbd.service root@rasp2:/# drbdadm status r0 r0 role:Secondary disk:UpToDate sandbox role:Primary peer-disk:UpToDate root@rasp2:/# systemctl is-active drbd.service active
復旧後はSecondaryのため、マウントポイントは解除されたままになります。
root@rasp2:/# ll /mnt total 8 drwxr-xr-x 2 root root 4096 2月 1 20:02 ./ drwxr-xr-x 23 root root 4096 5月 7 21:22 ../ root@rasp2:/# df | grep /mnt
プライマリを交換してみます。
root@sandbox:/# drbdadm status r0 r0 role:Primary disk:UpToDate rasp2.nyan.local role:Secondary peer-disk:UpToDate root@sandbox:/# umount /mnt root@sandbox:/# drbdadm status r0 r0 role:Secondary disk:UpToDate rasp2.nyan.local role:Secondary peer-disk:UpToDate
ダウン中の変更も反映されていることがわかります。
root@rasp2:/# mount -t xfs /dev/drbd0 /mnt root@rasp2:/# drbdadm status r0 r0 role:Primary disk:UpToDate sandbox role:Secondary peer-disk:UpToDate root@rasp2:/# ll /mnt total 4 drwxr-xr-x 2 root root 35 5月 7 21:51 ./ drwxr-xr-x 23 root root 4096 5月 7 21:22 ../ -rw-r--r-- 1 root root 0 5月 7 21:40 mounted -rw-r--r-- 1 root root 0 5月 7 21:51 update
ネットワークダウン時の状態確認
ネットワークをダウンさせてみます。
root@rasp2:/# drbdadm status r0 r0 role:Primary disk:UpToDate sandbox role:Secondary peer-disk:UpToDate root@rasp2:/# ip a | grep eth 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether dc:a6:32:fd:6a:b3 brd ff:ff:ff:ff:ff:ff inet 192.168.3.22/24 brd 192.168.3.255 scope global eth0 root@rasp2:/# ip l set eth0 down client_loop: send disconnect: Broken pipe
他ノードから確認すると、サービスダウン時と同様の状態になるようです。 プライマリに昇格させることで、引き続きディスクを利用することができます。
root@sandbox:/# drbdadm status r0 r0 role:Secondary disk:UpToDate rasp2.nyan.local connection:Connecting root@sandbox:/# drbdadm status r0 r0 role:Primary disk:UpToDate rasp2.nyan.local connection:Connecting
DRBDのNFS対応
DRBDではAct-Sby構造をとるため、NFSとして共有する場合もACT側を常に参照している必要があります。
Pacemakerの導入
インストール方法
Pacemakerをインストールします。
指定しなくてもcorosyncなども関連パッケージとして自動でインストールされます。
apt install pcs
初めに初期登録されている情報を削除します。
pcs cluster destroy
haclusterユーザが追加されているのでパスワードを設定します。
クラスタとして登録する全てのノードで実施します。
USER_PASSWD=pacemaker printf "$USER_PASSWD\n$USER_PASSWD\n" | passwd hacluster 2> /dev/null
クラスタの作成
クラスタを作成します。
以下は192.168.3.254
と192.168.3.22
の二つのホストをDRBD-HA
クラスタに追加する例です。
printf "$USER_PASSWD\n" | pcs host auth 192.168.3.254 192.168.3.22 -u hacluster pcs cluster setup DRBD-HA 192.168.3.254 192.168.3.22 --start --enable
セットアップが完了すると、両方のノードから以下のようにステータスが確認できるようになります。
root@rasp2:~# pcs cluster status Cluster Status: Cluster Summary: * Stack: corosync * Current DC: 192.168.3.22 (version 2.0.3-4b1f869f0f) - partition with quorum * Last updated: Fri May 7 23:23:32 2021 * Last change: Fri May 7 23:22:36 2021 by hacluster via crmd on 192.168.3.22 * 2 nodes configured * 0 resource instances configured Node List: * Online: [ 192.168.3.22 192.168.3.254 ] PCSD Status: 192.168.3.254: Online 192.168.3.22: Online
root@sandbox:/# pcs cluster status Cluster Status: Cluster Summary: * Stack: corosync * Current DC: 192.168.3.22 (version 2.0.3-4b1f869f0f) - partition with quorum * Last updated: Fri May 7 23:23:43 2021 * Last change: Fri May 7 23:22:36 2021 by hacluster via crmd on 192.168.3.22 * 2 nodes configured * 0 resource instances configured Node List: * Online: [ 192.168.3.22 192.168.3.254 ] PCSD Status: 192.168.3.22: Online 192.168.3.254: Online
Pacemakerにリソースを追加
リソース追加は設定ファイルを作成して行い、この設定ファイルをクラスターに登録するようにします。
Stonithの無効化
今はノードが2台のため、STONITHを無効にしておきます(無限再起動防止)
pcs -f drbdcluster property set stonith-enabled=false
VirtualIPリソースの登録
ノードにVIPを付与するように設定します。本環境ではip=192.168.3.240 cidr_netmask=24 nic=eth0
を指定します。
pcs -f drbdcluster resource create VirtualIP ocf:heartbeat:IPaddr2 \ ip="192.168.3.240" cidr_netmask="24" nic="eth0" \ op monitor interval="10s"
FileSystemリソースの登録
アクティブ側でdrbdをマウントする設定を作成します。device=/dev/drbd0 directory=/mnt fstype=xfs
で設定します。
設定する前にdrbdのroleが全てSecondaryになっていることを確認してください
pcs -f drbdcluster resource create DRBD-mount ocf:heartbeat:Filesystem \ device="/dev/drbd0" directory="/drbd" fstype="xfs" \ op start timeout="60s" on-fail="restart" \ op stop timeout="60s" \ op monitor interval="10s" timeout="60s" on-fail="restart"
NFSサーバリソースの作成
デーモンを設定します。systemdリソースを使う方法とheatbeat:nfsserverを使う方法があります。
pcs -f drbdcluster resource create NFS-daemon systemd:nfs-server \ op start timeout="20s" on-fail="restart" \ op stop timeout="20s" \ op monitor interval="10s" timeout="10s" on-fail="restart" start-delay="20s"
systemdでうまくいかない場合はheartbeatの方を試してみてください。
pcs -f drbdcluster resource create NFS-daemon ocf:heartbeat:nfsserver \ op start timeout="20s" \ op stop timeout="20s" \ op monitor interval="10s" timeout="10s" on-fail="restart" start-delay="20s"
exportsの内容もプライマリノードで自動作成するようにします。
pcs -f drbdcluster resource create NFS-exportfs ocf:heartbeat:exportfs \ clientspec="192.168.3.0/24" options="rw,async,no_root_squash,no_subtree_check" directory="/drbd" fsid="root"
リソースをグループに追加
最後にグループに追加を行うと、VIPとDRBD領域のマウントが連動するようになります。
pcs -f drbdcluster resource group add DRBD-group VirtualIP DRBD-mount NFS-daemon NFS-exportfs
設定の適応
作成された設定をcib-push
で読み込ませます。
root@sandbox:~# pcs cluster cib-push drbdcluster CIB updated root@sandbox:~# pcs status Cluster name: DRBD-HA Cluster Summary: * Stack: corosync * Current DC: 192.168.3.254 (version 2.0.3-4b1f869f0f) - partition with quorum * Last updated: Sat May 8 01:56:28 2021 * Last change: Sat May 8 01:56:15 2021 by hacluster via crmd on 192.168.3.254 * 2 nodes configured * 4 resource instances configured Node List: * Online: [ 192.168.3.22 192.168.3.254 ] Full List of Resources: * Resource Group: DRBD-group: * VirtualIP (ocf::heartbeat:IPaddr2): Started 192.168.3.22 * DRBD-mount (ocf::heartbeat:Filesystem): Started 192.168.3.22 * NFS-daemon (systemd:nfs-server): Started 192.168.3.22 * NFS-exportfs (ocf::heartbeat:exportfs): Started 192.168.3.22 Daemon Status: corosync: active/enabled pacemaker: active/enabled pcsd: active/enabled
DRBD動作確認
設定を全て終了後、NFSがちゃんとマウントできるかを確かめてみます。
root@rasp2:/# mount -t nfs 192.168.3.240:/drbd /mnt root@rasp2:/# cd /mnt root@rasp2:/mnt# ll total 8 drwxr-xr-x 2 root root 32 5月 8 01:06 ./ drwxr-xr-x 24 root root 4096 5月 8 00:57 ../ -rw-r----- 1 root root 30 5月 8 01:06 .rmtab -rw-r--r-- 1 root root 0 5月 8 01:06 test root@sandbox:/# mount -t nfs 192.168.3.240:/drbd /mnt root@sandbox:/# cd mnt/ root@sandbox:/mnt# ll total 8 drwxr-xr-x 2 root root 32 5月 8 01:06 ./ drwxr-xr-x 22 root root 4096 5月 8 00:57 ../ -rw-r----- 1 root root 30 5月 8 01:07 .rmtab -rw-r--r-- 1 root root 0 5月 8 01:06 test
いずれのノードも問題なくNFSマウントが実施でき、動作していることがわかります。
フェイルオーバーのテスト(Stanby)
ノードをスタンバイに設定し、フェイルオーバーも動作していることを確認します。
root@sandbox:~# pcs node standby 192.168.3.22 root@sandbox:~# pcs status Cluster name: DRBD-HA Cluster Summary: * Stack: corosync * Current DC: 192.168.3.254 (version 2.0.3-4b1f869f0f) - partition with quorum * Last updated: Sat May 8 02:01:01 2021 * Last change: Sat May 8 02:00:47 2021 by root via cibadmin on 192.168.3.254 * 2 nodes configured * 4 resource instances configured Node List: * Node 192.168.3.22: standby * Online: [ 192.168.3.254 ] Full List of Resources: * Resource Group: DRBD-group: * VirtualIP (ocf::heartbeat:IPaddr2): Started 192.168.3.254 * DRBD-mount (ocf::heartbeat:Filesystem): Started 192.168.3.254 * NFS-daemon (systemd:nfs-server): Started 192.168.3.254 * NFS-exportfs (ocf::heartbeat:exportfs): Started 192.168.3.254 Daemon Status: corosync: active/enabled pacemaker: active/enabled pcsd: active/enabled root@sandbox:~# pcs node unstandby 192.168.3.22
フェイルオーバーのテスト(Nodedown)
再起動のフェイルオーバーも試してみます。
root@sandbox:~# pcs status Cluster name: DRBD-HA Cluster Summary: * Stack: corosync * Current DC: 192.168.3.254 (version 2.0.3-4b1f869f0f) - partition with quorum * Last updated: Sat May 8 02:01:35 2021 * Last change: Sat May 8 02:01:32 2021 by root via cibadmin on 192.168.3.254 * 2 nodes configured * 4 resource instances configured Node List: * Online: [ 192.168.3.22 192.168.3.254 ] Full List of Resources: * Resource Group: DRBD-group: * VirtualIP (ocf::heartbeat:IPaddr2): Started 192.168.3.254 * DRBD-mount (ocf::heartbeat:Filesystem): Started 192.168.3.254 * NFS-daemon (systemd:nfs-server): Started 192.168.3.254 * NFS-exportfs (ocf::heartbeat:exportfs): Started 192.168.3.254 Daemon Status: corosync: active/enabled pacemaker: active/enabled pcsd: active/enabled root@sandbox:~# reboot root@sandbox:~# Connection to sandbox.local closed by remote host. Connection to sandbox.local closed.
再起動直後
root@rasp2:~# pcs status Cluster name: DRBD-HA Cluster Summary: * Stack: corosync * Current DC: 192.168.3.22 (version 2.0.3-4b1f869f0f) - partition with quorum * Last updated: Sat May 8 02:02:46 2021 * Last change: Sat May 8 02:01:32 2021 by root via cibadmin on 192.168.3.254 * 2 nodes configured * 4 resource instances configured Node List: * Online: [ 192.168.3.22 ] * OFFLINE: [ 192.168.3.254 ] Full List of Resources: * Resource Group: DRBD-group: * VirtualIP (ocf::heartbeat:IPaddr2): Started 192.168.3.22 * DRBD-mount (ocf::heartbeat:Filesystem): Started 192.168.3.22 * NFS-daemon (systemd:nfs-server): Started 192.168.3.22 * NFS-exportfs (ocf::heartbeat:exportfs): Started 192.168.3.22 Daemon Status: corosync: active/enabled pacemaker: active/enabled pcsd: active/enabled
時間経過後(Onlineにノードが復帰します。)
root@rasp2:~# pcs status Cluster name: DRBD-HA Cluster Summary: * Stack: corosync * Current DC: 192.168.3.22 (version 2.0.3-4b1f869f0f) - partition with quorum * Last updated: Sat May 8 02:04:56 2021 * Last change: Sat May 8 02:01:32 2021 by root via cibadmin on 192.168.3.254 * 2 nodes configured * 4 resource instances configured Node List: * Online: [ 192.168.3.22 192.168.3.254 ] Full List of Resources: * Resource Group: DRBD-group: * VirtualIP (ocf::heartbeat:IPaddr2): Started 192.168.3.22 * DRBD-mount (ocf::heartbeat:Filesystem): Started 192.168.3.22 * NFS-daemon (systemd:nfs-server): Started 192.168.3.22 * NFS-exportfs (ocf::heartbeat:exportfs): Started 192.168.3.22 Daemon Status: corosync: active/enabled pacemaker: active/enabled pcsd: active/enabled root@rasp2:~#
終わりに
これでDRBDをNFSとして利用する準備が整いました。Dockerでマウントするなりk8sで永続ボリュームにするなりやり放題です。
ただ、NFSで共有してしまうと正直DRBDのメリットが少し薄れてしまうところがある、NFSの場合は結局インターフェースの通信速度にディスクアクセスが頭打ちになってしまいます。
そのため、実稼働ではプライマリのノードでのみサービスが稼働する仕組みなどを作る必要がありそうです。
RaspberryPiのような非力なデバイスではCephやGlusterFSのような分散ファイルシステムよりも速度や安定性に期待できそうです。
参考
- DRBDのインストール方法
- DRBDの仕組み
- DRBDとCephの比較(LINBIT社)
- スタンドアロン状態(コンフリクト)の解消
- Pacemaker導入の参考
- LINSORを利用する場合