原文发布在:【二】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从未关闭。