Runbook: Warm Reboot が失敗 / 通信断が長引く¶
実行前提
warm-reboot 自体が失敗すると cold reboot にフォールバックし、data plane が数十秒~数分中断する(ASIC 再初期化 + neighbor relearn)。実行前に: (1) sudo show warm_restart config で warm_restart enable を確認、(2) sudo cp /etc/sonic/config_db.json /etc/sonic/config_db.json.bak.warmreboot.$(date +%s) で backup、(3) bgp neighbor 側 で graceful-restart helper が有効か対向と合意、(4) ECMP redundancy がある状態で 1 ToR ずつ実施。失敗時は fast-reboot / 通常 reboot での復旧、または backup 戻し + config reload -y。
症状¶
warm-reboot実行後に Data plane の通信が想定(< 1s)を超えて 30s 〜 数分断するwarm-reboot自体が途中で abort して通常のrebootにフォールバックする- 再起動後に SAI object が再生成され、FDB / ARP / Route が全部 relearn になっている
確認コマンド¶
# Warm Restart enable / state
show warm_restart config
show warm_restart state
sonic-db-cli CONFIG_DB hgetall "WARM_RESTART|swss"
sonic-db-cli CONFIG_DB hgetall "WARM_RESTART|bgp"
sonic-db-cli STATE_DB hgetall "WARM_RESTART_TABLE|orchagent"
# warm boot 前のチェック (pending op)
sudo /usr/local/bin/check_warmboot_progress.sh 2>/dev/null || true
docker logs swss 2>&1 | grep -iE "warm.*restore|reconcil" | tail -50
# BGP graceful-restart capability
docker exec bgp vtysh -c "show bgp neighbor" | grep -A3 "Graceful Restart"
想定原因¶
WARM_RESTARTテーブルで該当機能が enable されていない (bgp / teamd / swss / syncd / nat 等)- BGP graceful restart の対向側未対応 / capability 未交換: GR helper として動作するために対向 peer も GR 対応が必要
- dataplane object 量が大きすぎて reconciliation が間に合わない (Route 数十万件 + ACL 大量) → restore_count に至らずタイムアウト
pre-shutdownのチェックで pending operation あり (COUNTERS_DBの queue / port が busy)- platform / SAI が warm boot 非対応 (Mellanox/Broadcom SDK バージョン依存)
切り分け手順¶
flowchart TD
A[warm-reboot で経路断 / 失敗] --> B{warm boot enable?}
B -- No --> B1[config warm_restart enable]
B -- Yes --> C{各サービスの warm-boot 対応?}
C -- No --> C1[未対応サービスを fast-reboot に切替]
C -- Yes --> D{state restoration 完了?}
D -- No --> D1[orchagent / syncd の warm-boot ログ確認]
D -- Yes --> E[BGP GR / LACP fast rate の設定を確認]
1. Warm Restart の enable 状態¶
show warm_restart config
sonic-db-cli CONFIG_DB hgetall "WARM_RESTART|swss"
sonic-db-cli CONFIG_DB hgetall "WARM_RESTART|bgp"
sonic-db-cli CONFIG_DB hgetall "WARM_RESTART|teamd"
- 期待: 該当 module が
enable: true - 異常: 設定漏れ →
config warm_restart enable <module>で投入
2. Warm Restart 状態の前後比較¶
show warm_restart state
sonic-db-cli STATE_DB hgetall "WARM_RESTART_TABLE|orchagent"
sonic-db-cli STATE_DB hgetall "WARM_RESTART_TABLE|bgp"
- 期待:
state: reconciledまで到達 - 異常:
restoredで stuck /disabled→ reconciliation のロジック失敗
3. BGP GR capability 確認¶
- 期待:
Graceful restart: advertised and received - 異常:
received onlyなどで非対称 → 対向が helper 動作できない
4. 失敗ログ¶
sudo grep -iE "warm|reconcil" /var/log/syslog | tail -200
docker logs swss 2>&1 | grep -iE "warm|reconcil"
docker logs bgp 2>&1 | grep -iE "warm|graceful"
5. プラットフォーム対応の確認¶
sudo cat /usr/share/sonic/device/*/*/platform_asic | head
sudo grep -i SAI_KEY_WARM_BOOT /usr/share/sonic/hwsku/*/sai.profile 2>/dev/null
対処方法¶
- 不足 module の enable:
config warm_restart enable swss,bgp,teamd,nat,dhcp_relayを順に - 大量経路で reconciliation がタイムアウトする場合:
WARM_RESTART|<module>のbgp_timer/neighsyncd_timer/fpmsyncd_timer等を拡張 - BGP 側で
bgp graceful-restartを双方で有効化 - それでも warm boot が断続する場合:
fast-reboot(control plane reset / data plane preserved)にフォールバックする運用へ変更
関連ページ¶
引用元¶
-
sonic-net/sonic-utilities @ 39732bceb —
scripts/warm-reboot↩ -
sonic-net/sonic-swss @ 4305596 — warm_restart helper ↩