企业架构LNMP学习笔记10

1、Nginx版本,在实际的业务场景中,需要使用软件新版本的功能、特性。就需要对原有软件进行升级或重装系统。

Nginx的版本需要升级迭代。那么如何进行升级呢?线上服务器如何升级,我们选择稳定版本。

从nginx的1.14版本升级到nginx的1.16版本。

平滑升级。

信号参数:

信号参数:

kill命令传输信号给进程nginx的主进程。

TERM, INT(快速退出,强制退出,当前的请求不执行完成就退出) -s stop

QUIT (优雅退出,执行完当前的请求后退出) -s quit

HUP重新加载配置文件用新的配置文件启动新worker进程,并优雅的关闭旧的worker进程) -s reload

USR1 (重新打开日志文件) -s reopen

USR2 (平滑的升级nginx二进制文件 拉起一个新的主进程 旧主进程不停止)

WINCH (优雅的关闭worker进程)

我们平滑升级USR2,这个信号要注意下。

以上几个信号命令都是发给nginx的master主进程。

语法:

[root@server01 ~]# ps aux |grep nginx
root        937  0.0  0.1  46156  2100 ?        Ss   09:41   0:00 nginx: master process /usr/local/nginx/sbin/nginx
www       26449  0.0  0.0  46392  1956 ?        S    17:32   0:00 nginx: worker process
root      26474  0.0  0.0 112816   972 pts/0    S+   18:11   0:00 grep --color=auto nginx
[root@server01 ~]# kill -TERM 937
[root@server01 ~]# ps aux |grep nginx
root      26480  0.0  0.0 112812   972 pts/0    S+   18:11   0:00 grep --color=auto nginx

不是所有的软件都支持kill信号方面的内容。要看软件是怎么写出来的。

nginx是支持这几个的。

WINCH:

[root@server01 ~]# ps aux |grep nginx
root      26534  0.0  0.0  46016  1348 ?        Ss   18:13   0:00 nginx: master process /usr/local/nginx/sbin/nginx
www       26539  0.0  0.0  46392  1920 ?        S    18:17   0:00 nginx: worker process
root      26541  0.0  0.0 112812   968 pts/0    S+   18:17   0:00 grep --color=auto nginx
[root@server01 ~]# kill -WINCH 26534
[root@server01 ~]#
[root@server01 ~]# ps aux |grep nginx
root      26534  0.0  0.0  46016  1348 ?        Ss   18:13   0:00 nginx: master process /usr/local/nginx/sbin/nginx
root      26543  0.0  0.0 112812   972 pts/0    S+   18:18   0:00 grep --color=auto nginx
[root@server01 ~]#

我们可以看到worker进程被关闭了。那么这个时候访问页面访问不了。说明worker不工作,nginx就不工作。这个是比较特殊的场景。

[root@server01 ~]# kill -HUP 26534
[root@server01 ~]#
[root@server01 ~]# ps aux |grep nginx
root      26534  0.0  0.1  46152  2064 ?        Ss   18:13   0:00 nginx: master process /usr/local/nginx/sbin/nginx
www       26544  0.0  0.0  46528  1972 ?        S    18:21   0:00 nginx: worker process
root      26546  0.0  0.0 112812   972 pts/0    S+   18:21   0:00 grep --color=auto nginx

我们通过kill -HUP PID命令来重新加载配置文件,启动新的worker进程,优雅地关闭旧的worker进程。

[root@server01 ~]# ps aux |grep mysqld
root        918  0.0  0.0 115544  1696 ?        S    09:41   0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/usr/local/mysql/data --pid-file=/usr/local/mysql/data/server01.pid
mysql      1073  0.0 22.4 968628 454524 ?       Sl   09:41   0:05 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/usr/local/mysql/data/server01.err --pid-file=/usr/local/mysql/data/server01.pid
root      26561  0.0  0.0 112816   972 pts/0    S+   18:25   0:00 grep --color=auto mysqld
[root@server01 ~]# kill -QUIT 918
[root@server01 ~]# ps aux |grep mysqld
root        918  0.0  0.0 115544  1696 ?        S    09:41   0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/usr/local/mysql/data --pid-file=/usr/local/mysql/data/server01.pid
mysql      1073  0.0 22.4 968628 454524 ?       Sl   09:41   0:05 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/usr/local/mysql/data/server01.err --pid-file=/usr/local/mysql/data/server01.pid
root      26563  0.0  0.0 112816   972 pts/0    S+   18:26   0:00 grep --color=auto mysqld
[root@server01 ~]#

我们可以看到-QUIT这个信号,mysqld就不支持。但是php-fpm又支持。

