熱啟動 Python 包裝器
通常,Envoy 會進行熱啟動以進行組態變更和二進位更新。然而,在許多情況下,使用者會希望使用標準的程序管理器,例如 monit、runit 等。我們提供/restarter/hot-restarter.py使其變得簡單易懂。
重新啟動器會像這樣被調用
hot-restarter.py start_envoy.sh
start_envoy.sh
可能會像這樣定義(使用類似 salt/jinja 的語法)
#!/bin/bash
ulimit -n {{ pillar.get('envoy_max_open_files', '102400') }}
sysctl fs.inotify.max_user_watches={{ pillar.get('envoy_max_inotify_watches', '524288') }}
exec /usr/sbin/envoy -c /etc/envoy/envoy.cfg --restart-epoch $RESTART_EPOCH --service-cluster {{ grains['cluster_name'] }} --service-node {{ grains['service_node'] }} --service-zone {{ grains.get('ec2_availability-zone', 'unknown') }}
關於 inotify.max_user_watches
的注意事項:如果 Envoy 被設定為監看 Linux 機器上目錄中的許多組態檔案,請增加此值,因為 Linux 對可監看的最大檔案數量強制執行限制。
RESTART_EPOCH 環境變數會在每次重新啟動時由重新啟動器設定,且必須傳遞給 --restart-epoch
選項。
警告
如果您想要使用 --use-dynamic-base-id
選項,則必須特別小心。該旗標僅能在 RESTART_EPOCH 為 0 時設定,而您的 start_envoy.sh 必須取得選定的基礎 ID(透過 --base-id-path
),儲存它,並在後續的調用中(當 RESTART_EPOCH 大於 0 時)將其用作 --base-id
的值。
重新啟動器處理下列訊號
SIGTERM 或 SIGINT (Ctrl-C):將會乾淨地終止所有子程序並退出。
SIGHUP:將會通過重新調用傳遞給熱啟動腳本的第一個參數來進行熱啟動。
SIGCHLD:如果任何子程序意外關閉,重新啟動腳本將會關閉所有程序並退出,以避免處於非預期的狀態。控制程序管理器應接著重新啟動重新啟動器腳本以再次啟動 Envoy。
SIGUSR1:將會轉發至 Envoy 作為重新開啟所有存取日誌的訊號。這用於原子移動和重新開啟日誌輪換。