今度は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とディスクが十分に早ければパフォーマンス出ると思ったんですけどが、予想が外れました。