关于api:API-动态更新-Upstream

5次阅读

共计 2141 个字符,预计需要花费 6 分钟才能阅读完成。

明天和大家聊聊 API 动静更新 Upstream 性能,它能够动静的增加、批改、或移除上游服务器组中的节点,且无需从新加载服务器或 NGINX 配置,上面就具体来看一下吧。

解决了什么问题

通常状况下,咱们要更新 Upstream 的 Server 成员及属性信息,咱们须要如下步骤:

1、更新 Upstream 的配置,须要编辑 NGINX 的配置文件,如下:

http {
    # 创立 upstream group(蕴含 server 成员)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 down;
    }       
}

2、配置更新后,重载配置,以保障配置失效,如上操作无奈实现动静更新,即时性较差。

而通过 API 动静更新 Upstream,就能够解决如上的问题。

哪些场景会用到该性能呢?

  • 主动扩容:当须要往 Upstream group 中增加更多的 server 时;
  • 服务器成员保护:当你须要移除一个 server,或指定一个 server 为备份服务器时,或临时敞开一个 server 进行提供服务时;
  • 疾速设置服务器属性:诸如当你须要扭转服务器权重、流动连贯、迟缓启动、故障超时等属性需要时。
  • 服务器状态监控:当须要用一个命令来取得服务器或服务器组的状态时。

如何启用动静 Upstream API

通过以下代码配置 Upstream 列表以及反向代理,并且开启 API 动静:

用 API 指令开启 / 敞开 NGINX API,write=on 示意以读写模式关上。write 默认不写,代表 off,仅反对查问操作。

动静 API 更新 Upstream 利用例子

1、动静增加 Server

能够以 IP 地址模式动静增加 server,执行如下命令:

curl -v -X POST -s http://192.168.40.111:8181/zxlapi/7/http/upstreams/cluster1/servers -d '{"server":"192.168.40.135:8080"}'|jq .

返回后果如下图:

也能够以域名形式动静增加:

curl -v -X POST -s http://192.168.40.111:8181/zxlapi/7/http/upstreams/cluster1/servers -d '{"server":"serv110.tmzy.com:8080"}'|jq .

以域名形式增加的 server 不同之处在于,域名形式增加的 server 会作为父 server 存在,它也会占用一个 server id, 其下可能关联一个或更多个子 server。

2、动静批改 server 批改

命令参考如下:

curl -v -X PATCH -s http://192.168.40.111:8181/zxlapi/7/http/upstreams/cluster1/servers/6 -d '{"backup": false,"weight": 10}' |jq .

批改后随即会返回批改的 server 的根本信息,不包含健康状况,申请响应等信息。

留神,以域名模式增加的 server,父 server 和子 server 都反对批改,互不影响。

3、动静删除 server

删除命令参考如下:

curl -X DELETE -s http://192.168.40.111:8181/zxlapi/7/http/upstreams/cluster1/servers/1 |jq .

以 IP 模式增加的 server,执行删除命令后,随即返回后果就能够看见胜利删除了一条。

以域名模式增加的 server,执行删除父 server 命令后,父 server 和其下所有子 server 会一并删除。

以域名模式增加的 server,执行删除子 server 命令后,要进行提醒校验,不容许删除子 server。

4、查问 server

命令参考如下:

curl -v http://192.168.40.111:8181/zxlapi/7/http/upstreams/cluster1/servers/ server_id | jq .

以域名形式增加的子 server 的查问返回后果如下:

会比 IP 模式增加的 server 多出 parent 和 host 两个字段。

5、动静配置的长久化

通过 API 所做的更改,在配置文件被从新加载时,这些扭转会被抛弃,那想让动静批改永恒失效怎么办?能够通过 state 指令来实现动静配置的长久化。

http {
    # ...
    upstream appservers {
        zone appservers 64k;
        state /var/lib/nginx/state/appservers.conf;
        
        # All servers are defined in the state file
        # server appserv1.example.com      weight=5;
        # server appserv2.example.com:8080 fail_timeout=5s;
       
    }
}

留神:state 状态文件只能通过 API 形式进行批改,不要去间接批改该文件。

正文完
 0