在脚本中,stop对应的kill -QUIT,优雅退出。

重新安装:

1)停止掉服务,删除编译的安装的软件包和源码包;

2)重新解压编译安装即可;

注意:如果需要,请备份配置文件和网站目录里的资源文件。

一些重要的东西,网站文件和配置文件要进行备份。

平滑升级:

升级软件版本之后,需要启动新的版本,启动不了,端口已被占用。

如果直接把旧版本的服务停止掉,会影响线上业务的使用。

最佳解决办法:①旧的不先停掉②新的又可以起来③旧的和新的同时提供服务,旧的请求完成之后,就停掉旧进程-USR2  平滑启动一个进程(平滑升级)-WINCH  优雅的关闭子进程-QUIT   优雅关闭主进程

shell > tar xvf nginx-1.16.0.tar.gz
shell > cd nginx-1.16.0
shell > ./configure  --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module
shell > make && make install

升级新版本,需要把软件的安装路径,指定到旧版本上。

以上操作完成之后,会把原来的旧版本备份为nginx.old

新旧版本同时运行:

kill -USR2 主进程号

停止掉旧进程

查看旧的主进程号,并使用kill -WINCH 优雅的关闭的子进程,再关闭旧的主进程

shell > kill -WINCH 旧的主进程号
shell > kill -QUIT 旧的主进程号

[root@server01 nginx-1.24.0]# cat Makefiledefault:        buildclean:rm -rf Makefile objs.PHONY: default cleanbuild:$(MAKE) -f objs/Makefileinstall:$(MAKE) -f objs/Makefile installmodules:$(MAKE) -f objs/Makefile modulesupgrade:/usr/local/nginx/sbin/nginx -tkill -USR2 `cat /usr/local/nginx/logs/nginx.pid`sleep 1test -f /usr/local/nginx/logs/nginx.pid.oldbinkill -QUIT `cat /usr/local/nginx/logs/nginx.pid.oldbin`

说明:

1)先对配置文件进行测试;

2)然后平滑启动一个新nginx进程。

3)判断下旧进程是否存在;

4)然后再将旧nginx进程进行优雅退出。

在nginx中,默认提供了平滑升级的操作。

#注意先configure  在nginx源码包执行
shell > make install && make upgrade

注意:要make install &&  make upgrade。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/66248.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux系统中驱动入门设备树DTS(经典)

设备树(DTS:device tree source),字面意思就是一块电路板上设备如上图中CPU、DDR、I2C、GPIO、SPI等,按照树形结构描绘成的一棵树。按照策略和功能分离的思路,就是驱动代码(功能)和设备树DTS配置…

软件测试/测试开发丨Selenium 高级控件交互方法

点此获取更多相关资料 本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接:https://ceshiren.com/t/topic/27045 一、使用场景 使用场景对应事件复制粘贴键盘事件拖动元素到某个位置鼠标事件鼠标悬停鼠标事件滚动到某个元素滚动事件使用触控笔点击触控笔事件&am…

IIR滤波器

IIR滤波器原理 IIR的特点是:非线性相位、消耗资源少。 IIR滤波器的系统函数与差分方程如下所示: 由差分方程可知IIR滤波器存在反馈,因此在FPGA设计时要考虑到有限字长效应带来的影响。差分方程中包括两个部分:输入信号x(n)的M节…

Git中smart Checkout与force checkout

Git中smart Checkout与force checkout 使用git进行代码版本管理,当我们切换分支有时会遇到这样的问题: 这是因为在当前分支修改了代码,但是没有commit,所以在切换到其他分支的时候会弹出这个窗口, 提示你选force checkout或者smart checko…

罗勇军 →《算法竞赛·快冲300题》每日一题:“游泳” ← DFS+剪枝

【题目来源】http://oj.ecustacm.cn/problem.php?id1753http://oj.ecustacm.cn/viewnews.php?id1023【题目描述】 游泳池可以等分为n行n列的小区域,每个区域的温度不同。 小明现在在要从游泳池的左上角(1, 1)游到右下角(n, n),小明只能向上下左右四个方…

Redis缓存和持久化

目录 Redis缓存 什么是缓存 缓存更新策略​编辑 业务场景 缓存穿透 常见的解决方案 缓存雪崩 解决方案 缓存击穿 解决方案 Redis持久化 RDB持久化 执行时机 RDB方式bgsave的基本流程 AOF持久化 RDB和AOF的对比​编辑 Redis主从 数据同步原理 总结 Redis缓存 …

2、Nginx 安装

