动态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