• 平滑重启更新(GR机制)


    1. 什么是平滑重启?

    百度百科的解释:

    平滑重启(Graceful Restart,简称GR),通信技术用语,是一种在协议重启时保证转发业务不中断的机制。

    GR机制的核心在于:当某设备进行协议重启时,能够通知其周边设备在一定时间内将到该设备的邻居关系和路由保持稳定。在协议重启完毕后,周边设备协助其进行信息(包括支持GR的路由/MPLS相关协议所维护的各种拓扑、路由和会话信息)同步,在尽量短的时间内使该设备恢复到重启前的状态。在整个协议重启过程中不会产生路由振荡,报文转发路径也没有任何改变,整个系统可以不间断地转发数据。这个过程即称为平滑重启。

    2. 平滑重启的作用?

    平滑重启不同于普通的重启,平滑重启可以做到在不影响用户的情况下重启服务,以便重新载入PHP程序,完成业务代码更新。

    3. 什么时候用到平滑重启?

    平滑重启一般应用于业务更新或者版本发布过程中,能够避免因为代码发布重启服务导致的暂时性服务不可用的影响。

    4. 平滑重启的原理?
    workerman

    WorkerMan分为主进程和子进程,主进程负责监控子进程,子进程负责接收客户端的连接和连接上发来的请求数据,做相应的处理并返回数据给客户端。当业务代码更新时,其实我们只要更新子进程,便可以达到更新代码的目的。当WorkerMan主进程收到平滑重启信号时,主进程会向其中一个子进程发送安全退出(让对应进程处理完毕当前请求后才退出)信号,当这个进程退出后,主进程会重新创建一个新的子进程(这个子进程载入了新的PHP代码),然后主进程再次向另外一个旧的进程发送停止命令,这样一个进程一个进程的重启,直到所有旧的进程全部被置换为止。我们看到平滑重启实际上是让旧的业务进程逐个退出然后并逐个创建新的进程做到的。为了在平滑重启时不影响用户,这就要求进程中不要保存用户相关的状态信息,即业务进程最好是无状态的,避免由于进程退出导致信息丢失。

    ngnix 平滑重启和平滑更新
    • 平滑重启
      Nginx的进程分为master主进程和work工作进程,master进程主要管理事件信号接受和分发,所有的请求处理都由work进程处理并返回结果,Nginx的平滑重启或重载配置文件等升级,首先是向master发送重启或重载配置文件信号,然后master告诉所有的work进程不再接受新的请求,然后master另起新的work进程,最后告诉旧的work进程可以光荣退出了。
    • 平滑更新
      在upgrade过程中,还涉及到3个信号(USR2、WINCH和QUIT)。
      第一步发送USR2信号给原master,原master进程会额外启动一个master进程和若干worker进程,新旧worker进程同时提供对外服务。
      第二步发送WINCH信号,原worker进程(处理完)停止服务并退出。
      第三步发送QUIT信号给原master使之退出,只保留新的master和worker。
    php-fpm 平滑重启
    • php-fpm的reload平滑重启是指:假设128个php-cgi进程中有50个进程正在处理PHP程序,而剩余的78个进程处于闲置状态,php-fpm接到平滑重启信号后,会kill掉78个闲置进程,然后新启动128个进程,新请求交给新启动的进程来处理,而那50个进程,只有等到它们处理完自己当前正在执行的PHP程序后,才会被干掉。

    • php-fpm master 进程可以理解以下的信号:

      • INT, TERM 立刻终止
      • QUIT 平滑终止
      • USR1 重新打开日志文件
      • USR2 平滑重载所有worker进程并重新载入配置和二进制模块
    • 关闭php-fpm:

      • kill -INT cat /usr/local/php/var/run/php-fpm.pid
    • 平滑重启php-fpm:

      • kill -USR2 cat /usr/local/php/var/run/php-fpm.pid
    • 注意php-fpm.pid文件需要到到php-fpm.conf配置文件里面打开

    `[global]
    ;Pid file
    ;Note: the default prefix is /usr/local/var
    ;Default Value: none
    ;pid = run/php-fpm.pid`  #将这一行 分号去掉
    
    • 1
    • 2
    • 3
    • 4
    • 5
  • 相关阅读:
    你不知道的 CSS 之包含块
    Linux常用分析命令
    0006__js库中文版
    linux企业级常用服务搭建
    MCU软核 1. Altera FPGA上运行8051
    这款国产API工具也太强了吧!让我放弃了postman
    HTML5提供的文件API
    Docker(1)
    通过线程池方式改造Stream.parallel()并行流
    集合在多线程下安全问题
  • 原文地址:https://blog.csdn.net/weixin_40172337/article/details/126448230