【二】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从未关闭。

相关推荐
「、皓子~11 小时前
海狸IM 2.1 私有化部署从零到一:中间件、微服务与 Nginx 全流程
nginx·flutter·微服务·中间件·开源软件·im·海狸im
对象存储与RustFS11 小时前
把 RustFS 跑在 Kubernetes 上:官方 Helm Chart 从单机到分布式
后端·rust·开源
极小狐11 小时前
用 Flow 编排 Agent 智能体:极狐GitLab Duo 自定义工作流实战
ai·gitlab·agent·devops·flow·duo
梦醒沉醉14 小时前
3、Rust参考手册——宏
rust
徐小黑ACG1 天前
nginx配置文件
linux·服务器·nginx
考虑考虑1 天前
nginx打印请求日志
运维·后端·nginx
Amos_Web1 天前
Rspack 源码解析(三):从入口到依赖图,读懂 Make 阶段的 Rust 任务循环
前端·rust
小灰灰搞电子2 天前
Rust+Slint 实现左右伸缩式图片浏览器源码分享
rust·slint·图片伸缩浏览器
Rain的Java大神之路2 天前
JavaWeb开发如何解决跨域问题
java·前端·后端·nginx·web安全·面试·运维开发
Lsetea2 天前
Nginx报SSL_CTX_use_PrivateKey failed:证书与私钥不匹配怎么排查
nginx·https·ssl证书·openssl·私钥