以前の記事にて、Pacemaker+Corosyncにてクラスターを構成し、NGINXなどを冗長化する手順を記載した。
今までは細かいチューニングはしてこなかったが、先日検証環境にて仮想マシンを3台同時にOSインストールを行ったところ、負荷上昇に伴い、Corosyncにて以下のようなハートビートの閾値超過の警告メッセージが表示された。
Error in corosync.log : Aug 05 07:42:28 [2474] t3046ngnx
corosync warning [MAIN ]
Corosync main process was not scheduled (@1691188948066)
for 2737.8225 ms (threshold is 2400.0000 ms).
Consider token timeout increase.
要約すると、「Corosyncのハートビート(token)がタイムアウト値の閾値に近づいていることから、タイムアウト値の増加を検討せよ」、というメッセージとなる。
本記事では、Pacemaker+Corosyncのハートビートのタイムアウト値を変更する手順を記載する。
環境
今回検証した環境は以下の通り。
- OS : AlmaLinux release 9.2
- Pacemaker : version 2.1.5
- Corosync : Corosync Cluster Engine, version ‘3.1.7’
念のため、Pacemaker+Corosyncのクラスター構成図を以下に記載する。
Corosyncのハートビートのタイムアウト値を変更する手順 (pcs
コマンドで設定する場合)
pcs
コマンドで以下の通り実行すれば、corosync.conf
への設定追記から各ノードへの同期・反映まで、必要な作業はすべて実施してくれる。
最も簡単な手順となるため、通常はpcs
コマンドで設定すれば問題ないだろう。
# pcs cluster config update totem token=5000
Sending updated corosync.conf to nodes...
t3045ngnx: Succeeded
t3046ngnx: Succeeded
t3045ngnx: Corosync configuration reloaded
Corosyncのハートビートのタイムアウト値を変更する手順 (手動で設定する場合)
もし、pcs
コマンドではなく手動で実施したい場合は本手順で実施する。
1. 設定前確認
Corosyncのハートビート間隔は、token
という値で設定されている。現在の設定はcorosync-cmapctl
コマンドで確認できる。現在は、3000ミリ秒(3秒)で設定されていることがわかる。
# corosync-cmapctl | egrep 'token|consensus'
runtime.config.totem.cancel_token_hold_on_retransmit (u32) = 0
runtime.config.totem.consensus (u32) = 3600
runtime.config.totem.token (u32) = 3000 # <-★3000ミリ秒で設定(デフォルト)
runtime.config.totem.token_retransmit (u32) = 714
runtime.config.totem.token_retransmits_before_loss_const (u32) = 4
runtime.config.totem.token_warning (u32) = 75
タイムアウト値の修正は基本的にtoken
のみで問題ないが、関連して自動計算されるconsensus
という値もある。他にもtoken
の値などから自動計算されるパラメータがあるが、本記事では設定しないので説明は割愛する。
設定項目 | 内容 |
---|---|
token |
ハートビート間隔(ミリ秒)。こちらの間隔の80%を超えると警告メッセージが表示される(そのため、前述したメッセージでは閾値が2400.0000 msと表示されている)。 |
consensus |
新しいメンバーシップの設定を開始する前に合意が得られるまでの待ち時間。自動的にtoken * 1.2倍で設定される値ため、原則個別設定は不要。 |
2. corosync.conf
を修正
/etc/corosync/corosync.conf
に対して、以下設定を追加する。
# vi /etc/corosync/corosync.conf
totem {
version: 2
cluster_name: clst-01
transport: knet
crypto_cipher: aes256
crypto_hash: sha256
cluster_uuid: 956d398413b349219b60cef218e681f9
token: 5000 # <-★追加
}
3. クラスター間で設定を同期
設定したcorosync.conf
の内容をクラスターに所属する全ノードに同期させる。
# pcs cluster sync
t3045ngnx: Succeeded
t3046ngnx: Succeeded
Warning: Corosync configuration has been synchronized, please reload corosync daemon using 'pcs cluster reload corosync' command.
4. クラスターに設定を反映
同期した設定を反映させる。
# pcs cluster reload corosync
Corosync reloaded
5. 設定後確認
再度Corosyncの設定状況を確認すると、以下の通りtoken
の設定が更新されていることがわかる。
# corosync-cmapctl | egrep 'token|consensus'
runtime.config.totem.cancel_token_hold_on_retransmit (u32) = 0
runtime.config.totem.consensus (u32) = 6000
runtime.config.totem.token (u32) = 5000 # <-★更新されている
runtime.config.totem.token_retransmit (u32) = 1190
runtime.config.totem.token_retransmits_before_loss_const (u32) = 4
runtime.config.totem.token_warning (u32) = 75
totem.token (u32) = 5000
以上で、Pacemaker+Corosyncのハートビートのタイムアウト値を変更する手順は完了となる。
0 件のコメント:
コメントを投稿