nginx dynamic mange upstream
This project is maintained by wangfakang
nginx动态upstream管理方案:
1.使用我们组内在agentzh的ngx_lua_upstream_module基础上开发的lua_upstream_module.
2.使用agentzh开发饿balancer_by_lua指令,该指令在前面博客简单剖析过.
3.使用tengine的dyups模块.
综合上述问题可以择优选择,下面介绍新浪二次开发的lua_upstream_module.
当nginx作为七层进行负载均衡的时候,由于扩容或者缩容的时候都得手工的在nginx的配置文件中upstream指令中去增加 或者删除机器server,然后进行reload使得nginx重新加载新的配置文件.那么这样就会越到几个问题:
提供下列REST HTTP接口,形如"127.0.0.1:80/action=${opreation_name}&args=${operation_args}":
1.给upstream中server增加一个server
http://localhost:port/dyups_admin/?action=add_server&upstream=bar&ip=127.0.0.1&port=81&weight=2&maxfails=2&failtimeout=10&backup=false
其中参数说明:
2.给upstream中后端peer增加一个server
http://localhost:port/dyups_admin/?action=add_peer&upstream=bar&ip=127.0.0.1&port=81
其中参数说明:
3.删除upstream中server的一个server
http://localhost:port/dyups_admin/?action=remove_server&upstream=bar&ip=127.0.0.1&port=81
其中参数说明:
4.删除upstream中后端peer的一个server
http://localhost:port/dyups_admin/?action=remove_peer&upstream=bar&ip=127.0.0.1&port=81
其中参数说明:
5.查看upstream中的servers信息
http://localhost:port/dyups_admin/?action=get_serves
其中参数说明:
6.查看upstream中后端peer的servers信息
http://localhost:port/dyups_admin/?action=get_primary_peers
其中参数说明:
7.查看指定机器nginx的upetreams信息
http://localhost:port/dyups_admin/?action=get_upstreams
其中参数说明:
8.查看upstream中后备servers信息
http://localhost:port/dyups_admin/?action=get_backup_peers
其中参数说明:
9.设置后端server的weight值
http://localhost:port/dyups_admin/?action=set_peer_weight&upstream=bar&backup=false&id=0&value=3
其中参数说明:
10.设置后端server状态为down or up
http://localhost:port/dyups_admin/?action=set_peer_down&upstream=bar&backup=false&id=0&value=true
其中参数说明:
11.增加一个upstream为指定nginx
http://localhost:port/dyups_admin/?action=add_upstream&upstream=new_bar&servers=server 127.0.0.1:81;server 127.0.0.1:82;
其中参数说明:
注意:
最少要有一个server,若新增加的upstream的名字是nginx中已经有的upstream,则会覆盖调旧的upstream信息.注意:
其中servers字段不同的server之间要使用分号";"隔开.12.删除一个upstream给指定nginx
http://localhost:port/dyups_admin/?action=remove_upstream&upstream=new_bar
其中参数说明:
上述使用方法都是使用的rest http的方式,其http响应结果是json字符串形如:
curl "127.0.0.1:8045/admin/?action=add_server&upstream=bar&ip=127.0.0.1&port=82"
{
"code": 200,
"data": "add_server success"
}
curl "http://localhost:port/dyups_admin/?action=get_serves"
{
"code": 200,
"data": {
"bar": [
{
"addr": "127.0.0.1:80",
"fail_timeout": 10,
"max_fails": 1,
"weight": 1
},
{
"addr": "127.0.0.1:81",
"fail_timeout": 10,
"max_fails": 1,
"weight": 1
}
]
}
}
其中json的结构总共分为2个字段:
add_server
和add_peer
两个操作的解析:add_peer
之前一定要执行add_server
操作.在使用中有任何问题,欢迎反馈给我,可以用以下联系方式跟我交流