当前位置: 首页 > news >正文

企业架构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.lryc.cn/news/152682.html

相关文章:

  • [国产MCU]-W801开发实例-I2C控制器
  • 植物根系基因组与数据分析
  • 2.3 数据模型
  • RT-Thread 中断管理学习(一)
  • 学习周报9.3
  • win10 查看指定进程名的端口号
  • 函数的递归调用
  • 李宏毅机器学习笔记:RNN循环神经网络
  • 基于JavaWeb和mysql实现校园订餐前后台管理系统(源码+数据库)
  • CNN 01(CNN简介)
  • AI大模型的使用-让AI帮你写单元测试
  • vscode调教配置:快捷修复和格式化代码
  • pear admin 后端启动
  • C++:输出系统时间(及报错处理)
  • 使用Windbg动态调试排查软件启动不了的问题
  • Swift 技术 视频播放器滚动条(源码)
  • PixelSNAIL论文代码学习(2)——门控残差网络的实现
  • WebGPU学习(9)---使用Pipeline Overridable Constants
  • javaweb入门版学生信息管理系统-增删改查+JSP+Jstl+El
  • 云原生Kubernetes:K8S概述
  • nmap的使用
  • Python爬虫-某网酒店数据
  • 了解atoi和offsetof
  • 命令行编译VS工程
  • Linux防火墙命令
  • 大数据平台数据脱敏是什么意思?有哪些方案?
  • 前后端分离不存在会话,sessionid不一致问题
  • Python 3+ 安装及pip配置
  • StarRocks入门到熟练
  • Zabbix Api监控项值推送:zabbix_sender