升級 OpenResty Edge

我們建議您升級生產環境前,使用生產環境的資料構建一個與生產環境一樣的測試環境進行升級測試,測試透過後再進行正式環境的升級。詳細步驟見 克隆 OpenResty Edge 環境

1. 升級 Log Server DB

  • 下載安裝器
curl -O https://openresty.com/client/oredge/openresty-edge-installer.sh
  • 執行安裝器
sudo /bin/bash openresty-edge-installer.sh
  • 輸入您要執行的操作 Upgrade
What would you like to do?
[1] Install
[2] Upgrade
[3] Downgrade
[4] Uninstall
2
What you choose is: Upgrade.
  • 輸入您想要升級的版本 (可以從 變更日誌 獲取最新的版本資訊)
which version would you like to upgrade? (like 22.6.1)
22.6.1
  • 輸入您要升級的元件 Log Server DB
Which component would you like to upgrade?
[1] Log Server DB
[2] Log Server
[3] Edge Node
[4] Edge Admin DB
[5] Edge Admin
[6] Rebuild
[7] Clean db after upgrade
1
What you choose is: Log Server DB.
  • 如果成功,最後會有如下提示
Great! update log-server database successfully.

2. 升級 Log Server

  • 操作步驟相同,升級時元件選擇 Log Server
Which component would you like to upgrade?
[1] Log Server DB
[2] Log Server
[3] Edge Node
[4] Edge Admin DB
[5] Edge Admin
[6] Rebuild
[7] Clean db after upgrade
2
What you choose is: Log Server.
  • 如果成功,最後會有如下提示
Great! Upgrade openresty-edge-log-server successfully.

3. 升級 Edge Node

3.1 備份 Edge Node 資料庫

如果你當前的 OpenResty Edge Admin 版本小於 1.3.0,則跳過此步驟。

  • 登入 OpenResty Edge Admin 控制檯
  • 【閘道器叢集】-【備份與還原】-【開始備份】

3.2 遷移流量(可選)

為避免影響業務,Edge Node 節點升級前,把該節點上的流量轉移到其他未升級節點上。 此步驟為可選,但是強烈建議對最初升級的少數 Edge Node 執行此步驟:

  • 遷移走流量
  • 升級
  • 驗證

沒問題後,再升級剩下的 Edge Node 。另外,升級過程中請關注錯誤日誌。

如果使用的 OpenResty Edge 的 DNS 控制流量,請按以下步驟把即將升級的 Edge Node 節點下線。

  • 進入 OpenResty Edge 控制檯
  • 進入【閘道器叢集】頁面
  • 對節點所在叢集進行【編輯】
  • 修改節點【狀態】為【關閉 DNS,關閉叢集快取】
  • 儲存

等待節點不再有流量或只有少量流量。可透過檢視訪問日誌確定:

tail -f /usr/local/oredge-node/logs/access.log

3.3 升級

  • 操作步驟相同,升級時元件選擇 Edge Node
Which component would you like to upgrade?
[1] Log Server DB
[2] Log Server
[3] Edge Node
[4] Edge Admin DB
[5] Edge Admin
[6] Rebuild
[7] Clean db after upgrade
3
What you choose is: Edge Node.
  • 如果成功,最後會有如下提示
Great! Upgrade openresty-edge-node successfully.

4. 升級 Edge Admin 資料庫

  • 操作步驟相同,升級時元件選擇 Edge Admin DB
Which component would you like to upgrade?
[1] Log Server DB
[2] Log Server
[3] Edge Node
[4] Edge Admin DB
[5] Edge Admin
[6] Rebuild
[7] Clean db after upgrade
4
What you choose is: Edge Admin DB.
  • 備份 Edge Admin 資料庫

執行備份命令前,請先檢查磁碟空間是否足夠。

Do you want to backup db? [Y/N]:  y
  • 如果成功,最後會有如下提示
Great! update admin database successfully.

5. 升級 Edge Admin-web

此步驟與 7. 灰度升級 Edge Admin 二選一。 如果配置過 兩份 Edge Admin-web 服務,並且希望可以灰度升級 Edge Admin-web 服務,請按 7. 灰度升級 Edge Admin 中的步驟進行。

  • 操作步驟相同,升級時元件選擇 Edge Admin
Which component would you like to upgrade?
[1] Log Server DB
[2] Log Server
[3] Edge Node
[4] Edge Admin DB
[5] Edge Admin
[6] Rebuild
[7] Clean db after upgrade
5
What you choose is: Edge Admin.
  • 如果成功,最後會有如下提示
