博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
nginx 不中断服务 平滑升级
阅读量:4286 次
发布时间:2019-05-27

本文共 3420 字,大约阅读时间需要 11 分钟。

可以在不中断服务的情况下 - 新的请求也不会丢失,使用新的 nginx 可执行程序替换旧的(当升级新版本或添加/删除服务器模块时)。

首先,使用新的可执行程序替换旧的(最好做好备份),然后,发送 USR2 (kill -USR2 pid)信号给主进程:

#kill -USR2 15023

主进程将重命名它的进程文件 .pid 文件为 .oldbin (比如:/usr/local/nginx/logs/nginx.pid.oldbin),然后执行新的可执行程序,依次启动新的主进程和新的工作进程:

# ll /usr/local/nginx/total 5136drwx------. 2 nobody root       6 May  9 05:51 client_body_temp-rw-r--r--. 1 root   root    1077 May  9 05:50 fastcgi.conf-rw-r--r--. 1 root   root    1077 May  9 05:50 fastcgi.conf.default-rw-r--r--. 1 root   root    1007 May  9 05:50 fastcgi_params-rw-r--r--. 1 root   root    1007 May  9 05:50 fastcgi_params.defaultdrwx------. 2 nobody root       6 May  9 05:51 fastcgi_tempdrwxr-xr-x. 2 root   root      38 May  9 05:50 html-rw-r--r--. 1 root   root    2837 May  9 05:50 koi-utf-rw-r--r--. 1 root   root    2223 May  9 05:50 koi-windrwxr-xr-x. 2 root   root      39 May  9 05:51 logs-rw-r--r--. 1 root   root    3957 May  9 05:50 mime.types-rw-r--r--. 1 root   root    3957 May  9 05:50 mime.types.default-rwxr-xr-x. 1 root   root 5187458 May  9 05:50 nginx-rw-r--r--. 1 root   root    2656 May  9 05:50 nginx.conf-rw-r--r--. 1 root   root    2656 May  9 05:50 nginx.conf.default-rw-r--r--. 1 root   root       6 May  9 19:32 nginx.pid-rw-r--r--. 1 root   root       6 May  9 19:28 nginx.pid.oldbin                 #这里drwx------. 2 nobody root       6 May  9 05:51 proxy_temp-rw-r--r--. 1 root   root     636 May  9 05:50 scgi_params-rw-r--r--. 1 root   root     636 May  9 05:50 scgi_params.defaultdrwx------. 2 nobody root       6 May  9 05:51 scgi_temp-rw-r--r--. 1 root   root     664 May  9 05:50 uwsgi_params-rw-r--r--. 1 root   root     664 May  9 05:50 uwsgi_params.defaultdrwx------. 2 nobody root       6 May  9 05:51 uwsgi_temp# ps -ef | grep nginxroot      15023      1  0 19:28 ?        00:00:00 nginx: master process /usr/local/nginx/nginx      #原进程nobody    15027  15023  0 19:28 ?        00:00:00 nginx: worker processroot      15130  15023  0 19:32 ?        00:00:00 nginx: master process /usr/local/nginx/nginx          #新进程nobody    15131  15130  0 19:32 ?        00:00:00 nginx: worker processroot      15137  14935  0 19:32 pts/1    00:00:00 grep --color=auto nginx

在这时,两个 nginx 实例会同时运行,一起处理输入的请求。

要逐步停止旧的实例,你必须发送 WINCH 信号给旧的主进程,然后,它的工作进程就将开始从容关闭:

#kill -WINCH 15023# ps -ef | grep nginxroot      15023      1  0 19:28 ?        00:00:00 nginx: master process /usr/local/nginx/nginx nobody    15027  15023  0 19:28 ?        00:00:00 nginx: worker process is shuting down (nginx)  root 15130 15023 0 19:32 ? 00:00:00 nginx: master process /usr/local/nginx/nginxnobody 15131 15130 0 19:32 ? 00:00:00 nginx: worker process 一段时间后,旧的工作进程处理了所有已连接的请求后退出,就仅由新的工作进程来处理输入的请求了: ps -ef | grep nginxroot      15023      1  0 19:28 ?        00:00:00 nginx: master process /usr/local/nginx/nginxroot      15130  15023  0 19:32 ?        00:00:00 nginx: master process /usr/local/nginx/nginxnobody    15131  15130  0 19:32 ?        00:00:00 nginx: worker processroot      15176  14935  0 19:35 pts/1    00:00:00 grep --color=auto nginx 这时,因为旧的服务器还尚未关闭它监听的套接字,所以,通过下面的几步,你仍可以恢复旧的服务器: 1)发送 HUP 信号给旧的主进程 - 它将在不重载配置文件的情况下启动它的工作进程 # kill -HUP 15023 2)发送 QUIT 信号给新的主进程,要求其从容关闭其工作进程 #kill -QUIT 15130 3)如果新主进程还没退出,发送 TERM 信号给新的主进程,迫使其退出 #kill -TERM 15130 4)如果因为某些原因新的工作进程不能退出,向其发送 KILL 信号 #kill -9 15130 新的主进程退出后,旧的主进程会由移除 .oldbin 前缀,恢复为它的 .pid 文件,这样,一切就都恢复到升级之前了。 如果尝试升级成功,而你也希望保留新的服务器时,发送 QUIT 信号给旧的主进程使其退出而只留下新的服务器运行:#kill -QUIT 15023

转载地址:http://ldxgi.baihongyu.com/

你可能感兴趣的文章
C语言socket编程总结(一)getaddrinfo()函数详解
查看>>
C语言socket编程总结(二) inet_pton,/inet_ntop
查看>>
C语言socket编程总结(三) struct sockaddr_in /struct sockaddr_in6/struct addrinfo 结构体
查看>>
C语言socket总结(四)htonl/ntohl/ntohs/ntohs/
查看>>
C 语言socket编程基础/memset()
查看>>
C语言socket总结(五) memset()和bzero()
查看>>
C语言socket编程总结(六) / int socket(int domain, int type, int protocol)
查看>>
C语言socket编程总结(七)int socket/connect()/send()/recv()/close()/shutdown()/recvfrom
查看>>
C语言socket编程总结(八)bind()
查看>>
C语言socket编程(九)listen()
查看>>
C语言socket编程(十)a'c'cept()
查看>>
C语言socket编程(十一)CFNetworking框架/CFSocket////CFStream属于CoreFoundation
查看>>
java 基础IO/inputStream/outputStream/buffInputStrem/buffOutputStrem
查看>>
java 多线程一
查看>>
java基础/IO流/、序列化和反序列化、浅复制和深复制
查看>>
java基础/IO流(二)
查看>>
java/多线程二
查看>>
java/设计原则
查看>>
java/GUI 编程
查看>>
java/socket编程
查看>>