nginx代理上下线,停服

Nginx代理组一般有2个nginx服务器,互为主备。

对某一个应用服务的启动、停止、重启,这几个过程都涉及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次。

如何解决这个问题呢???

可以用下图来有个直观的认识:

nginx代理上下线,停服

很简单,把上面代码的内外循环调过来:

for server in server_list:
    # 外循环为服务器列表
    for nginx in nginx_list:
        # 对每个nginx进行下线,停服务操作
        pass

这样做的逻辑为,每个服务器依次下线----停服务,内循环为nginx列表,对一个svr 1 的操作中,将其从代理组的两个nginx中都先下线了,然后再停止服务。

 

暂时先写到这里吧。后续有心得再补充。

启动服务: 启动服务---- 上线

停止服务:下线 ---- 停止服务

重启服务:下线----停止服务----启动服务----上线