app_sticky

1. 功能说明

特定app 客户端和server 端 sticky 路由一致性算法。该算法配置后会根据指定的cookie值或者header值进行session路由。

app_sticky支持通过动态upstream添加以及集群配置,详见集群app_sticky配置。

2. 依赖模块

app_sticky算法依赖模块:

load_modules modules/njt_app_sticky_module.so

3. 指令说明

upstream back{
                app_sticky zone=app:4m cookie:route;
                server 127.0.0.1:8008;           #real server
                server 127.0.0.1:8009;           #real server
     }
app_sticky: 该功能配置指令
zone={name}:{size} : 共享内存配置名称以及大小
cookie:{name}  : 通过指定name的cookie值进行session路由 
header:{name}  : 通过指定name的header值进行session路由
其中: cookie和header二选一
ttl: {session_timeout} :session 过期时间,默认600s, 如果配置,必须>=1s,需配置在cookie 或者header之后

4.调用样例

4.1 添加动态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