首页 > 其他 > 详细

nginx动态负载upstream三种方案

时间:2016-04-08 02:06:42      阅读:2102      评论:0      收藏:0      [点我收藏+]

? ? ? ?项目背景:

? ? ? ? 链路流程: vip?>nginx>upstream>server>ip+port
? ? ? ?1.目前还没做路由功能,分组是按服务器分组(不是按用户分组),分组发布过程一个队列形式,这里提供自定义规则切换服upstrem。
? ? ? ? 2.不管是全量发布,分组发布,快速发布,lb只做一件事:切换upstream(running_upstream与standy_upstream)。
?
方案一:模块fly操作upstream,web方式增删查改
? ? ? ?
bubuko.com,布布扣
?
?
bubuko.com,布布扣
无drop重启nginx ??
?
kill?-HUP?`cat?/data/nginx/logs/nginx.pid`?
?
#!/bin/sh?
BASE_DIR=‘/usr/local/‘?
${BASE_DIR}nginx/sbin/nginx?-t?-c?${BASE_DIR}nginx/conf/nginx.
conf?
>&?${BASE_DIR}nginx/logs/nginx.start?
info=`cat?${BASE_DIR}nginx/logs/nginx.start`?
if?[?`echo?$info?|?grep?-c?"syntax?is?ok"?`?-eq?1?];?then?
if?[?`ps?aux|grep?"nginx"|grep?-c?"master"`?==?1?];?then?
kill?-HUP?`cat?${BASE_DIR}nginx/logs/nginx.pid`?
echo?"ok"?
else?
killall?-9?nginx?
sleep?1?
${BASE_DIR}nginx/sbin/nginx?
fi?
else?
echo?"########?error:?########"?
cat?${BASE_DIR}nginx/logs/nginx.start?
fi?
?
?
?
方案二:模块ngx_dynamic_upstream,api+python方式
?
因为api接口操作不是太直观,在django上以web方式增删查改upstream ?
?

HTTP APIs

You can operate upstreams dynamically with HTTP APIs.

list

$ curl "http://127.0.0.1:6000/dynamic?upstream=zone_for_backends"
server 127.0.0.1:6001;
server 127.0.0.1:6002;
server 127.0.0.1:6003;
$

verbose

$ curl "http://127.0.0.1:6000/dynamic?upstream=zone_for_backends&verbose="
server 127.0.0.1:6001 weight=1 max_fails=1 fail_timeout=10;
server 127.0.0.1:6002 weight=1 max_fails=1 fail_timeout=10;
server 127.0.0.1:6003 weight=1 max_fails=1 fail_timeout=10;
$

update_parameters

$ curl "http://127.0.0.1:6000/dynamic?upstream=zone_for_backends&server=127.0.0.1:6003&weight=10&max_fails=5&fail_timeout=5"
server 127.0.0.1:6001 weight=1 max_fails=1 fail_timeout=10;
server 127.0.0.1:6002 weight=1 max_fails=1 fail_timeout=10;
server 127.0.0.1:6003 weight=10 max_fails=5 fail_timeout=5;
$

The supported parameters are blow.

  • weight
  • max_fails
  • fail_timeout

down

$ curl "http://127.0.0.1:6000/dynamic?upstream=zone_for_backends&server=127.0.0.1:6003&down="
server 127.0.0.1:6001 weight=1 max_fails=1 fail_timeout=10;
server 127.0.0.1:6002 weight=1 max_fails=1 fail_timeout=10;
server 127.0.0.1:6003 weight=1 max_fails=1 fail_timeout=10 down;
$

up

$ curl "http://127.0.0.1:6000/dynamic?upstream=zone_for_backends&server=127.0.0.1:6003&up="
server 127.0.0.1:6001 weight=1 max_fails=1 fail_timeout=10;
server 127.0.0.1:6002 weight=1 max_fails=1 fail_timeout=10;
server 127.0.0.1:6003 weight=1 max_fails=1 fail_timeout=10;
$

add

$ curl "http://127.0.0.1:6000/dynamic?upstream=zone_for_backends&add=&server=127.0.0.1:6004"
server 127.0.0.1:6001;
server 127.0.0.1:6002;
server 127.0.0.1:6003;
server 127.0.0.1:6004;
$

remove

$?curl?"http://127.0.0.1:6000/dynamic?upstream=zone_for_backends&remove=&server=127.0.0.1:6003"
server?127.0.0.1:6001;
server?127.0.0.1:6002;
server?127.0.0.1:6004;
?
reference:
?
?
?
?
方案三:lua(lua_code_cache)热装载+upstream
?
简说热装载(热加载) :lua代码产生变更,利用lua_code_cache on ,实现自动加载,不用reload nginx。
?
?
?
?
?
reference:
?

nginx动态负载upstream三种方案

原文:http://hugoren.iteye.com/blog/2289411

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!