ticketing.toml(可选)中的每一项都可以同样以环境变量的形式传入。优先级为环境变量 > ticketing.toml > 默认值,键名与布尔值均不区分大小写。Docker 镜像基于 scratch 构建,因此默认做法是通过环境变量注入配置(如需使用配置文件,请挂载后用 CONFIG 指定路径)。
| 环境变量 | 默认值 | 说明 |
|---|---|---|
PORT (SERVER_PORT) | 5225 | TCP 监听端口。在集群模式下会被忽略,改用 CLUSTER_SELF 中的端口 |
DEBUG (SERVER_DEBUG) | 取决于构建 | 为 1/true 时输出 debug 日志 |
SOCKET_BIND | 0.0.0.0 | 监听地址 |
SOCKET_NODELAY | true | TCP_NODELAY |
SOCKET_READ_BUF_LEN | 4096 | 每个连接的读缓冲区(字节) |
SOCKET_REPLY_QUEUE | 1024 | 每个连接的响应队列长度 |
SOCKET_REPLY_BATCH | 64 | 单次 write 中合并发送的最大响应数 |
SWEEP_INTERVAL_SECS | 5 | 过期 key 清理周期(秒) |
CLUSTER_SELF | (无) | 该节点的对外公布地址 host:port。若设置,则进入集群模式 |
CLUSTER_PEERS | (无) | 节点地址列表(逗号分隔)。顺序 = 晋升优先级,需包含 self,至少 2 个 |
CONFIG | ./conf/ticketing.toml | 配置文件路径 |
[cluster](或 CLUSTER_*),即为单机节点。速度最快,但重启时会有短暂 中断,且状态保存在内存中,重启后即丢失(lease 是安全网)。CLUSTER_PEERS(按优先级排序)以及指向 自身的 CLUSTER_SELF。存活节点中优先级最高的一个成为主节点,其余节点作为备用节点 实时接收复制数据。详细原理请参阅工作原理与 协议 — 服务器 ↔ 服务器。Kubernetes 集群部署使用 StatefulSet + 无头服务(headless service)。让每个 Pod 拥有稳定的 DNS 名称(
ticketing-0.ticketing…、ticketing-1.ticketing…),将这些名称按优先级顺序填入CLUSTER_PEERS,每个 Pod 的CLUSTER_SELF则通过 downward API(metadata.name)自动注入。
Ctrl+C)时,会通过交接使备用节点晋升,客户端随之切换过去。sarolab/ticketing · Github: saro-lab/ticketing