【二】pingora入门:命令行选项、配置、服务优雅升级

原文发布在:【二】pingora入门:命令行选项、配置、服务优雅升级

写在前面

书接上回:【一】pingora入门:负载均衡 和 健康检查

还没有看过前一篇文章的,建议先看看哦。

同样的,这篇博客的内容来源于:quick_start

命令行选项

Pingora Server 提供了许多内置功能,我们只需要单行更改就能使用上这些功能

rust 复制代码
fn main() {
    let mut my_server = Server::new(Some(Opt::parse_args())).unwrap();
    ...
}

做出这一更改后,Pingora 将消耗传递给负载均衡器的命令行参数。我们可以通过运行

rust 复制代码
cargo run -- -h

我们应该会看到一个帮助菜单,其中列出了我们现在可以使用的参数列表。在接下来的章节中,我们将利用这些参数,使用负载均衡器做更多事情

在后台运行

通过参数 -d 或 --daemon 可以让程序在后台运行。

rust 复制代码
cargo run -- -d

要停止该服务,可以向其发送 SIGTERM 信号以实现优雅关机,在这种情况下,该服务将停止接受新请求,但会在退出前尝试完成所有正在进行的请求。

rust 复制代码
pkill -SIGTERM load_balancer

(SIGTERM 是 pkill 的默认信号)。

配置

Pingora 配置文件有助于定义如何运行服务。下面是一个配置文件示例,其中定义了服务可以有多少个线程、pid 文件的位置、错误日志文件和升级协调socket(我们稍后会解释)。

复制下面的内容,将其放入你的项目目录下名为 conf.yaml 的文件中。

yaml 复制代码
---
version: 1
threads: 2
pid_file: /tmp/load_balancer.pid
error_log: /tmp/load_balancer_err.log
upgrade_sock: /tmp/load_balancer.sock

要使用此conf文件:

shell 复制代码
cat /tmp/load_balancer.pid

RUST_LOG=INFO 位于此处,以便服务填充错误日志

现在你可以找到服务的 pid

shell 复制代码
 cat /tmp/load_balancer.pid

服务优雅升级(Linux only)

假设我们更改了负载均衡器的代码,并重新编译了二进制文件。现在,我们要将后台运行的服务升级到这个更新的版本。

如果我们只是简单地停止旧服务,然后启动新服务,那么中间到达的一些请求可能会丢失。幸运的是,Pingora 提供了一种优雅的方法来升级服务。

具体做法是,首先向运行中的服务器发送 SIGQUIT 信号,然后使用参数 -u \ --upgrade 启动新服务器。

shell 复制代码
pkill -SIGQUIT load_balancer && \
RUST_LOG=INFO cargo run -- -c conf.yaml -d -u

在此过程中,运行中的旧服务器将等待并将其监听sockets移交给新服务器。然后,旧服务器开始运行,直到所有正在进行的请求都完成为止。

从客户端的角度来看,服务始终在运行,因为监听sockets从未关闭。

相关推荐
FII工业富联科技服务1 小时前
Omniverse 数字孪生与柔性自动化,如何破解产能与交付、设备与空间的双重困境?
运维·自动化·devops
码间留白6 小时前
手把手把 GitHub 推上阿里云 ECS:Actions CI/CD 全链路避坑实录(折腾好几天,到 2 分钟见绿)
运维·阿里云·ci/cd·docker·devops·github actions
小天源6 小时前
从 Nginx 日志到访问分析:轻量化网站监测服务的架构实践
jvm·nginx·网络安全·架构·网络监控
niyongsheng7 小时前
多智能体连续时间内路径规划:AA-SIPP(m) 的 Rust 实现与算法
算法·rust·机器人
Lyy10 小时前
DevOps平台 — 第十六篇:动态的设计与实现
后端·devops
NetX行者11 小时前
Rust 初体验:一个全栈工程师的编译器“毒打“笔记
开发语言·笔记·rust
GitCode官方13 小时前
直播预告:华为云码道实战|Agentic DevOps 与昇腾 CANN 算子 AI 开发
人工智能·华为云·devops·atomgit
幸福清风13 小时前
从域名到一行 nginx 配置:一次站点 HTTPS 证书更换与排障复盘
python·nginx·https
Amos_Web14 小时前
Rspack 源码解析(二十七):AsyncWasmParserAndGenerator 如何把二进制变成异步模块
前端·rust
敲代码的玉米C14 小时前
菜单栏做出来了,内存预算却没过:Hostwatch 开发手记(二)
rust