RTMP/Build/nginx/conf/EBLB/upstream_EBLB_with_IWCP.txt

50 lines
2.2 KiB
Plaintext

2-3-2015: added Inter Worker Communication Protocol to support multiple workers (IWCP)
28-2-2015: updated source
27-2-2015: It works! Commercially sponsored by nginx for Windows, coding by vozlt
EBLB (Elastic Backend Load Balancer)
Upstream status and control, a mod for ngx_http_lua_upstream_module.c
https://github.com/openresty/lua-upstream-nginx-module
Files:
upstreamcontrol.lua Lua code to change upstream peer runtime values
upstreamstatus.lua Lua code to view upstream status (GUI)
upstream_candc.conf nginx config for testing and serve as an example
iworkcomproto.lua Inter Worker Communication Protocol
nb. set 'iwcp_debug = nil' to log only iwcp messages/results
-----
Place .conf/.lua files in nginx/conf
run example : nginx -c ./conf/upstream_candc.conf
http view : http://127.0.0.1/upstreamstatus
curl : curl -i "http://127.0.0.1/upstreamcontrol?down=true&peer=0&stream=luaupstfoo"
curl : curl -i "http://127.0.0.1/upstreamcontrol?addr=192.168.169.9&peer=0&stream=luaupstfoo"
curl : curl -i "http://127.0.0.1/upstreamcontrol?addr=192.168.169.2:85&peer=0&stream=luaupstfoo"
NB. either use allow/deny for management IP addresses or auth_basic to prevent someone else from
changing your upstreams.
Issues:
1. To change the port add it to the addr field, don't use total value larger then set in your
nginx.conf file! (always use IP address:port in your upstreams)
2. Ipv6 not tested
see also https://groups.google.com/forum/#!topic/openresty-en/wt_9m7GvROg (links to c source)
Use cases:
1. Create a large number of upstream servers in one upstream block, set 75% as down and
switch numbers online as needed.
2. Move large attacks on a upstream to a part of the pool configured to deal with this.
3. Allow script access (curl) when a server is going down mark it down via it's shutdown script.
4. Take backends down while maintenance is being done and back up with a single click
or script.
5. Scale the number of backends (down/up) based on external monitoring.
6. Swap servers between upstreams by changing their ip address.
Why not via DNS resolving?
DNS can be too slow, not under your control, not allowing changes, remote DNS can go offline,
not fast enough when redirecting attacks, etc...