Great! Upgrade openresty-edge-admin successfully.

6. 重新編譯

  • 操作步驟相同,升級時元件選擇 Rebuild
Which component would you like to upgrade?
[1] Log Server DB
[2] Log Server
[3] Edge Node
[4] Edge Admin DB
[5] Edge Admin
[6] Rebuild
[7] Clean db after upgrade
6
What you choose is: Rebuild.
  • 先重新編譯幾個流量較少的不包含泛域名的 HTTP 應用, 再編譯幾個大流量的不包含泛域名的 HTTP 應用
Do you want to rebuild one application for test? [Y/N]:  y
Please input the application id: 1
rebuild application 1
  • 再繼續根據提示進行編譯
Do you want to rebuild upgrade config? [Y/N]:  y
rebuild upgrade config
recompile upgrade configurations successfully

Do you want to rebuild all wilecard apps? [Y/N]:  y
rebuild all wilecard apps

Do you want to rebuild all apps? [Y/N]:  y
Do you want to compile concurrently? [Y/N]:  n
rebuild all apps

Do you want to rebuild all http_proxy apps? [Y/N]:  y
rebuild all http_proxy apps

Do you want to rebuild all socks5_apps? [Y/N]:  y
rebuild all sock5_proxy apps

Do you want to rebuild global? [Y/N]:  y
rebuild global
recompile global successfully

Do you want to rebuild waf? [Y/N]:  y
rebuild waf
recompiled all of the WAF rule sets successfully.

Do you want to rebuild dns? [Y/N]:  y
rebuild dns
recompile dns successfully.

Do you want to rebuild global-action? [Y/N]:  y
rebuild global-action
recompile global action successfully

Do you want to rebuild gateway? [Y/N]:  y
rebuild gateway
recompiled gateway successfully

rebuild done!

如果業務指標都表現正常,升級完成!

如果 HTTP/HTTPS 應用數量很多,可能這一步的編譯時間會比較長:

Do you want to rebuild all apps? [Y/N]:  y

此時,接下來可以選擇併發編譯,將啟動 4 個程序來編譯:

Do you want to compile concurrently? [Y/N]:  y

如果不夠快,可以修改安裝器指定更大的併發,但是不能超過 8,比如:

sudo /bin/bash utils/parallel-recompile.sh 8

7. 灰度升級 Edge Admin

此步驟與 5. 升級 Edge Admin 二選一。

灰度升級 Edge Admin-web 有兩個前提條件:

  1. 安裝配置過 兩份 Edge Admin-web 服務
  2. 升級前 Edge Admin-web 的版本不低於 1.3.0-1 。

架構圖如下:

灰度升級 Edge Admin-web 架構圖

相比於雙主 Edge Admin-web 狀態,核心區別在於:

  1. Edge Admin-B 為新版本,可以把新版本的特性,釋出到灰度的 node 節點上,從而灰度驗證 Edge Admin-web 。
  2. Edge Admin-A 為老版本,依舊提供老版本的服務,待新版本灰度驗證透過,再升級灰度到雙主狀態。

