0.动态upstream的好处
openresty作者,最近也要开源(在我编写此文章时还没开源)他们已经使用的balancer-by-lua 特性,进展issues。能动态修改upstream,使用反向代理proxy_pass, 对后端进程或机器进行:
- 动态的负载均衡控制;
- 平滑上下线服务,升级服务;
- 高可能保证–自动踢离线服务下线;
1.先说原理
想法参考自<http://sosedoff.com/2012/06/11/dynamic-nginx-upstreams-with-lua-and-redis.html>。此文章的做法是写进redis中,好处是能多机同时切换,不足是论询redis太频繁。基于openresty,使用lua的控制一个内存中的一个多进程全局变量(ngx.shard),按需地变改proxy_pass的目标upsteam。
2 直接上配置代码
http{
lua_shared_dict _G 1m; # ngx多进程全局共享内存,保存upstream值
......
upstream default_upstream {
server unix:/var/run/app-1.so