作っておぼえるHAシステム1(2022年版)

2020年12月にCentOS7でのHAシステム構築の記事をこちらで公開しています。
最近はRockyLinux、AlmaLinux等のRHEL互換のOSが利用できるようになり、RHELのバージョンも8が主流になりました。
今回は最新のバージョンであるRHEL8.7を使ってHAシステムを構築する手順を説明します。

環境の準備

DRBDとPacemakerの構築のテストを行うためには、最低2台のLinuxサーバが必要になります。DRBDとPacemakerは実行に必要なリソースが少ないため、テスト目的では1台あたりメモリーは2GB、ストレージの容量は20GBほどあれば、DRBDでデータを冗長化してPacemakerでアクティブ/スタンバイに切り替え可能なHA環境ができます。参考までに筆者の作業用の機器は16GBメモリーと500GBのSSDストレージを持ったデスクトップPCで、そこにVirtualboxをインストールして複数の仮想OSを動かしています。

項目推奨値・コメント
OSRHEL8.7
メモリー2Gバイト以上
ストレージOS用領域16GB
データ(DRBD)用領域8GB

OS用のストレージはRHEL8.7のBaseシステムをインストールするには十分な大きさです。DRBD領域もテストならば1GBでも十分なのですが、Virtualboxの初期設定にしたがって8GBとしています。

仮想環境を2セット用意して、それぞれの仮想環境にRHEL8.7をインストールします。こちらのURLから「Red Hat デベロッパー・プログラム」を登録すれば、開発用途のRHELを無料で使えます。

仮想環境のホスト名はnode1、node2として、ネットワークのIPアドレスは次のようにしました。

項目node1node2推奨値・コメント
enp0s3192.168.3.91192.168.3.92メンテ兼サービス用
enp0s810.9.0.110.9.0.2DRBD同期兼死活監視
enp0s910.9.1.110.9.1.2死活監視

今回の試験環境はホスト名をnode1、node2なので、それぞれの/etc/hostsファイルにIPアドレスとホスト名を記述しておきます。

[root@node1 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.3.91	node1 node1.sios.com
192.168.3.92	node2 node2.sios.com

最後にsshの公開鍵を作成して、相互に鍵交換します。

[root@node1 ~]# ssh-keygen -t rsa -b 4096
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:jlI4yjoKrnqohI7EwHG+dcKiGbRG6E5QT++1FsyJ9bQ root@node1.sios.com
The key's randomart image is:
+---[RSA 4096]----+
| . . . . |
|.. o . = + . |
|o+ .. o * E |
|* = .o . o |
|.B oo+o.S |
|B.+.+oo+ |
|oOo.. . . |
|X.. . |
|%= |
+----[SHA256]-----+

[root@node1 ~]# ssh-copy-id root@node2
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host 'node2 (192.168.3.52)' can't be established.
ECDSA key fingerprint is SHA256:zIej5Ak24WkaYt1jh7m5UTU/jdUeHZMrNe2BqDOvlIM.
ECDSA key fingerprint is MD5:6b:5d:8d:39:40:f5:fb:cd:3b:c0:98:9e:8d:8f:0c:5c.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@node2's password:

Number of key(s) added: 1

Now try logging into the machine, with: "ssh 'root@node2'"
and check to make sure that only the key(s) you wanted were added.

テスト環境なのでFirewallの設定はなくてもテストは可能ですが、Firewallの設定も確認したい場合は次のように設定します。

この評価環境はDRBDの同期と、Pacemakerの死活監視のネットワークはダイレクトに接続されており、他のネットワークに繋がっていません。ネットワークインターフェースに対して、Zoneをtrustedのして、全てのパケットの追加を許可します。

[root@node1 ~]# firewall-cmd --zone=trusted --change-interface=enp0s8 
[root@node1 ~]# firewall-cmd --zone=trusted --change-interface=enp0s9 
[root@node1 ~]# firewall-cmd --zone=trusted --change-interface=enp0s8 --permanent
[root@node1 ~]# firewall-cmd --zone=trusted --change-interface=enp0s9 --permanent

テストで動かすプログラムはMariaDBのサーバーなので、サービス用の用のネットワーク(public)ではMariaDBのポートのアクセスを許可します。

[root@node1 ~]# firewall-cmd --zone=public --add-port=3306/tcp
[root@node1 ~]# firewall-cmd --zone=public --add-port=3306/tcp --permanent

最後にSELinuxは無効にします。

以上で環境構築は終了です。

DRBDのインストール

最初にDRBDをインストールします。LINBITのリポジトリからDRBDとPacemakerをダウンロードするため、評価用のデモライセンスを申請する必要があります。下記のリンクをアクセスすると、サイオステクノロジーのWebページから申請ができます。

デモライセンス申請ページ

リポジトリを登録するためには、LINBITから登録ツールをダウンロードします。ダウンロードしたプログラムにはchmodコマンドで実行権を付けます。

[root@node1 ~]# cd /tmp
[root@node1 ~]# wget --no-check-certificate https://my.linbit.com/linbit-manage-node.py
[root@node1 ~]# chmod u+x linbit-manage-node.py

このツールはLINBITにアクセスするため、インストール対象のサーバがインターネットに繋がっている必要があります。

ツールを実行するとユーザIDとパスワードを入力する画面になります。ユーザーIDはデモライセンスの申請に使ったメールアドレスを、パスワードはメールアドレスに紐づいたパスワードです。パスワードを登録していない場合は、LINBITポータルサイトMy LINBITにアクセスして登録します。

[root@node1 tmp]# ./linbit-manage-node.py 
linbit-manage-node.py (Version: 1.31)
Checking if version is up to date
[OK] Your version is up to date
Username: "ユーザーID"    --- ユーザIDを入力
Credential (will not be echoed): "パスワード"  --- パスワードを入力
Connecting to https://my.linbit.com/
[OK] Login successful

IDとパスワードを入力後に”[OK] Login successful”と表示されればアクセス成功です。
次にクラスタの登録画面になります。初回のログインの場合は”*Be first node of a new cluster*”と表示されるので、1を入力してenterキーを押します。

Will this node form a cluster with...

1) *Be first node of a new cluster*