具體步驟如下:

  • 針對兩個 Edge Admin-web 做角色劃分,例如上圖的 Edge Admin-A 和 Edge Admin-B 。

    Edge Admin-A 在灰度期間先不會升級,所以確保 Web,REST API 呼叫,SDK 呼叫,都指向了 Edge Admin-A 。 Edge Admin-B 接下來將會拒絕提供 Web 服務,但是還是可以正常與 edge-node 通訊,所以 node 側還是可以保持雙主。

  • 將 Edge Admin-B 配置為灰度角色,並升級到新版本

    修改 config.ini,將 role 欄位修改為 staging,修改後 config.ini 中 clone_admin 段的配置示例如下:

    # 配置檔案:/usr/local/oredge-admin/conf/config.ini
    [clone_admin]
    host = "IP-of-Edge Admin-A"
    role = "staging"
    

    升級方式參考 5. 升級 Edge Admin

  • 將另外一個 Edge Admin A 的角色配置為 main

    修改 config.ini,將 role 欄位修改為 main,修改後 config.ini 中 clone_admin 段的配置示例如下:

    # 配置檔案:/usr/local/oredge-admin/conf/config.ini
    [clone_admin]
    host = "IP-of-Edge Admin-B"
    role = "main"
    

    重啟 Edge Admin-A:

    sudo systemctl reload oredge-admin
    
  • Edge Admin B 上,重新編譯應用和全域性配置

    編譯步驟參考 6 重新編譯

    完成後,觀察一段時間,如果有問題執行 回滾操作一

  • 將 Edge Admin B 的角色恢復為雙主

    修改 config.ini,將 role 欄位修改為 normal,修改後 config.ini 中 clone_admin 段的配置示例如下:

    # 配置檔案:/usr/local/oredge-admin/conf/config.ini
    [clone_admin]
    host = "IP-of-Edge Admin-A"
    role = "normal"
    

    重啟 Edge Admin-B:

    sudo systemctl reload oredge-admin
    
  • 將 Edge Admin A 的角色恢復為雙主,升級到新版本,並重新編譯應用和全域性配置

    修改 config.ini,將 role 欄位修改為 normal,修改後 config.ini 中 clone_admin 段的配置示例如下:

    # 配置檔案:/usr/local/oredge-admin/conf/config.ini
    [clone_admin]
    host = "IP-of-Edge Admin-B"
    role = "normal"
    

    升級方式參考 5. 升級 Edge Admin

    編譯步驟參考 6. 重新編譯

    如果業務指標都表現正常,升級完成!又可以把 Edge Admin-A 和 Edge Admin-B 當做雙主使用了。

    如果有問題執行 回滾操作二

7.1 Edge Admin-web 回滾一

  • 將 Edge Admin-A 恢復為雙主角色,重啟服務,並重新編譯應用和全域性配置

    修改 config.ini,將 role 欄位修改為 normal,修改後 config.ini 中 clone_admin 段的配置示例如下:

    # 配置檔案:/usr/local/oredge-admin/conf/config.ini
    [clone_admin]
    host = "IP-of-Edge Admin-B"
    role = "normal"
    

    重啟 Edge Admin-A:

    sudo systemctl reload oredge-admin
    

    編譯步驟參考 6. 重新編譯。 注意:此時可以優先重新編譯導致出錯的那一步,可以儘快的恢復服務。

  • 將 Edge Admin B 角色恢復為雙主,並回滾版本

    修改 config.ini,將 role 欄位修改為 normal,修改後 config.ini 中 clone_admin 段的配置示例如下:

    # 配置檔案:/usr/local/oredge-admin/conf/config.ini
    [clone_admin]
    host = "IP-of-Edge Admin-B"
    role = "normal"
    

    降級方式:

    curl -O https://openresty.com/client/oredge/downgrade-openresty-edge.sh
    sudo /bin/bash downgrade-openresty-edge.sh OLD_PACKAGE_VERSION
    
    # 如:sudo /bin/bash downgrade-edge-admin.sh 1.1.0-0
    

    降級完成!

7.2 Edge Admin-web 回滾二

  • 回滾 Edge Admin A 並重新編譯到全網

    此時 Edge Admin A 已經是雙主模式,只需要降級 Edge Admin A 的版本 降級方式與上面的一樣:

    curl -O https://openresty.com/client/oredge/downgrade-openresty-edge.sh
    sudo /bin/bash downgrade-openresty-edge.sh OLD_PACKAGE_VERSION
    
    # 如:sudo /bin/bash downgrade-edge-admin.sh 1.1.0-0
    

    編譯步驟參考 6. 重新編譯。 注意:此時可以優先重新編譯導致出錯的那一步,可以儘快的恢復服務。

  • 回滾 Edge Admin B 版本

    降級方式與上面的一樣:

    curl -O https://openresty.com/client/oredge/downgrade-openresty-edge.sh
    sudo /bin/bash downgrade-openresty-edge.sh OLD_PACKAGE_VERSION
    
    # 如:sudo /bin/bash downgrade-edge-admin.sh 1.1.0-0
    

    降級完成!

8. 升級完成後

在執行完前面的步驟並驗證完成後,可以執行此步驟來清理不再需要的資料庫欄位或者對資料庫欄位增加約束。

  • 操作步驟相同,升級時元件選擇 Clean db after upgrade
Which component would you like to upgrade?
[1] Log Server DB
[2] Log Server
[3] Edge Node
[4] Edge Admin DB
[5] Edge Admin
[6] Rebuild
[7] Clean db after upgrade
7
What you choose is: Clean db after upgrade.
  • 如果成功,最後會有如下提示
Great! upgrade admin database successfully.

有問題我們隨時溝通 :)