DRBD + Pacemaker + NFS on CentOS Stream 8

今度はPacemakerを使ってみようと思います。

環境としてはESXi6.7で仮想マシンを作りCentOS Stream8をMinimalインストールします。
スペックはCPU2コア、メモリ4GB、ディスク50GB+共有ディスクで行きます。

しばらくはdrbd04で作業して、後で仮想マシンをクローンしてdrbd05を作成します。

+------------------------------+       +------------------------------+ 
| CentOS Stream 8              |       | CentOS Stream 8              | 
| drbd04                       |       | drbd05                       | 
| sda(50GB)                    |       | sda(50GB)                    | 
| sdb                          |       | sdb                          |
| 192.168.1.234(BootIP ens192) |       | 192.168.1.235(BootIP ens192) | 
| 192.168.3.233(VIP    ens224) |       | 192.168.1.233(VIP    ens224) | 
| 192.168.3.234(BootIP ens224) |       | 192.168.3.235(BootIP ens224) | 
+-ens192----------------ens224-+       +-ens224----------------ens192-+ 
   |                       |              |                     |
   |                       +--------------+ 40GbE               |
   |                                                            |
   +------------------------------------------------------------+ 1GbE

まずはpacemakerを入れます。これでVIPを移動させます。インストールしたらhaclusterユーザのパスワードとfirewallを設定します。

# dnf --enablerepo=ha -y install pacemaker pcs
# passwd hacluster
# firewall-cmd --add-service=high-availability --permanent
# firewall-cmd --reload

後はSELinuxを無効にしておきます。

# vi /etc/selinux/config
SELINUX=enforcing
↓
SELINUX=disabled

次にDRBDのコンパイルに必要なツールを入れます。

# dnf -y install gcc gcc-c++ kernel-devel kernel-rpm-macros make perl-interpreter rpm-build kernel-abi-whitelists wget elfutils-libelf-devel flex automake

カーネルモジュールをダウンロードしてコンパイルします。

# wget https://pkg.linbit.com//downloads/drbd/9/drbd-9.1.6.tar.gz
# gzip -cd drbd-9.1.6.tar.gz | tar xvf -
# mkdir rpmbuild
# mkdir rpmbuild/BUILD rpmbuild/RPMS rpmbuild/SOURCES rpmbuild/SPECS rpmbuild/SRPMS
# cd drbd-9.1.6
# make kmp-rpm

次にユーティリティをダウンロードしてコンパイルします。

# wget https://pkg.linbit.com//downloads/drbd/utils/drbd-utils-9.20.2.tar.gz
# cp drbd-utils-9.20.2.tar.gz ~/rpmbuild/SOURCES/
# cd ~/rpmbuild/SOURCES/
# gzip -cd drbd-utils-9.20.2.tar.gz | tar xvf -
# cd drbd-utils-9.20.2
# ./autogen.sh
# ./configure --enable-spec
# rpmbuild -bb drbd.spec --without sbinsymlinks --without heartbeat --with prebuiltman

コンパイルしたrpmをインストールします。

# cd ~/rpmbuild/RPMS/x86_64 
# dnf -y localinstall kmod-drbd-9.1.6_4.18.0_365-1.x86_64.rpm drbd-utils-9.20.2-1.el8.x86_64.rpm drbd-bash-completion-9.20.2-1.el8.x86_64.rpm drbd-xen-9.20.2-1.el8.x86_64.rpm drbd-udev-9.20.2-1.el8.x86_64.rpm drbd-pacemaker-9.20.2-1.el8.x86_64.rpm drbd-man-ja-9.20.2-1.el8.x86_64.rpm drbd-9.20.2-1.el8.x86_64.rpm

DRDB用のポートも開放します。

# firewall-cmd --add-port=6996-7800/tcp --permanent
# firewall-cmd --reload

設定ファイルを作ります。

# cd /etc/drbd.d/
# vi r03.res
↓ ファイルを作って追記します
resource r03 {
    net{
        protocol    C;
        max-buffers 128K;
    }
    on drbd04 {
        device    /dev/drbd3;
        disk      /dev/sdb1;
        address   192.168.8.234:7788;
        meta-disk internal;
    }
 
    on drbd05 {
        device    /dev/drbd3;
        disk      /dev/sdb1;
        address   192.168.8.235:7788;
        meta-disk internal;
    }
}

設定ファイルができたので、メタデータを作成します。

# drbdadm create-md r03

ここまでできたら仮想マシンをクローンします。
クローン後はホスト名、IPアドレスを忘れずに変更します。
また、ESXiの設定で該当マシンのセキュアブートを無効にしておきます。

両ノードでDRBDを起動します。

[root@drbd04 ~]# drbdadm up r03
[root@drbd04 ~]# systemctl enable drbd
[root@drbd05 ~]# drbdadm up r03
[root@drbd05 ~]# systemctl enable drbd

ステータスを確認するとInconsistentになっているので同期が必要です。

[root@drbd04 ~]# drbdadm status r03
r0 role:Secondary
  disk:Inconsistent
  drbd02 role:Secondary
    peer-disk:Inconsistent

片ノードをプライマリに変更し、セカンダリに戻します。するとUpToDateに変わります。これで同期完了です。

[root@drbd04 ~]# drbdadm --force primary r03
[root@drbd04 ~]# drbdadm secondary r03
[root@drbd04 ~]# drbdadm status r03
r03 role:Secondary
  disk:UpToDate
  drbd05 role:Secondary
    replication:SyncSource peer-disk:Inconsistent done:0.24

[root@drbd01 ~]# drbdadm status r03
r03 role:Secondary
  disk:UpToDate
  drbd02 role:Secondary
    peer-disk:UpToDate