--> Please enter a number in range and press return: 1  --- 1を入力
Writing registration data:
--> Write to file (/var/lib/drbd-support/registration.json)? [y/N] y
Repository configuration:

画面がこのように切り替わります。

RHEL8系のOSではDRBDは9.0、9.1、9.2が利用可能で、9.0を選ぶときには「drbd-9.0」、9.1または9.2を選ぶときには「drbd-9」を選択します。
Pacemakerは2.0バージョンのみ利用できます。

Here are the repositories you can enable:

1) pacemaker-2(Disabled)
2) drbd-9.0(Disabled)
3) drbd-9(Disabled)

Enter the number of the repository you wish to enable/disable. Hit 0 when you are done.

DBRD 9.0とPacemaker 2.0の後ろに(Enabled)の表示が付いたら0を入力してパッケージ選択画面を終了します。
次にリポジトリ情報が画面に表示されます。[y/N] の表示が2つありますが、ここではyを入力して下さい。

Writing repository config:
Content:
[drbd-9]
name=LINBIT Packages for drbd-9 - $basearch
baseurl=https://packages.linbit.com/<<ハッシュ番号>>/yum/rhel8/drbd-9/$basearch
enabled=0
gpgkey=https://packages.linbit.com/package-signing-pubkey.asc
gpgcheck=1

[pacemaker-2]
name=LINBIT Packages for pacemaker-2 - $basearch
baseurl=https://packages.linbit.com/<<ハッシュ番号>>/yum/rhel8/pacemaker-2/$basearch
enabled=1
gpgkey=https://packages.linbit.com/package-signing-pubkey.asc
gpgcheck=1

[drbd-9.0]
name=LINBIT Packages for drbd-9.0 - $basearch
baseurl=https://packages.linbit.com/<<ハッシュ番号>>/yum/rhel8/drbd-9.0/$basearch
enabled=1
gpgkey=https://packages.linbit.com/package-signing-pubkey.asc
gpgcheck=1


--> Write to file (/etc/yum.repos.d/linbit.repo)? [y/N] y
[OK] Repository configuration written
Downloading LINBIT yum plugin
Downloading LINBIT yum plugin config
--> Add LINBIT signing key to keyring now? [y/N] y
Final Notes:
Please add the following line to your
base, updates, el repo (if enabled)
repositories under /etc/yum.repos.d/
to ensure you are using LINBIT's packages:

exclude=cluster* corosync* drbd kmod-drbd libqb* pacemaker* resource-agents*

Looks like you executed the script on a GENERIC system.

最後に”exclude=cluster*….”と表示されます。これは標準リポジトリに追加する除外設定です。

PacemakerとCorosyncのパッケージが標準リポジトリ含まれている場合は、この設定を追加しないとLINBITのパッケージと競合することがあります。
RHELではPacemakerは標準リポジトリには含まれていないのでこの除外設定は不要です。

以上で、DRBDとPacemakerのリポジトリ情報をの登録ができました。

次にDRBDをインストールします。

DRBDの最低必要なパッケージはkmod-drbdとdrbd-utils.x86_64ですが、加えてbash-completionとdrbd-bash-completionをインストールすると、コマンド入力中に入力補完されて便利です。

[root@node1 yum.repos.d]# dnf install kmod-drbd drbd-bash-completion.x86_64 drbd-pacemaker.x86_64 drbd-utils.x86_64 bash-completion

インストールが終わったら、カーネルにDRBDが組み込まれたかlsmodコマンドで確認します。

[root@node1 ~]# lsmod | grep drbd
drbd_transport_tcp 22184 1
drbd 572465 3 drbd_transport_tcp
libcrc32c 12644 4 xfs,drbd,nf_nat,nf_conntrack

もしDRBDが読み込まれない場合は、OSを再起動する必要があります。
再起動してもカーネルにDRBDが読みこまれない場合はカーネルのセキュアブート設定が影響している可能性があります。こちらのDRBDのセキュアブート対応の記事を試してみてください。

次はDRBDの設定と動作確認の方法を紹介します。