热重启 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 作为重新打开所有访问日志的信号。这用于原子移动和重新打开日志轮换。