婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > nginx 平滑重啟的實現方法

nginx 平滑重啟的實現方法

熱門標簽:高德地圖標注無營業執照 東莞人工智能電銷機器人供應商 智能電話機器人線路 江蘇電銷外呼防封系統是什么 金融行業外呼線路 百度地圖標注要不要錢 廣州電銷機器人系統圖 長沙開福怎么申請400電話 賀州市地圖標注app

一、背景

在服務器開發過程中,難免需要重啟服務加載新的代碼或配置,如果能夠保證server重啟的過程中服務不間斷,那重啟對于業務的影響可以降為0。最近調研了一下nginx平滑重啟,覺得很有意思,記錄下來供有興趣的同學查閱。

二、重啟流程

  •  重啟意味著新舊接替,在交接任務的過程中勢必會存在新舊server并存的情形,因此,重啟的流程大致為:
    • 啟動新的server
    • 新舊server并存,兩者共同處理請求,提供服務
    • 舊的server處理完所有的請求之后優雅退出
  • 這里,最主要的問題在于如何保證新舊server可以并存,如果重啟前后的server端口一致,如何保證兩者可以監聽同一端口。

 三、nginx實現

為了驗證nginx平滑重啟,筆者首先嘗試nginx啟動的情形下再次開啟一個新的server實例,結果如圖:

很明顯,重新開啟server實例是行不通的,原因在于新舊server使用了同一個端口80,在未開始socket reuseport選項復用端口時,bind系統調用會出錯。nginx默認bind重試5次,失敗后直接退出。而nginx需要監聽IPV4地址0.0.0.0和IPV6地址[::],故圖中打印出10條emerg日志。

接下來就開始嘗試平滑重啟命令了,一共兩條命令:

kill -USR2 `cat /var/run/nginx.pid`
kill -QUIT `cat /var/run/nginx.pid.oldbin`

第一條命令是發送信號USR2給舊的master進程,進程的pid存放在/var/run/nginx.pid文件中,其中nginx.pid文件路徑由nginx.conf配置。

第二條命令是發送信號QUIT給舊的master進程,進程的pid存放在/var/run/nginx.pid.oldbin文件中,隨后舊的master進程退出。

那么問題來了,為什么舊的master進程的pid存在于兩個pid文件之中?事實上,在發送信號USR2給舊的master進程之后,舊的master進程將pid重命名,原先的nginx.pid文件rename成nginx.pid.oldbin。這樣新的master進行就可以使用nginx.pid這個文件名了。

先執行第一條命令,結果如圖:

不錯,新舊master和worker進程并存了。 再來第二條命令,結果如圖:

如你所見,舊的master進程8527和其worker進程全部退出,只剩下新的master進程12740。

不由得產生困惑,為什么手動開啟一個新的實例行不通,使用信號重啟就可以達到。先看下nginx log文件:

除了之前的錯誤日志,還多了一條notice,意思就是繼承了sockets,fd值為6,7。 隨著日志翻看nginx源碼,定位到nginx.c/ngx_exec_new_binary函數之中,

ngx_pid_t
ngx_exec_new_binary(ngx_cycle_t *cycle, char *const *argv)
{
  ...
  ctx.path = argv[0];
  ctx.name = "new binary process";
  ctx.argv = argv;
  n = 2;
  env = ngx_set_environment(cycle, &n);
...
  var = ngx_alloc(sizeof(NGINX_VAR)
          + cycle->listening.nelts * (NGX_INT32_LEN + 1) + 2,
          cycle->log);
...
  p = ngx_cpymem(var, NGINX_VAR "=", sizeof(NGINX_VAR));
  ls = cycle->listening.elts;
  for (i = 0; i < cycle->listening.nelts; i++) {
    p = ngx_sprintf(p, "%ud;", ls[i].fd);
  }
  *p = '\0';
  env[n++] = var;
...
  env[n] = NULL;
...
  ctx.envp = (char *const *) env;
  ccf = (ngx_core_conf_t *) ngx_get_conf(cycle->conf_ctx, ngx_core_module);
  if (ngx_rename_file(ccf->pid.data, ccf->oldpid.data) == NGX_FILE_ERROR) {
    ...
    return NGX_INVALID_PID;
  }
  pid = ngx_execute(cycle, &ctx);
  if (pid == NGX_INVALID_PID) {
    if (ngx_rename_file(ccf->oldpid.data, ccf->pid.data)
      == NGX_FILE_ERROR)
    {
      ...
    }
  }
...
  return pid;
}

