Nginx 负载均衡 - 实时配置(On-the-Fly Configuration)

xiaoxiao2021-02-28  62

原文地址

1. 概述

使用 Nginx Plus 时,服务器组中的 upstream 服务器的配置可以通过 Nginx Plus 的 REST API 接口实时修改。可以发送 API 命令来查看所有服务器或服务器组中指定的服务器,修改指定服务器的参数,增删服务器。 注意:在 Nginx Plus 之前的版本中,实时配置是通过 upstream_conf 处理程序来实现的,已废弃。

2. 先决条件 Prerequisites

使用动态配置需要满足的环境:

NGINX Plus R13。创建了包含服务器的 upstream 服务器组。更多信息可以查看 HTTP 负载均衡 和 TCP/UDP 负载均衡。upstream 服务器组驻留在共享内存区域中。更多信息可以查看 多进程之间共享数据。

3. 在配置文件中开启 API

为了开启 API,需要在 Nginx 配置文件中为 API 请求创建一个独立的 location,并且在这个 location 中指定 api 指令:

server { ... location /api { api write=on; } }

强烈建议,对这个 location 限制访问,例如,只允许来自 127.0.0.1 的访问:

server { location /api { api write=on; allow 127.0.0.1; deny all; } }

upstream 服务器组中使用 API location 的例子:

http { # ... # Configuration of the server group upstream appservers { zone appservers 64k; server appserv1.example.com weight=5; server appserv2.example.com:8080 fail_timeout=5s; server reserve1.example.com:8080 backup; server reserve2.example.com:8080 backup; } server { # Location that proxies requests to the group location / { proxy_pass http://appservers; health_check; } # Location for configuration requests location /api { api write=on; allow 127.0.0.1; deny all; } } }

这个例子中,第二个 location 只允许来自 127.0.0.1 这个 IP 地址的访问。来自其他 IP 地址的请求一律拒绝。

4. 使用 API

Nginx Plus 的 REST API 支持下面几种 HTTP 方法:

GET – 获取 upstream 服务器组或其中一台服务器的信息。POST – 向 upstream 服务器组添加一台服务器。PATCH – 为一台指定的服务器更新参数。DELETE- 从服务器组删除一台服务器。

Nginx 参考手册 中详细描述了端点和方法(endpoints and methods)。此外,该 API 还提供了一个 Swagger 规范,可用于探索 API 并了解每个资源的功能。Swagger 文档与 NGINX Plus 捆绑在一起,可以通过 http://nginxhost/swagger-ui/ 进行访问。 要将配置命令传递给 Nginx,可以通过任何方式发送 API 命令,例如 curl。 所有的请求体和响应都是 JSON 格式。 API URL 应包含 API 版本,当前版本为1。

例如,要向服务器组添加一个新服务器,可以发送下面的 curl 命令:

curl -X POST -d '{ "server": "10.0.0.1:8089", "weight": 4, "max_conns": 0, "max_fails": 0, "fail_timeout": "10s", "slow_start": "10s", "backup": true, "down": true }' -s http://127.0.0.1/api/1/http/upstreams/appservers/servers

从服务器组删除一台服务器:

curl -X DELETE -s http://127.0.0.1/api/1/http/upstreams/appservers/servers/0

编辑指定服务器的参数:

curl -X PATCH -d '{ "down": true }' -s http://127.0.0.1/api/1/http/upstreams/appservers/servers/0

5. 动态示例

可以在只读模式下在线尝试 NGINX Plus API 接口:http://demo.nginx.com/swagger-ui/。

6. 配置动态配置的持久性

上例中的配置允许将实时更改存储在共享内存中。 重新加载 NGINX Plus 的配置文件时,这些更改将被丢弃。 要使这些更改在配置重新加载期间保持不变,需要将 upstream 服务器的列表从 upstream block 移动到一个专用文件,以保持 upstream 服务器的状态。文件的路径通过 state 指令设置。 Linux发行版的推荐路径是 /var/lib/nginx/state/,FreeBSD发行版的路径是 /var/db/nginx/state/:

http { # ... upstream appservers { zone appservers 64k; state /var/lib/nginx/state/appservers.conf; # All these servers should be moved to the file using the upstream_conf API: # server appserv1.example.com weight=5; # server appserv2.example.com:8080 fail_timeout=5s; # server reserve1.example.com:8080 backup; # server reserve2.example.com:8080 backup; } }

注意,这个文件只能通过来自 API 接口的配置命令来修改,而不应该直接修改文件。

转载请注明原文地址: https://www.6miu.com/read-2625018.html

最新回复(0)