2023年10月28日土曜日

Pacemaker+Corosyncのハートビートのタイムアウト値を変更する

以前の記事にて、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 件のコメント:

コメントを投稿

人気の投稿