函數的流程為

  1.  將舊的master進程監聽的所有fd,拷貝至新master進程的env環境變量NGINX_VAR。
  2. rename重命名pid文件
  3. ngx_execute函數fork子進程,execve執行命令行啟動新的server。
  4. 在server啟動流程之中,涉及到環境變量NGINX_VAR的解析,ngx_connection.c/ngx_add_inherited_sockets具體代碼為:
static ngx_int_t
ngx_add_inherited_sockets(ngx_cycle_t *cycle)
{
...
  inherited = (u_char *) getenv(NGINX_VAR);
  if (inherited == NULL) {
    return NGX_OK;
  }
  if (ngx_array_init(&cycle->listening, cycle->pool, 10,
            sizeof(ngx_listening_t))
    != NGX_OK)
  {
    return NGX_ERROR;
  }
  for (p = inherited, v = p; *p; p++) {
    if (*p == ':' || *p == ';') {
      s = ngx_atoi(v, p - v);
      ...
      v = p + 1;
      ls = ngx_array_push(&cycle->listening);
      if (ls == NULL) {
        return NGX_ERROR;
      }
      ngx_memzero(ls, sizeof(ngx_listening_t));
      ls->fd = (ngx_socket_t) s;
    }
  }
  ...
  ngx_inherited = 1;
  return ngx_set_inherited_sockets(cycle);
}

函數流程為:

解析環境變量NGINX_VAR的值,獲取fd存入數組

fd對應的socket設為ngx_inherited,保存這些socket的信息。

也就是說,新的server壓根就沒重新bind端口listen,這些fd狀態和值都是新的master進程fork時帶過來的,新的master進程監聽處理繼承來的文件描述符即可,這里比較關鍵的一點在于listen socket文件描述符通過ENV傳遞。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

標簽:北京 張家界 廊坊 松原 永州 滄州 玉樹 洛陽

