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

相关推荐
夏雪coding7 小时前
nginx SPA 回落把 CSS 变成了 HTML:一个返回 200 却让样式失效的坑
前端·nginx
铅笔侠_小龙虾8 小时前
rust 学习(9):结构体
开发语言·学习·rust
難釋懷9 小时前
Nginx日志
前端·网络·nginx
铅笔侠_小龙虾10 小时前
rust 学习(12):常用集合(上)-- Vec
rust
Lysander.Jovian12 小时前
Nginx服务2
运维·数据库·nginx
qq_2676128912 小时前
从工具整合到AI协作:Gitee DevOps平台如何重塑企业研发全流程效能
人工智能·gitee·devops
风曦Kisaki13 小时前
# Kubernetes(K8s)笔记Day15:K8s网络工作原理【Pod 网络模型,CNI 网络插件,Calico 工作模式详解,BGP协议,路由反射器】
运维·网络·nginx·云原生·容器·kubernetes
落知秋1 天前
RUST中的trait是什么?
笔记·rust
科技新资讯1 天前
国内AI影视制作服务商哪家口碑好
运维·人工智能·devops
Embedded-Xin1 天前
中间件—zenoh零基础入门
linux·中间件·rust·机器人·自动驾驶·嵌入式