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

原文地址

1. 概述

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

2. 先决条件 Prerequisites

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

  1. NGINX Plus R13。
  2. 创建了包含服务器的 upstream 服务器组。更多信息可以查看 HTTP 负载均衡TCP/UDP 负载均衡
  3. 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 接口的配置命令来修改,而不应该直接修改文件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值