ディスクが用意できたので、ファイルシステムを作ります。1ノード側でxfsでサクッと作ります。

[root@drbd04 ~]# mkfs.xfs /dev/drbd3

ファイルシステムができたので、マウントポイントを作ります。

[root@drbd04 ~]# mkdir /drbd3
[root@drbd04 ~]# chmod 777 /drbd3
[root@drbd05 ~]# mkdir /drbd3
[root@drbd05 ~]# chmod 777 /drbd3

次に両ノードでNFSをインストールして設定します。

# dnf -y install nfs-utils
# vi /etc/exports
↓ファイルを作って追記します
/drbd3 192.168.0.0/16(rw)
# firewall-cmd --add-service={nfs3,mountd,rpc-bind} --permanent
# firewall-cmd --reload

DRBDとNFSは準備できたので次は自動起動と認証をしていきます。両ノードがAuthorizedになればOK。

[root@drbd04 ~]# systemctl start pcsd.service
[root@drbd04 ~]# systemctl enable pcsd.service
[root@drbd05 ~]# systemctl start pcsd.service
[root@drbd05 ~]# systemctl enable pcsd.service
[root@drbd04 ~]# pcs host auth drbd04.local drbd05.local -u hacluster -p '<haclusterのパスワード>'
drbd04.local: Authorized
drbd05.local: Authorized

クラスタの初期設定をしていきます。Starting cluster on hosts:が指定したノードで表示されればOK。

[root@drbd04 ~]# pcs cluster setup cluster233 --start drbd04.local addr=192.168.1.234 addr=192.168.8.234 drbd05.local addr=192.168.1.235 addr=192.168.8.235
Destroying cluster on hosts: 'drbd04.local', 'drbd05.local'...
drbd05.local: Successfully destroyed cluster
drbd04.local: Successfully destroyed cluster
Requesting remove 'pcsd settings' from 'drbd04.local', 'drbd05.local'
drbd04.local: successful removal of the file 'pcsd settings'
drbd05.local: successful removal of the file 'pcsd settings'
Sending 'corosync authkey', 'pacemaker authkey' to 'drbd04.local', 'drbd05.local'
drbd04.local: successful distribution of the file 'corosync authkey'
drbd04.local: successful distribution of the file 'pacemaker authkey'
drbd05.local: successful distribution of the file 'corosync authkey'
drbd05.local: successful distribution of the file 'pacemaker authkey'
Sending 'corosync.conf' to 'drbd04.local', 'drbd05.local'
drbd04.local: successful distribution of the file 'corosync.conf'
drbd05.local: successful distribution of the file 'corosync.conf'
Cluster has been successfully set up.
Starting cluster on hosts: 'drbd04.local', 'drbd05.local'...

クォーラムとSTONITHを無効にします。

[root@drbd04 ~]# pcs property set no-quorum-policy=ignore
[root@drbd04 ~]# pcs property set stonith-enabled=false
[root@drbd04 ~]# pcs property
Cluster Properties:
 cluster-infrastructure: corosync
 cluster-name: cluster233
 dc-version: 2.1.2-4.el8-ada5c3b36e2
 have-watchdog: false
 no-quorum-policy: ignore
 stonith-enabled: false

次にVIP、DRBDのマウントとNFSのリソースと、リソースグループを作っていきます。

[root@drbd04 /]# pcs resource create rs-vip-1  ocf:heartbeat:IPaddr2 ip=192.168.1.233 cidr_netmask=24 nic=ens192
[root@drbd04 /]# pcs resource create rs-vip-8  ocf:heartbeat:IPaddr2 ip=192.168.8.233 cidr_netmask=24 nic=ens224
[root@drbd04 /]# pcs resource create rs-drbd3  ocf:heartbeat:Filesystem device=/dev/drbd3 directory=/drbd3 fstype=xfs
[root@drbd04 /]# pcs resource create rs-nfs systemd:nfs-server
[root@drbd04 /]# pcs resource group add rg-233 rs-vip-1 rs-vip-8 rs-drbd3 rs-nfs 

ステータスを確認すると、drbd04で指定したリソースが起動してるのが確認できます。

[root@drbd04 /]# pcs status
Cluster name: cluster233
Cluster Summary:
  * Stack: corosync
  * Current DC: drbd05.local (version 2.1.2-4.el8-ada5c3b36e2) - partition with quorum
  * Last updated: Sun Feb 27 11:03:08 2022
  * Last change:  Sun Feb 27 11:01:44 2022 by root via cibadmin on drbd04.local
  * 2 nodes configured
  * 4 resource instances configured

Node List:
  * Online: [ drbd04.local drbd05.local ]

Full List of Resources:
  * Resource Group: rg-233:
    * rs-vip-1  (ocf::heartbeat:IPaddr2):        Started drbd04.local
    * rs-vip-8  (ocf::heartbeat:IPaddr2):        Started drbd04.local
    * rs-drbd3  (ocf::heartbeat:Filesystem):     Started drbd04.local
    * rs-nfs    (systemd:nfs-server):    Started drbd04.local

Daemon Status:
  corosync: active/disabled
  pacemaker: active/disabled
  pcsd: active/enabled

作ったNFSのESXiからマウントしてベンチしてみます。

使用してるディスクのベンチは以下なので、思ったより書き込みのボトルネックが出てる印象です。このディスクは2GBぐらいHBAにキャッシュがあるので1GBならR/Wとも爆速のハズなのです。

画像

ベンチサイズを下げても結果は一緒でした。インターコネクトは40GbEの接続をしてて227MB/sなら2GbE程度の帯域しか使ってない感じですね。前回は1GbEギリギリの帯域まで使って書き込みが頭打ちになったので、NWとディスクが十分に早ければパフォーマンス出ると思ったんですけどが、予想が外れました。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)