Nginx热部署如何实现

Nginx热部署如何实现

小编给大家分享一下Nginx热部署如何实现,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

关闭防火墙,让本地可以通过浏览器访问Nginx服务。

[root@localhost~]#systemctlstopfirewalld

信号量

查看信号量:

[root@localhost~]#kill-l1)SIGHUP2)SIGINT3)SIGQUIT4)SIGILL5)SIGTRAP6)SIGABRT7)SIGBUS8)SIGFPE9)SIGKILL10)SIGUSR111)SIGSEGV12)SIGUSR213)SIGPIPE14)SIGALRM15)SIGTERM16)SIGSTKFLT17)SIGCHLD18)SIGCONT19)SIGSTOP20)SIGTSTP21)SIGTTIN22)SIGTTOU23)SIGURG24)SIGXCPU25)SIGXFSZ26)SIGVTALRM27)SIGPROF28)SIGWINCH29)SIGIO30)SIGPWR31)SIGSYS34)SIGRTMIN35)SIGRTMIN+136)SIGRTMIN+237)SIGRTMIN+338)SIGRTMIN+439)SIGRTMIN+540)SIGRTMIN+641)SIGRTMIN+742)SIGRTMIN+843)SIGRTMIN+944)SIGRTMIN+1045)SIGRTMIN+1146)SIGRTMIN+1247)SIGRTMIN+1348)SIGRTMIN+1449)SIGRTMIN+1550)SIGRTMAX-1451)SIGRTMAX-1352)SIGRTMAX-1253)SIGRTMAX-1154)SIGRTMAX-1055)SIGRTMAX-956)SIGRTMAX-857)SIGRTMAX-758)SIGRTMAX-659)SIGRTMAX-560)SIGRTMAX-461)SIGRTMAX-362)SIGRTMAX-263)SIGRTMAX-164)SIGRTMAX

64种信号量,以下是几种常用的信号量:

  • SIGINTSIGTERM:快速关闭。

  • SIGQUIT:从容关闭(优雅的关闭进程,即等请求结束后再关闭)。

  • SIGHUP:平滑重启,重新加载配置文件 (平滑重启,修改配置文件之后不用重启服务器)。

  • SIGUSR1 :重新读取日志文件,在切割日志文件时用途较大。

  • SIGUSR2:平滑升级可执行程序 ,nginx升级时候用。

  • SIGWINCH :从容关闭工作进程。

Nginx热部署

Nginx是一个多进程的高性能反向代理服务器,包含一个master进程和多个worker进程(worker进程的数量可以通过nginx.conf配置文件中的worker_processes参数进行设置,默认1个),这样可以充分利用多核处理器。


默认1worker进程。


并且master进程和worker进程是父子进程关系。

Nginx工作模式为多进程,Nginx在启动之后会有一个master进程和多个worker进程(默认1个),多个worker子进程将监听master父进程监听的端口(参考父子进程的关系),并行处理请求。master父进程主要用来管理worker子进程(管理真正提供服务的worker进程,向worker进程发送信号,监控worker进程的运行状态,当worker进程异常退出后,会重新启动新的worker进程),读取并验证配置信息,master进程不会对用户请求提供服务,而用户请求是由worker进程进行处理。

Nginx是通过信号量来控制,比如停止和重启Nginx。信号量是进程间通信的一种机制,master主进程控制多个worker子进程,也是通过信号量。


现在来演示Nginx是怎么实现热部署的,博主通过修改Nginx的配置文件来模拟Nginx的升级(先copy一份副本)。

[root@localhost~]#cd/usr/local/nginx/conf/[root@localhostconf]#ll总用量68-rw-r--r--.1rootroot107712月2020:24fastcgi.conf-rw-r--r--.1rootroot107712月2020:24fastcgi.conf.default-rw-r--r--.1rootroot100712月2020:24fastcgi_params-rw-r--r--.1rootroot100712月2020:24fastcgi_params.default-rw-r--r--.1rootroot283712月2020:24koi-utf-rw-r--r--.1rootroot222312月2020:24koi-win-rw-r--r--.1rootroot523112月2020:24mime.types-rw-r--r--.1rootroot523112月2020:24mime.types.default-rw-r--r--.1rootroot265612月2021:26nginx.conf-rw-r--r--.1rootroot265612月2020:24nginx.conf.default-rw-r--r--.1rootroot63612月2020:24scgi_params-rw-r--r--.1rootroot63612月2020:24scgi_params.default-rw-r--r--.1rootroot66412月2020:24uwsgi_params-rw-r--r--.1rootroot66412月2020:24uwsgi_params.default-rw-r--r--.1rootroot361012月2020:24win-utf[root@localhostconf]#cpnginx.confnginx_old.conf[root@localhostconf]#vimnginx.conf

由于还没有给Nginx进行热部署,现在访问http://192.168.1.199/还是原来的Nginx页面。


查看Nginx的进程:

[root@localhostconf]#ps-ef|grepnginxroot149641022:25?00:00:00nginx:masterprocess./nginxnobody1496514964022:25?00:00:00nginx:workerprocessroot150161521023:07pts/000:00:00grep--color=autonginx

