nginx 进程结构和高可用,热重载,热升级原理

本文介绍了nginx的进程结构,包括父进程master作为控制器管理和监控子进程worker。每个worker与CPU核数对应并绑定,提高处理效率。master进程内的缓存和共享内存用于优化性能。当worker挂掉时,master会立即启动新worker替换,实现高可用。热重载过程中,新worker在老worker完成已有请求后接管,确保平滑过渡。热升级则涉及新的master启动和旧master的QUIT信号,老master在处理完所有请求后关闭,但不会立即退出,以便必要时回滚。
摘要由CSDN通过智能技术生成

nginx 进程结构图:进程结构
nginx 实际上是一个父进程 下开启多个子进程(之所以不采用多线程模式,因为线程共享同一个地址空间, 当第三方模块引发地址空间段错误,地址越界,会导致进程nginx 挂掉, 违反高可靠性).

  1. 父进程master 只做控制器,做子进程 worker 的管理. 不做其他功能(减少挂掉可能性)
  2. 子进程woker是实际处理请求的程序, worker 要与系统cpu核数一致, 并且与cpu绑定,以方便更好的使用cpu缓存, 减少缓存失效的命中率.
  3. master 进程内还有cache 缓存空间, 用来缓存反向代理请求, 由子进程 cache loader 载入cache manager 管理.
  4. master 进程内的共享内存, 用来做子进程之间的通信

nginx 高可用的真相:
实际上nginx 的高可用完全依靠master ; nginx 对 worker 的控制是通过获取CHLD信号来达成的. worker 挂掉的同时,会给 master 父进程发送一个 CHLD 信号, master 收到这个信号就会立即新启动一个新 worker 进程来替代挂掉的 worker 进程, 所以要保持 master 功能的简洁 .

热重载原理
执行 nginx -s reload , 实际上先新开启相同数量的 worker 子进程来替代 原来的worker 进程, 但是不是马上关闭老 worker 进程, 只是把老 worker 进程接受请求的通道切换给新 worker , 在老 worker 处理完原已经接受的所有请求后, 再关闭 worker . 这样就很平滑的过度给了新 worker .

热升级和回滚
热升级: 执行 kill -USR2 要升级的 nginx master 进程ID , 这个时候系统首先会去修改老pid文件 , 加后缀 .oldbin, 接着利用新nginx新启动一个新的 master , 并向老 master 发送 QUIT 信号, 此时请求通道从老 master 切换对接新 master , 老 master 不再接受任何 请求 , 等到老 master 内请求处理完毕之后, 关闭所有老 master 中的所有子程序. 但是老 master 不会关闭(保证可以回滚).
回滚: 回滚原理与热升级原理基本相同.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值