背景
在我们的场景下,nginx 的 upstream servers 是一堆容器。
容器的主机名不变,但其 ip 可能发生变化。
我希望在容器 ip 发生变化时,无需变更 nginx 的配置。
实现
直接上代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
map $x $backend {
1 server1:12345;
2 server2:12345;
3 server3:12345;
default backupserver:12345;
}
server {
listen 7777;
location /d {
resolver 114.114.114.114 valid=60s ipv6=off;
set_by_lua_block $x { return math.random(3) }
proxy_pass http://$backend;
}
}
|
做一下性能测试
静态 upstream
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
$ ./wrk --latency -d 1m -t 10 -c 100 http://127.0.0.1:7777/s
Running 1m test @ http://127.0.0.1:7777/s
10 threads and 100 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 5.93ms 5.66ms 177.31ms 97.39%
Req/Sec 1.85k 238.42 2.30k 69.12%
Latency Distribution
50% 5.16ms
75% 5.85ms
90% 7.06ms
99% 27.34ms
1105047 requests in 1.00m, 188.59MB read
Non-2xx or 3xx responses: 1105047
Requests/sec: 18412.50
Transfer/sec: 3.14MB
|
动态 upstream
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
$ ./wrk --latency -d 1m -t 10 -c 100 http://127.0.0.1:7777/d
Running 1m test @ http://127.0.0.1:7777/d
10 threads and 100 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 6.33ms 3.98ms 101.19ms 96.57%
Req/Sec 1.68k 185.44 2.27k 77.58%
Latency Distribution
50% 5.73ms
75% 6.46ms
90% 7.28ms
99% 25.91ms
1005401 requests in 1.00m, 171.58MB read
Non-2xx or 3xx responses: 1005401
Requests/sec: 16751.96
Transfer/sec: 2.86MB
|
玩得开心 :)
-EOF-