服务端平滑重启

平滑重启的场景:版本升级、配置加载等等
平滑重启的特点:已有的请求不能中断、新来的请求要及时响应

通过已有进程fork新进程的方式

服务端平滑重启

直接启动新进程,然后通知老进程退出的方式

服务端平滑重启

这种平滑重启有个特点:两个相互独立的进程存在同时 bind、listen 相同的 IP + 端口,对于各个操作系统及版本验证如下:

  • linux 内核 4.13.0
    设置参数SO_REUSEADDR、SO_REUSEPORT,可以bind、listen成功,新的连接由系统分配到某一个进程;
  • linux 内核 2.6.32
    不支持SO_REUSEPORT,仅设置参数SO_REUSEADDR时,新进程 bind 失败。经查资料linux 3.9及以后开始支持参数SO_REUSEPORT;
  • Windows 7
    不支持SO_REUSEPORT,仅设置参数SO_REUSEADDR时,可以bind、listen成功,但是新的连接仍然会发往老进程,老进程关闭socket后,会发至新进程;
  • Mac 10.12.6
    设置参数SO_REUSEADDR、SO_REUSEPORT,可以bind、listen成功,新的连接只会发往新的进程。

相关推荐