动态app sticky支持

1.功能描述

动态upstream中支持配置app sticky指令。

2.依赖模块

njet.conf:

load_module modules/njt_app_sticky_module.so;

3.配置样例

njet.conf

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_agent_dynlog_module.so;  
load_module modules/njt_http_location_module.so; 
load_module modules/njt_app_sticky_module.so;
load_module modules/njt_dyn_ssl_module.so;
load_module modules/njt_http_dyn_server_module.so;
load_module  modules/njt_http_dyn_upstream_module.so;


user  root root;
worker_processes  2;

cluster_name helper;
node_name node1;

shared_slab_pool_size  100m;
shm_status on; 

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;

    access_log  logs/access.log;
    
    sendfile        on;

    keepalive_timeout  65;

    upstream backend1 {
    
         zone backend1 128k;
         
         server 192.168.40.150:5678;
    
    }

    server {
    
        listen 5555;
        server_name localhost;

         location / {

              proxy_pass http://backend1;
         }


    }

    server {

           listen 5900;

           location / {

                  add_header Set-Cookie route=5900;
                  return 200 "test 5900";

          }


     }
     
     server {

           listen 5901;

           location / {

                add_header Set-Cookie route=5901;
                return 200 "test 5901";

          }


     }

}

njet_ctrl.conf

load_module modules/njt_http_sendmsg_module.so;
load_module modules/njt_ctrl_config_api_module.so; 
load_module modules/njt_helper_health_check_module.so;
load_module modules/njt_http_upstream_api_module.so; 
load_module modules/njt_http_location_api_module.so;
load_module modules/njt_doc_module.so;

load_module modules/njt_http_ssl_api_module.so;
load_module modules/njt_http_dyn_server_api_module.so;
load_module  modules/njt_http_dyn_upstream_module.so;
load_module modules/njt_http_dyn_upstream_api_module.so;
load_module modules/njt_http_shm_status_module.so;
load_module modules/njt_http_shm_api_module.so;


events {
    worker_connections  1024;
}
error_log         logs/error_ctrl.log info;

http {
    dyn_sendmsg_conf  conf/iot-ctrl.conf;
    dyn_kv_conf       conf/ctrl_kv.conf;
    access_log        logs/access_ctrl.log combined;
    
    include           mime.types;

    server {
        listen       8081;

        location /doc {
            doc_api;
        }
        
        
        location /api {
            dyn_module_api;
        }

       location /shm {
            shm_status_display;
        }
   }
}


cluster_name helper;
node_name node1;

4.调用样例

添加动态upstream,并配置app_sticky。

配置动态upstream:

curl -X 'POST' \
  'http://192.168.40.119:8081/api/v1/dyn_ups' \
  -H 'accept: */*' \
  -H 'Content-Type: application/json' \
  -d '{
  "type": "add",
  "upstream_name": "dyn_backend1",
  "upstream_body": "zone dyn_backend1 1m;app_sticky zone=app:4m cookie:route;"
}'

返回

{
  "code": 0,
  "msg": "success."
}

添加动态location,并使用该upstream:

curl -X 'POST' \
  'http://192.168.40.119:8081/api/v1/dyn_loc' \
  -H 'accept: */*' \
  -H 'Content-Type: application/json' \
  -d '{
  "type": "add",
  "addr_port": "0.0.0.0:5555",
  "server_name": "localhost",
  "locations": [
    {
      "location_rule": "",
      "location_name": "/test",
      "location_body": "",
      "proxy_pass": "http://dyn_backend1"
    }
  ]
}'

返回

{
  "code": 0,
  "msg": "success."
}

向动态upstream中添加2个server

curl -X 'POST' \
  'http://192.168.40.119:8081/api/v1/upstream_api/http/upstreams/dyn_backend1/servers/' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
  "server": "127.0.0.1:5900",
  "weight": 10,
  "max_conns": 0,
  "max_fails": 1,
  "fail_timeout": "10s",
  "slow_start": "10s",
  "route": "",
  "backup": false,
  "down": false
}'
curl -X 'POST' \
  'http://192.168.40.119:8081/api/v1/upstream_api/http/upstreams/dyn_backend1/servers/' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
  "server": "127.0.0.1:5901",
  "weight": 10,
  "max_conns": 0,
  "max_fails": 1,
  "fail_timeout": "10s",
  "slow_start": "10s",
  "route": "",
  "backup": false,
  "down": false
}'

验证app_sticky是否生效

curl --cookie "route=5900" http://127.0.0.1:5555/test

返回

test 5900

多次访问

curl --cookie "route=5900" http://127.0.0.1:5555/test

test 5900

curl --cookie "route=5900" http://127.0.0.1:5555/test

test 5900