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