master进程发送SIGUSR2信号,让Nginx平滑升级可执行程序。可以看到Nginx重新启动了一组master进程和worker进程,而新master进程是旧master进程的子进程(通过父子进程的继承关系,新master进程可以很方便地继承旧master进程的相关资源)。

[root@localhostconf]#kill-sSIGUSR214964[root@localhostconf]#ps-ef|grepnginxroot149641022:25?00:00:00nginx:masterprocess./nginxnobody1496514964022:25?00:00:00nginx:workerprocessroot1501914964023:18?00:00:00nginx:masterprocess./nginxnobody1502015019023:18?00:00:00nginx:workerprocessroot150221521023:19pts/000:00:00grep--color=autonginx

并且Nginx在日志目录中存储了新旧pid文件(保存了新旧master进程的ID)。

[root@localhostconf]#ll../logs总用量16-rw-r--r--.1rootroot272912月2023:20access.log-rw-r--r--.1rootroot70812月2023:18error.log-rw-r--r--.1rootroot612月2023:18nginx.pid-rw-r--r--.1rootroot612月2022:25nginx.pid.oldbin[root@localhostconf]#cat../logs/nginx.pid15019[root@localhostconf]#cat../logs/nginx.pid.oldbin14964

给旧master进程发送SIGWINCH信号,让旧master进程关闭旧worker进程。

[root@localhostconf]#kill-sSIGWINCH14964[root@localhostconf]#ps-ef|grepnginxroot149641022:25?00:00:00nginx:masterprocess./nginxroot1501914964023:18?00:00:00nginx:masterprocess./nginxnobody1502015019023:18?00:00:00nginx:workerprocessroot150301521023:27pts/000:00:00grep--color=autonginx

现在访问http://192.168.1.199/,会响应404


而访问http://192.168.1.199/nacos,会访问到Nacos服务。


如果升级版本没有问题,就可以给旧master进程发送SIGQUIT信号,让旧master进程关闭,这样就只剩下新master进程和新worker进程,实现了Nginx的热部署。

[root@localhostconf]#kill-sSIGQUIT14964[root@localhostconf]#ps-ef|grepnginxroot150191023:18?00:00:00nginx:masterprocess./nginxnobody1502015019023:18?00:00:00nginx:workerprocessroot150341521023:31pts/000:00:00grep--color=autonginx

如果升级版本有问题,需要回滚到之前的版本,就可以给旧master进程发送SIGHUP信号,因为博主重新进行了测试,所以进程号都变了,但很显然旧master进程重新创建了旧worker进程,并且进行版本升级的masterworker进程没有被关闭。

[root@localhostconf]#kill-sSIGHUP15084[root@localhostconf]#ps-ef|grepnginxroot150841012月20?00:00:00nginx:masterprocess./nginxroot1510615084012月20?00:00:00nginx:masterprocess./nginxnobody1510715106012月20?00:00:00nginx:workerprocessnobody1513115084000:02?00:00:00nginx:workerprocessroot151411521000:09pts/000:00:00grep--color=autonginx

给新master进程发送SIGQUIT信号,让新master进程关闭,这样就只剩下旧master进程和新创建的旧worker进程,实现了回滚。

[root@localhostconf]#kill-sSIGQUIT15106[root@localhostconf]#ps-ef|grepnginxroot150841012月20?00:00:00nginx:masterprocess./nginxnobody1513115084000:02?00:00:00nginx:workerprocessroot151591521000:25pts/000:00:00grep--color=autonginx

回滚成功。


还需要对版本回滚(即博主这里的配置文件回滚,不然下次重启就会出问题)。

[root@localhostconf]#cp-fnginx_old.confnginx.confcp:是否覆盖"nginx.conf"?y

为什么给旧master进程发送SIGHUP信号,旧master进程重新创建的worker进程没有重新读取配置文件?下面是官方的说明:

Send the HUP signal to the old master process. The old master process will start new worker processes without re-reading the configuration. After that, all new processes can be shut down gracefully, by sending the QUIT signal to the new master process.

向旧master进程发送SIGHUP信号。旧master进程将启动新worker进程,而无需重新读取配置。之后,通过向新master进程发送SIGQUIT信号,所有新进程都可以正常关闭。

如果不存在新进程的情况下(只有一组masterworker进程),修改配置文件,再向master进程发送SIGHUP信号,看是否会重新加载配置文件。

[root@localhostconf]#kill-sSIGHUP15084

很显然配置文件被重新加载了,由于博主还没有看源码,只能猜测Nginx的实现(如果说错了,请大家评论补充),Nginx应该是根据当前是否在进行热部署(存在新master进程),来决定SIGHUP信号是否需要重新加载配置文件。

以上是“Nginx热部署如何实现”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注恰卡编程网行业资讯频道!

发布于 2022-03-03 21:24:44
收藏
分享
海报
0 条评论
50
上一篇:Python怎么实现推箱子游戏 下一篇:基于JavaScript如何实现除夕烟花秀与随机祝福语
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码