巨人網絡通訊聲明:本文標題《nginx 平滑重啟的實現方法》,本文關鍵詞  nginx,平滑,重啟,的,實現,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《nginx 平滑重啟的實現方法》相關的同類信息!
  • 本頁收集關于nginx 平滑重啟的實現方法的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    日韩一区和二区| 日韩精品一区二区三区视频在线观看 | 蜜臀av一区二区在线免费观看| 国产成人在线影院| 欧美一区二区视频在线观看2022| 国产精品麻豆视频| 国产尤物一区二区在线| 在线电影一区二区三区| 亚洲精品伦理在线| 懂色av一区二区三区免费观看| 欧美一区二区三区精品| 一区二区三区精密机械公司| 成人免费视频国产在线观看| 久久久另类综合| 精久久久久久久久久久| 日韩欧美在线观看一区二区三区| 亚洲综合激情另类小说区| 99久久99久久免费精品蜜臀| 国产亚洲美州欧州综合国| 久久不见久久见免费视频1| 777奇米成人网| 日韩国产高清影视| 日韩午夜在线影院| 日韩电影在线免费观看| 7777精品伊人久久久大香线蕉完整版| 一区二区三区欧美激情| 91黄色激情网站| 麻豆精品一区二区综合av| 欧美日本国产视频| 亚洲成av人在线观看| 在线免费观看日本一区| 亚洲一区二区三区四区在线观看| 色噜噜狠狠色综合中国| 亚洲一区在线视频| 3d成人h动漫网站入口| 视频一区视频二区中文| 欧美一级黄色大片| 免费观看在线综合色| www国产成人免费观看视频 深夜成人网| 日本欧美一区二区三区乱码| 日韩情涩欧美日韩视频| 国产中文一区二区三区| 日本一区二区三区视频视频| hitomi一区二区三区精品| 亚洲欧美日韩国产综合| 欧美日韩一区二区在线观看| 蜜臀av性久久久久蜜臀aⅴ流畅 | 久久久综合视频| 国产aⅴ综合色| 亚洲精品国产无天堂网2021| 欧美日韩精品一区视频| 久久9热精品视频| 欧美激情在线一区二区三区| 色综合中文字幕国产 | av福利精品导航| 亚洲综合色丁香婷婷六月图片| 欧美老女人第四色| 国产精品自拍网站| 亚洲美女免费在线| 日韩欧美国产一二三区| 国产98色在线|日韩| 亚洲国产综合91精品麻豆| 精品久久人人做人人爱| 99精品久久久久久| 日韩高清不卡在线| 国产精品国产精品国产专区不片| 欧美日韩一区不卡| 国产精品资源在线观看| 亚洲精品老司机| 日韩欧美亚洲国产另类| 99久久精品国产网站| 日本怡春院一区二区| 国产精品美女久久久久久| 91精品欧美久久久久久动漫| 成人福利视频在线| 另类小说综合欧美亚洲| 亚洲精品伦理在线| 久久久精品综合| 欧美无砖专区一中文字| 大美女一区二区三区| 天堂精品中文字幕在线| 中文字幕中文字幕一区| 日韩午夜精品视频| 91久久精品日日躁夜夜躁欧美| 国产米奇在线777精品观看| 亚洲国产精品视频| 成人午夜在线免费| 蜜桃视频在线一区| 亚洲一区日韩精品中文字幕| 国产清纯白嫩初高生在线观看91| 制服.丝袜.亚洲.另类.中文| 91一区二区三区在线观看| 韩国av一区二区| 日韩高清电影一区| 亚洲综合精品自拍| 综合久久久久综合| 亚洲国产精品成人综合色在线婷婷| 91精品在线观看入口| 欧美三电影在线| 色哟哟欧美精品| 91在线免费看| 成人精品鲁一区一区二区| 国产一区二区在线看| 麻豆精品精品国产自在97香蕉| 亚洲成av人片在www色猫咪| 亚洲三级电影网站| 亚洲日本乱码在线观看| 日本一区二区在线不卡| 久久蜜桃一区二区| 久久人人97超碰com| 精品少妇一区二区三区免费观看| 欧美日韩成人一区| 欧美一区二区三区免费在线看| 欧美久久免费观看| 欧美久久一区二区| 4438x成人网最大色成网站| 欧美精品高清视频| 日韩一区二区三区电影| 日韩限制级电影在线观看| 91麻豆精品国产91久久久久久 | 亚洲成在人线在线播放| 一区二区欧美国产| 亚洲国产精品一区二区久久| 亚洲va国产va欧美va观看| 午夜精品在线视频一区| 日韩av午夜在线观看| 久久精品久久久精品美女| 紧缚捆绑精品一区二区| 国产一区二区不卡| 成人av电影在线| 色综合久久中文综合久久97| 欧美日韩aaaaa| 精品国产凹凸成av人导航| 国产亚洲精品福利| 成人精品国产免费网站| 91色九色蝌蚪| 91精品福利在线一区二区三区 | 日韩激情一二三区| 久久精品国产澳门| 97精品电影院| 欧美精品视频www在线观看| 日韩欧美色综合网站| 久久精品免视看| 亚洲综合网站在线观看| 青青草国产精品97视觉盛宴| 国产很黄免费观看久久| 欧美亚洲一区三区| 2017欧美狠狠色| 亚洲va在线va天堂| 国产精品1024| 精品视频一区三区九区| 久久精品亚洲乱码伦伦中文| 综合中文字幕亚洲| 国产又粗又猛又爽又黄91精品| 91亚洲国产成人精品一区二三| 欧美一二三四区在线| 综合欧美亚洲日本| 国产一区二区三区日韩| 在线看不卡av| 欧美高清在线一区二区| 视频一区二区中文字幕| 99久久精品99国产精品| 日韩你懂的在线播放| 亚洲综合网站在线观看| 日韩三级伦理片妻子的秘密按摩| 国产精品色噜噜| 国内精品伊人久久久久av一坑| 欧美在线影院一区二区| 国产精品伦理在线| 韩国精品主播一区二区在线观看 | 色综合久久中文综合久久97| 欧美α欧美αv大片| 亚洲一区二区三区四区在线免费观看 | 国产精品电影院| 国产专区综合网| 欧美一区二区精品在线| 亚洲香肠在线观看| 日本高清无吗v一区| 亚洲少妇中出一区| av一二三不卡影片| 欧美极品美女视频| 国产精品夜夜嗨| 久久久久亚洲蜜桃| 国产一区日韩二区欧美三区| 91精品福利在线一区二区三区| 亚洲一区二区三区四区在线免费观看 | 91亚洲精品久久久蜜桃| 欧美激情一区二区三区蜜桃视频| 国产乱码精品一区二区三区忘忧草 | 色综合久久精品| 亚洲欧美日韩在线不卡| www.av精品| 亚洲视频在线观看三级| 91麻豆国产精品久久| 亚洲天堂成人在线观看| 99精品国产热久久91蜜凸| 亚洲欧美日韩一区二区三区在线观看| 91丝袜呻吟高潮美腿白嫩在线观看| 国产精品系列在线| 97精品久久久久中文字幕|