WARM_RESTART テーブル¶
概要¶
ホットフィックスやソフトウェアアップグレード時にデータプレーンを落とさずコントロールプレーンを再起動するためのモジュール別 warm-restart 設定を持つテーブル3。モジュール (bgp/teamd/swss/system) ごとに enable 状態と各種タイマを保持する。
warmboot-finalizer / 各プロセス (bgpd, teamd, orchagent, neighsyncd 等) が起動時に CONFIG_DB から読み出し、再収束の待ち時間を決める。
データフロー (自動生成)¶
flowchart LR
CDB[("CONFIG_DB<br/>WARM_RESTART")]
DM["warmboot-finalizer"]
CDB --> DM
凡例
CONFIG_DB から SAI までの典型経路を docs/reference/config-db-orch-map.md から機械生成したミニ図。詳細・例外は本ページ本文と対応表を参照。
key 構造¶
<module>:bgp,teamd,swss,systemの enum。
フィールド¶
| フィールド | 型 | 制約 | 説明 |
|---|---|---|---|
module (key) |
enum | bgp/teamd/swss/system |
warm-restart 対象モジュール |
bgp_eoiu |
boolean | module=bgp のみ | BGP End-of-Initial-Update シグナルの有効化 |
bgp_timer |
uint16 (1..3600) | module=bgp のみ | BGP の再収束待ちタイマ [秒] |
teamsyncd_timer |
uint16 (1..3600) | module=teamd のみ | teamsyncd の再同期猶予 [秒] |
neighsyncd_timer |
uint16 (1..9999) | module=swss のみ | neighsyncd の ARP/NDP 再収束タイマ [秒] |
なお STATE_DB:WARM_RESTART_TABLE (state DB) は restart 進捗のランタイム表現で、CONFIG_DB のこのテーブルとは別物。enable フラグなどシステム全体の制御は STATE_DB 側の WARM_RESTART_ENABLE_TABLE および config warm_restart enable で扱う実装が多い。
制約¶
- 各タイマには
must句でモジュールとの整合性チェックがかかる(例:bgp_timerはmodule = 'bgp'でないと許可されない)。 - タイマ範囲を外れる値は YANG validation 段で拒否される。
購読者¶
bgpcfgd:bgp_timer/bgp_eoiuを vtysh のbgp graceful-restart系設定に変換teamd(LACP):teamsyncd_timerを読み、LAG 再収束タイムアウトとして使用orchagent/neighsyncd/fpmsyncd:neighsyncd_timerを ARP/route の reconciliation 待ちに使用warmboot-finalizer.sh:WARM_RESTART_TABLE状態を見ながら最終的に dataplane を unfreeze
関連 CONFIG_DB / YANG / CLI¶
- 関連 CONFIG_DB:
DEVICE_METADATA(synchronous_mode,warm-restartenable 補助) - 関連 CLI:
config warm_restart enable,config warm_restart bgp_timer,config warm_restart neighsyncd_timer,show warm_restart - 関連 YANG:
sonic-warm-restart
値依存挙動マトリクス¶
| フィールド | 値 | 実挙動 |
|---|---|---|
module |
bgp |
bgp_eoiu / bgp_timer が有効。bgpcfgd が vtysh の bgp graceful-restart restart-time <val> に変換 |
module |
teamd |
teamsyncd_timer が有効。teamd が LAG 再収束タイムアウトとして使用 |
module |
swss |
neighsyncd_timer が有効。neighsyncd が ARP/NDP reconciliation 待ちに使用 |
module |
system |
システム全体の warm-restart 制御。個別タイマフィールドなし |
module |
その他 | YANG バリデーションで reject |
bgp_eoiu |
true |
BGP End-of-Initial-Update シグナルを待って再収束完了と判定 |
bgp_eoiu |
false |
EOIU なしで再収束完了と判定 |
bgp_timer |
1〜3600 (秒) |
BGP graceful-restart のタイムアウト。典型値 300 秒 |
bgp_timer |
module≠bgp | YANG must 違反で reject |
teamsyncd_timer |
1〜3600 (秒) |
LAG 再収束タイムアウト |
teamsyncd_timer |
module≠teamd | YANG must 違反で reject |
neighsyncd_timer |
1〜9999 (秒) |
ARP/NDP reconciliation 待ちタイムアウト。典型値 110 秒 |
neighsyncd_timer |
module≠swss | YANG must 違反で reject |
enable フィールドについて
CONFIG_DB の WARM_RESTART テーブルに enable フィールドは存在しない。enable/disable は STATE_DB の WARM_RESTART_ENABLE_TABLE と config warm_restart enable コマンドで制御する。
例外条件・特殊挙動 ¶
module列挙値 (YANG):bgp/teamd/swss/systemのみ許可。それ以外は YANG バリデーションで reject される1。- フィールドとモジュールの対応 (YANG
must): bgp_eoiu/bgp_timer:must "current()/../module = 'bgp'"— bgp 以外のモジュールで設定すると"bgp_timer is only supported for module bgp."エラー1。teamsyncd_timer:must "current()/../module = 'teamd'"1。neighsyncd_timer:must "current()/../module = 'swss'"1。- タイマー範囲 (YANG):
bgp_timer/teamsyncd_timer:1..3600— 範囲外は"Timer must be 1..3600"エラー1。neighsyncd_timer:1..99991。- YANG 制約違反:
sonic-cfggen/config loadの段階でエラーが発生し DB には書き込まれない。 - warm-restart 有効化ログ:
enableがtrueの場合、各 mgr が起動後にSWSS_LOG_NOTICE("warmstart state set to REPLAYED/RECONCILED")を記録する2。
関連リファレンス¶
- YANG:
sonic-warm-restart - CLI:
config warm_restart/show warm_restart
引用元¶
運用ヒント¶
典型値¶
- key 形式:
WARM_RESTART|<module>(bgp,swss,teamd,system)。 enable:true/false。bgp_timer: 300、neighsyncd_timer: 110。
よくある誤設定¶
enable: trueのまま長時間運用したままconfig saveし忘れて再起動すると warm-restart 状態が不整合になる。
確認コマンド¶
-
sonic-buildimage/src/sonic-yang-models/yang-models/sonic-warm-restart.yanghttps://github.com/sonic-net/sonic-buildimage/blob/master/src/sonic-yang-models/yang-models/sonic-warm-restart.yang ↩↩↩↩↩↩ -
sonic-swss/cfgmgr/vlanmgr.cpp(warmstart ロジック参照) https://github.com/sonic-net/sonic-swss/blob/master/cfgmgr/vlanmgr.cpp ↩ -
YANG 定義:
sonic-warm-restart.yang. https://github.com/sonic-net/sonic-buildimage/blob/9ea932ec2e18f35e58268ec2e4456b1d4afd65cd/src/sonic-yang-models/yang-models/sonic-warm-restart.yang ↩