文章目录 2、Nginx 安装2.1 官网下载2.2 安装 nginx2.2.1 第一步2.2.2 第二步2.2.3 第三步,安装 nginx2.2.4 第四步,修改防火漆规则 【尚硅谷】尚硅谷Nginx教程由浅入深 志不强者智不达;言不信者行不果。 2、Nginx 安装 2.1 官网下载 nginx…

新版 Next.js 从入门到入土

本教程用的Next.js 是 13 版本 Next.js 简介 完善的React项目,搭建轻松自带数据同步,解决服务端渲染最大难点丰富的插件灵活配置 创建第一个项目 手动创建 初始化 npm init安装所需要的依赖包 npm install --save react react-don next增加快捷命…

iOS - 资源按需加载 - ODR

一、瘦身技术大图 二、On-Demand Resources 简介 将其保存管理在苹果的服务器,按需使用资源、优化包体积,实现更小的应用程序。ODR 的好处: 应用体积更小,下载更快,提升初次启动速度资源会在后台下载操作系统将会在磁…

openGauss学习笔记-59 openGauss 数据库管理-相关概念介绍

文章目录 openGauss学习笔记-59 openGauss 数据库管理-相关概念介绍59.1 数据库59.2 表空间59.3 模式59.4 用户和角色59.5 事务管理 openGauss学习笔记-59 openGauss 数据库管理-相关概念介绍 59.1 数据库 数据库用于管理各类数据对象,与其他数据库隔离。创建数据…

【数据结构】树和二叉树的概念及结构(一)

目录 一,树的概念及结构 1,树的定义 2,树结点的分类及关系 3,树的表示 二,二叉树的概念及结构 1,二叉树的定义 2,特殊的二叉树 3,二叉树的性质 4,二叉树的存储结构 1&…

无涯教程-Android Intent Standard Extra Data函数

下表列出了各种重要的Android Intent Standard Extra Data。您可以查看Android官方文档以获取额外数据的完整列表- Sr.NoExtra Data & Description1 EXTRA_ALARM_COUNT 用作AlarmManager intents(意图)中的int Extra字段,以告诉正在调用的应用程序intents(意图)释放了多少…

Pnpm,npm,yarn

npm 最初的npm只是简单的通过依赖去递归安装包,所以说每个依赖都会有自己的node_modules,node_modules是嵌套的。一个项目会存在多个包,多个包之间难免会有公共的依赖,node_modules嵌套的话,这样公共依赖就会下载多次。会造成磁盘…

Three.js之层级模型

参考资料 Vector3与模型位置、缩放属性…模型隐藏或显示 知识点 注:基于Three.jsv0.155.0 Group:add()遍历模型树结构、查询模型节点:name、traverse、getObjectByName()本地坐标和世界坐标:getWorldPosition()改变模型相对局…

MQTT异常掉线原因

一、业务场景 我们在使用MQTT协议的时候,有些伙伴可能会遇到MQTT客户端频繁掉线、上线问题 二、原因分析及异常处理 1.原因:使用相同的clientID 方案:全局使用的clientID保证唯一性,可以采用UUID等方式 2.原因: 当前用户没有Top…

Shell文件常用语法

参考链接:https://juejin.cn/post/7249347651787980861 Shell脚本是一种命令语言,可以用于自动化执行各种任务。在脚本中,我们可以通过参数来传递信息,这样脚本就可以根据这些信息来执行特定的操作。本文将介绍如何在shell脚本中…

【数据结构】二叉树篇|超清晰图解和详解:二叉树的序列化和反序列化

博主简介:努力学习的22级计算机科学与技术本科生一枚🌸博主主页: 是瑶瑶子啦每日一言🌼: 你不能要求一片海洋,没有风暴,那不是海洋,是泥塘——毕淑敏 目录 一、核心二、题目2.1:前序遍历2.2&…

【博客701】shell实现保留网络现场:ping失败时执行mtr

shell实现保留网络现场:ping失败时执行mtr 场景 当我们网络出现抖动,到某个目的地ping不通时,我们想知道路径上哪里出现问题时可以在那时候执行mtr并保留下现场以供排查 实现:ping_and_mtr.sh #!/bin/bash# 定义要ping的IP地址列…

x86_64 ansible 源码编译安装

源码 GitHub - ansible/ansible: Ansible is a radically simple IT automation platform that makes your applications and systems easier to deploy and maintain. Automate everything from code deployment to network configuration to cloud management, in a languag…

js常用方法总结

1、slice 和 splice slice表示截取,slice(start,end),不改变原数组,返回新数组。 splice表示删除,splice(start,length,item),会改变原数组,从某个位置开始删除多个元素,并可以插入新的元素。…