服务发现
1. 功能说明
http,stream upstream 配置域名格式的server,定期查询dns server进行域名解析,实现对upstream server 的添加,删除,修改。并且支持upstream中添加service字段,可以使用DNS服务器中配置的SRV记录。
2. 配置说明
2.1 配置示例
user root root;
worker_processes 1;
error_log /home/njet/logs/error.log debug;
events {
worker_connections 1024;
}
http {
dyn_kv_conf conf/iot.conf;
error_log /home/njet/logs/error.log debug;
access_log /home/njet/logs/access.log combined;
upstream http1{
zone upstream_http 64k;
resolver 192.168.40.101 valid=10s;
state zyg11.conf;
}
upstream http2{
zone upstream_http 64k;
resolver 192.168.40.101 valid=10s;
server www.dev.test.com resolve;
}
server {
listen 8000;
server_name cluster1;
location / {
proxy_pass http://http1;
}
}
server {
listen 8899;
server_name cluster2;
}
}
stream{
upstream stream_upstream{
zone upstream_stream 64k;
resolver 192.168.40.101 valid=10s;
state zyg_stream.conf;
}
server {
listen 9000;
proxy_pass stream_upstream;
}
}
helper ctrl /home/njet/modules/njt_helper_ctrl_module.so /home/njet/conf/njet_ctrl.conf;
helper broker /home/njet/modules/njt_helper_broker_module.so conf/mqtt.conf;
cluster_name helper;
node_name node1;
3. 指令说明
3.1 resolver
Syntax: | resolver address ... [valid=*time*] [ipv4=on|off] [ipv6=on|off] ; |
---|---|
Default: | — |
Context: | upstream |
说明:配置自定义dns解析地址。
参数说明:
valid:域名失效的周期,也就是查询dns 的周期。支持标准的NJet时间字段。
3.2 resolver_timeout
Syntax: | resolver_timeout time; |
---|---|
Default: | resolver_timeout 30s; |
Context: | upstream |
说明:设置dns解析超时时间,默认30s。
3.3 state
Syntax: | state file; |
---|---|
Default: | — |
Context: | upstream |
说明:state zyg_stream.conf; 通过upstream api 接口添加的upstream server 信息的保存路径。reload 之后不会丢失。不配置的话,不保存。 reload 之后丢失。
3.4 server
Syntax: | server address [parameters] |
---|---|
Default: | — |
Context: | upstream |
说明:配置server,可以配置ip,unix,域名等类型。
特别参数:
resolve : 配置静态的动态域名。删除后reload 之后,还会加载。 例如: serverwww.dev.test.comresolve;注意:server 字段和state 字段冲突。 不能静态动态混用。
service:server test.muti.com service=_sip._tcp resolve;根据域名下的,服务请求,ip 列表。
3. 调用样例
3.1 静态配置包含service的域名
helper broker modules/njt_helper_broker_module.so conf/mqtt.conf;
helper ctrl modules/njt_helper_ctrl_module.so conf/ctrl.conf;
load_module modules/njt_http_dyn_upstream_module.so;
load_module modules/njt_http_upstream_member_module.so;
worker_processes auto;
cluster_name helper;
node_name node1;
shared_slab_pool_size 100m;
error_log logs/error.log info;
pid logs/njet.pid;
events {
worker_connections 1024;
}
http {
dyn_kv_conf conf/iot-work.conf;
include mime.types;
#default_type application/octet-stream;
include test.conf;
#default_type text/html;
access_log logs/access.log;
sendfile on;
keepalive_timeout 65;
resolver 192.168.40.101 valid=5s;
upstream backend1 {
zone backend1 128k;
server test.muti.com service=_sip._tcp resolve;
}
server {
listen 5555;
server_name localhost;
location / {
proxy_pass http://backend1;
}
}
}
server {
listen 5900;
location / {
return 200 "test 5900";
}
}
server {
listen 5901;
location / {
return 200 "test 5901";
}
}
server {
listen 5902;
location / {
return 200 "test 5902";
}
}
}
stream {
resolver 192.168.40.101 valid=10s;
upstream backend_s1 {
zone backend_s1 128k;
server 127.0.0.1:22222;
}
server {
listen 22222;
return "22222 ok";
}
server {
listen 22223;
proto_pass backend_s1;
}
}
通过upstream api查询解析结果
curl -X GET http://127.0.0.1:8081/api/v1/upstream_api/http/upstreams/backend1/servers | jq
[
{
"id": 1,
"server": "127.0.0.1:5901",
"weight": 1,
"max_conns": 0,
"max_fails": 1,
"fail_timeout": "10s",
"slow_start": "0s",
"route": "",
"backup": false,
"down": false,
"parent": 0,
"host": "test2.test.muti.com"
},
{
"id": 2,
"server": "127.0.0.1:5900",
"weight": 1,
"max_conns": 0,
"max_fails": 1,
"fail_timeout": "10s",
"slow_start": "0s",
"route": "",
"backup": false,
"down": false,
"parent": 0,
"host": "test1.test.muti.com"
},
{
"id": 3,
"server": "127.0.0.1:5902",
"weight": 1,
"max_conns": 0,
"max_fails": 1,
"fail_timeout": "10s",
"slow_start": "0s",
"route": "",
"backup": false,
"down": false,
"parent": 0,
"host": "test3.test.muti.com"
},
{
"id": 0,
"server": "test.muti.com",
"weight": 1,
"max_conns": 0,
"max_fails": 1,
"fail_timeout": "10s",
"slow_start": "0s",
"route": "",
"service": "_sip._tcp",
"backup": false,
"down": false
}
]
3.2 动态配置包含service的域名
helper broker modules/njt_helper_broker_module.so conf/mqtt.conf;
helper ctrl modules/njt_helper_ctrl_module.so conf/ctrl.conf;
load_module modules/njt_http_dyn_upstream_module.so;
load_module modules/njt_http_upstream_member_module.so;
worker_processes auto;
cluster_name helper;
node_name node1;
shared_slab_pool_size 100m;
error_log logs/error.log info;
pid logs/njet.pid;
events {
worker_connections 1024;
}
http {
dyn_kv_conf conf/iot-work.conf;
include mime.types;
#default_type application/octet-stream;
include test.conf;
#default_type text/html;
access_log logs/access.log;
sendfile on;
keepalive_timeout 65;
resolver 192.168.40.101 valid=5s;
upstream backend1 {
zone backend1 128k;
}
server {
listen 5555;
server_name localhost;
location / {
proxy_pass http://backend1;
}
}
}
server {
listen 5900;
location / {
return 200 "test 5900";
}
}
server {
listen 5901;
location / {
return 200 "test 5901";
}
}
server {
listen 5902;
location / {
return 200 "test 5902";
}
}
}
stream {
resolver 192.168.40.101 valid=10s;
upstream backend_s1 {
zone backend_s1 128k;
server 127.0.0.1:22222;
}
server {
listen 22222;
return "22222 ok";
}
server {
listen 22223;
proto_pass backend_s1;
}
}
添加域名:
curl -X POST http://127.0.0.1:8081/api/v1/upstream_api/http/upstreams/backend1/servers -d '{
"server": "test.muti.com",
"weight": 4,
"max_conns": 0,
"max_fails": 1,
"fail_timeout": "10s",
"slow_start": "10s",
"route": "",
"backup": false,
"down": false,
"service": "_sip._tcp"
}'
返回
* processing: http://127.0.0.1:8081/api/v1/upstream_api/http/upstreams/backend1/servers
* Trying 127.0.0.1:8081...
* Connected to 127.0.0.1 (127.0.0.1) port 8081
> POST /api/v1/upstream_api/http/upstreams/backend1/servers HTTP/1.1
> Host: 127.0.0.1:8081
> User-Agent: curl/8.2.1
> Accept: */*
> Content-Length: 207
> Content-Type: application/x-www-form-urlencoded
>
< HTTP/1.1 201 Created
< Server: njet/3.2.2
< Date: Tue, 01 Jul 2025 06:18:07 GMT
< Content-Type: application/json
< Content-Length: 173
< Connection: keep-alive
<
* Connection #0 to host 127.0.0.1 left intact
{
"id": 0,
"server": "test.muti.com",
"weight": 4,
"max_conns": 0,
"max_fails": 1,
"fail_timeout": "10s",
"slow_start": "10s",
"route": "",
"service":"_sip._tcp"
"backup": false,
"down": false
}
3.3 动态upstream并配置包含service的域名
helper broker modules/njt_helper_broker_module.so conf/mqtt.conf;
helper ctrl modules/njt_helper_ctrl_module.so conf/ctrl.conf;
load_module modules/njt_http_dyn_upstream_module.so;
load_module modules/njt_http_upstream_member_module.so;
worker_processes auto;
cluster_name helper;
node_name node1;
shared_slab_pool_size 100m;
error_log logs/error.log info;
pid logs/njet.pid;
events {
worker_connections 1024;
}
http {
dyn_kv_conf conf/iot-work.conf;
include mime.types;
#default_type application/octet-stream;
include test.conf;
#default_type text/html;
access_log logs/access.log;
sendfile on;
keepalive_timeout 65;
resolver 192.168.40.101 valid=5s;
upstream backend1 {
zone backend1 128k;
}
server {
listen 5555;
server_name localhost;
location / {
proxy_pass http://backend1;
}
}
}
server {
listen 5900;
location / {
return 200 "test 5900";
}
}
server {
listen 5901;
location / {
return 200 "test 5901";
}
}
server {
listen 5902;
location / {
return 200 "test 5902";
}
}
}
stream {
resolver 192.168.40.101 valid=10s;
upstream backend_s1 {
zone backend_s1 128k;
server 127.0.0.1:22222;
}
server {
listen 22222;
return "22222 ok";
}
server {
listen 22223;
proto_pass backend_s1;
}
}
添加动态upstream
curl -X POST http://127.0.0.1:8081/api/v1/dyn_ups -d '{
"type": "add",
"upstream_name": "dyn_backend1",
"upstream_body": "zone dyn_backend1 1m;state upstream_dyn_backend1.conf;resolver 192.168.40.101 valid=10s;"
}'
返回
{
"code": 0,
"msg": "success."
}
向动态upstream中添加域名
curl -X POST http://127.0.0.1:8081/api/v1/upstream_api/http/upstreams/dyn_backend1/servers -d '{
"server": "test.muti.com",
"weight": 4,
"max_conns": 0,
"max_fails": 1,
"fail_timeout": "10s",
"slow_start": "10s",
"route": "",
"backup": false,
"down": false,
"service": "_sip._tcp"
}'
返回
* processing: http://127.0.0.1:8081/api/v1/upstream_api/http/upstreams/dyn_backend1/servers
* Trying 127.0.0.1:8081...
* Connected to 127.0.0.1 (127.0.0.1) port 8081
> POST /api/v1/upstream_api/http/upstreams/backend1/servers HTTP/1.1
> Host: 127.0.0.1:8081
> User-Agent: curl/8.2.1
> Accept: */*
> Content-Length: 207
> Content-Type: application/x-www-form-urlencoded
>
< HTTP/1.1 201 Created
< Server: njet/3.2.2
< Date: Tue, 01 Jul 2025 06:18:07 GMT
< Content-Type: application/json
< Content-Length: 173
< Connection: keep-alive
<
* Connection #0 to host 127.0.0.1 left intact
{
"id": 0,
"server": "test.muti.com",
"weight": 4,
"max_conns": 0,
"max_fails": 1,
"fail_timeout": "10s",
"slow_start": "10s",
"route": "",
"service":"_sip._tcp"
"backup": false,
"down": false
}