1 什么是nginx平滑升级?
- nginx平滑升级是为了防止需要停止掉nginx服务导致服务不可用而提出的功能,即可以在不停止服务器的情况下,升级nginx的版本
2 实验目的
- 在不关闭服务情况下
(1)把nginx从nginx-1.18.0升级到nginx-1.19.1
(2)如果将nginx升级之后,发现新版本的nginx有不完善的地方,实现版本的回退
3 实验前的准备
3.1 当前nginx的版本(旧)
nginx -v ##查看nginx程序的版本
curl -I localhost ##查看提供服务的nginx版本
3.2 新版本的nginx
(1)下载nginx新版本软件
-
进入新版本nginx的目录:cd nginx-1.19.1/
-
编辑目录下的文件:
vim auto/cc/gcc
,注释debug这两行,去掉 debug 模式编译,编译以后程序只有几百 k
-
配置:
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-threads --with-file-aio --with-http_stub_status_module
注意: 编译新版本nginx所用的参数必须和编译老版本nginx所用的参数一致 -
编译:
make
(2)备份原程序:
cd /usr/local/lnmp/nginx/sbin
cp nginx nginx.old
(3)拷贝新程序:\cp -f /root/nginx-1.19.1/objs/nginx /usr/local/lnmp/nginx/sbin
4 升级新程序
(1)获取当前nginx主进程pid
[root@server1 sbin]# ps ax |grep nginx ##获取当前nginx主进程pid:
6926 ? Ss 0:00 nginx: master process nginx
6927 ? S 0:00 nginx: worker process
6928 ? S 0:00 nginx: worker process
6943 pts/0 S+ 0:00 grep --color=auto nginx
(2)升级新程序
[root@server1 sbin]# kill -USR2 6926
[root@server1 sbin]# ps ax |grep nginx
6926 ? Ss 0:00 nginx: master process nginx
6927 ? S 0:00 nginx: worker process
6928 ? S 0:00 nginx: worker process
6944 ? S 0:00 nginx: master process nginx
6945 ? S 0:00 nginx: worker process
6946 ? S 0:00 nginx: worker process
6948 pts/0 S+ 0:00 grep --color=auto nginx
(3)关闭原worker进程但保留主进程:为了回退
[root@server1 sbin]# kill -WINCH 6926
[root@server1 sbin]# ps ax |grep nginx
6926 ? Ss 0:00 nginx: master process nginx
6944 ? S 0:00 nginx: master process nginx
6945 ? S 0:00 nginx: worker process
6946 ? S 0:00 nginx: worker process
6950 pts/0 S+ 0:00 grep --color=auto nginx
(4)查看nginx是否升级成功
- 当前提供nginx服务的版本:
curl -I localhost
5 版本回退
(1)将老版本的nginx程序还原: \cp -f nginx.old nginx
nginx -v ##查看nginx程序的版本
curl -I localhost ##查看提供服务的nginx版本
(2)唤醒原进程: kill -HUP pid(原)
[root@server1 sbin]# kill -HUP 6926
[root@server1 sbin]# ps ax |grep nginx
6926 ? Ss 0:00 nginx: master process nginx
6944 ? S 0:00 nginx: master process nginx
6945 ? S 0:00 nginx: worker process
6946 ? S 0:00 nginx: worker process
6966 ? S 0:00 nginx: worker process
6967 ? S 0:00 nginx: worker process
6969 pts/0 S+ 0:00 grep --color=auto nginx
(3)回收新版本的worker进程: kill -WINCH pid(新)
[root@server1 sbin]# kill -WINCH 6944
[root@server1 sbin]# ps ax |grep nginx
6926 ? Ss 0:00 nginx: master process nginx
6944 ? S 0:00 nginx: master process nginx
6966 ? S 0:00 nginx: worker process
6967 ? S 0:00 nginx: worker process
6971 pts/0 S+ 0:00 grep --color=auto nginx
[root@server1 sbin]# ps ax |grep nginx
6926 ? Ss 0:00 nginx: master process nginx
6944 ? S 0:00 nginx: master process nginx
6966 ? S 0:00 nginx: worker process
6967 ? S 0:00 nginx: worker process
6973 pts/0 S+ 0:00 grep --color=auto nginx
(4)关闭新版本主进程: kill -QUIT pid(新)
[root@server1 sbin]# kill -QUIT 6944
6926 ? Ss 0:00 nginx: master process nginx
6966 ? S 0:00 nginx: worker process
6967 ? S 0:00 nginx: worker process
6973 pts/0 S+ 0:00 grep --color=auto nginx
(5)检查版本是否回退成功
nginx -v ##查看nginx程序的版本
curl -I localhost ##查看提供服务的nginx版本