nginx代理上下线,停服
Nginx代理组一般有2个nginx服务器,互为主备。
对某一个应用服务的启动、停止、重启,这几个过程都涉及Nginx的上下线。
很显然,运维平台中,在对某一个服务进行停止的操作中,大致过程如下:
1、将服务下线:代理组2个nginx都要下线,调用nginx的下线接口即可;此外,应该在下线后,检测服务是否真的下线成功。
2、将所有服务器上该服务都给停止。
按照这个逻辑,很可能写出代码:
for nginx in nginx_list:
# 1、获取该nginx上所代理该服务的服务器列表
for server in server_list:
# 2、对每个服务器进行:下线->停服务
这隐藏问题:
1、比如,Nginx1 在svr1下线---停服务 的时候,此时,nginx2还是没有下线的,这样会导致,nginx2过来的请求还是直接代理到该服务器,客户端会报错的。而且当服务器数量较多的时候,内循环操作时间较长,那么走nginx2过来的请求,都会收到报错响应。
2、现在,Nginx1 代理的服务器都停止完了,Nginx 2也重复下线---停服务 这个动作,你会发现,下线没毛病,但是服务又被停止了一次。。。。。。
3、如果是启动服务,那么是启动服务----上线的操作流程。这样你会发现,服务同样会被启动多1次。
如何解决这个问题呢???
可以用下图来有个直观的认识:
很简单,把上面代码的内外循环调过来:
for server in server_list:
# 外循环为服务器列表
for nginx in nginx_list:
# 对每个nginx进行下线,停服务操作
pass
这样做的逻辑为,每个服务器依次下线----停服务,内循环为nginx列表,对一个svr 1 的操作中,将其从代理组的两个nginx中都先下线了,然后再停止服务。
暂时先写到这里吧。后续有心得再补充。
启动服务: 启动服务---- 上线
停止服务:下线 ---- 停止服务
重启服务:下线----停止服务----启动服务----上线