IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> nginx在线热升级 -> 正文阅读

[系统运维]nginx在线热升级

nginx不停机升级

查看原编译参数:

升级一般是添加新的模块,或者升级版本,所以要参考以前编译的模块,把模块信息预编译进去;如果不添加,那么以前的模块就不能使用了

[root@localhost ~]# /usr/local/nginx/sbin/nginx -V

配置/编译/安装

./configure  --prefix=/usr/local/nginx --with-http_stub_status_module

make && make install

#make install会帮助/usr/local/nginx/sbin/nginx替换nginx文件,这时候存在两个二进制文件nginx和nginx.old

生成新的master进程

给正在运行nginx的master进程发送一个信号,告诉master要热部署,做一次版本升级,这个信号是USER2,USER2信号用来传递热部署的信号

kill -USR2 `cat /usr/local/nginx/logs/nginx.pid`

[root@localhost nginx-1.16.0]# ps -ef |grep "[n]ginx"
root 8054 1 0 21:07 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx 8097 8054 0 21:09 ? 00:00:00 nginx: worker process
root 8134 8054 0 21:13 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx 8135 8134 0 21:13 ? 00:00:00 nginx: worker process

#此时Nginx开启一个新的master进程,这个master进程会生成新的worker进程,这就是升级后的Nginx进程,此时老的进程不会自动退出,但是当接收到新的请求不作处理而是交给新的进程处理。

优雅退出老worker进程:

向老的master进程发信号,告诉它关闭其worker进程:

[root@localhost nginx-1.16.0]# kill -WINCH 8054

 

#看到老的worker进程已经退出,老的master进程还在:说明所有的请求已经切换到新升级好的nginx中

[root@localhost nginx-1.16.0]# ps -ef |grep "[n]ginx"
root 8054 1 0 21:07 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
root 8134 8054 0 21:13 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx 8135 8134 0 21:16 ? 00:00:00 nginx: worker process

升级完成

经过一段时间测试,服务器没问题,退出老的master:

[root@localhost nginx-1.16.0]# kill -QUIT 8054

 

[root@localhost nginx-1.16.0]# ps -ef |grep "[n]ginx"

root 8134 1 0 21:24 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx

nginx 8135 8134 0 21:24 ? 00:00:00 nginx: worker process

回滚:升级过程有问题,退回原版本

旧版本的主进程不要kill关闭,以防万一升级失败还可以进行回滚,向老的master进程发送命令,再将新版本关掉。所以第五步的老的master进程是不会自动退出的,保留着,允许我们做版本的回退

重新拉起老的worker进程:

注意回滚是在老master未退出时才能做的
如果完全升级后,需要停止nginx服务,将nginx.old重命名为nginx在启动nginx服务

[root@localhost nginx-1.16.0]# kill -HUP 8054

 

[root@localhost nginx-1.16.0]# ps -ef |grep "[n]ginx"
root 8054 1 0 21:07 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
root 8134 8054 0 21:13 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx 8135 8134 0 21:16 ? 00:00:00 nginx: worker process
nginx 8154 8054 1 21:19 ? 00:00:00 nginx: worker process

退出新的master进程:

 [root@localhost nginx-1.16.0]# kill -QUIT `cat /usr/local/nginx/logs/nginx.pid`

[root@localhost nginx-1.16.0]# ps -ef |grep "[n]ginx"
root 8054 1 0 21:07 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx 8154 8054 0 21:19 ? 00:00:00 nginx: worker process
换回nginx文件
先删除新的nginx二进制文件:

rm -rf /usr/local/nginx/sbin/nginx

还原老的nginx 二进制文件:

mv /usr/local/nginx/sbin/nginx.old /usr/local/nginx/sbin/nginx
  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-03-17 22:37:43  更:2022-03-17 22:39:24 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 1:34:06-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码