離線升級 OpenResty Edge

1. 獲取離線包

如果您沒有名稱為 OpenResty-Edge-Offline-VERSION.tar.gz 的離線包,請使用郵箱在 OpenResty 下載中心 登入並下載。

tar xf OpenResty-Edge-Offline-VERSION.tar.gz

# 如: tar xf OpenResty-Edge-Offline-22.6.1-15.tar.gz

通常離線包裡會包含以下內容:

  • openresty-postgresql.tar.gz,僅升級時使用
  • openresty-postgresql12.tar.gz
  • openresty-edge-admin.tar.gz
  • openresty-edge-node.tar.gz
  • openresty-edge-log-server.tar.gz
  • update-admin-db.sh,僅升級時使用
  • update-log-server-db.sh,僅升級時使用
  • init-admin-db.sh,僅安裝時使用
  • init-log-server-db.sh,僅安裝時使用

2. 升級 Log Server 資料庫

  • 升級資料庫程式

    如果你的系統中已經安裝了 openresty-postgresql 請使用 openresty-postgresql.tar.gz; 如果你的系統中已經安裝了 openresty-postgresql12 請使用 openresty-postgresql12.tar.gz

    # 把 openresty-postgresql[12].tar.gz 傳輸到 Log Server DB 所在的機器上
    tar xf openresty-postgresql[12].tar.gz
    cd openresty-postgresql[12]
    
    sudo bash upgrade.sh
    
  • 升級資料庫 Schema

    # 把 update-log-server-db.sh 傳輸到 Log Server DB 所在的機器上
    bash update-log-server-db.sh
    

3. 升級 Log Server

  • 檢視並記錄升級前的版本資訊:

    # centos/redhat/fedora
    rpm -q openresty-edge-log-server
    # or
    rpm -q openresty-edge-log-server-prod
    
    # debian/ubuntu
    dpkg -l | grep openresty-edge-log-server
    # or
    dpkg -l | grep openresty-edge-log-server-prod
    
  • 升級

    # 把 openresty-edge-log-server.tar.gz 傳輸到 Log Server 所在的機器上
    
    tar xf openresty-edge-log-server.tar.gz
    cd openresty-edge-log-server
    sudo bash upgrade.sh
    
  • 降級

    如升級失敗,可以執行以下步驟進行降級:

    # 下載降級指令碼
    curl -O https://openresty.com/client/oredge/downgrade-edge-log-server-offline.sh
    
    # 放到舊的 Log Server 的離線安裝包的目錄中
    cp downgrade-edge-log-server-offline.sh <old-packages-dir>
    
    # 執行降級指令碼
    sudo bash downgrade-edge-log-server-offline.sh
    

4. 升級 Edge Node

先升級 1~2 個 Edge Node,沒問題後再全部升級,升級過程中請關注錯誤日誌。

  • 檢視並記錄升級前的軟體版本:

    # centos/redhat/fedora
    rpm -q openresty-edge-node
    # or
    rpm -q openresty-edge-node-prod
    
    # debian/ubuntu
    dpkg -l | grep openresty-edge-node
    # or
    dpkg -l | grep openresty-edge-node-prod
    
  • 切走流量,如果您是使用 Edge 的 DNS,請按照以下步驟進行;否則,請根據您實際情況進行。

    • 把準備升級的 Edge Node 節點下線:

      • 進入【閘道器叢集】頁面
      • 對節點所在叢集進行【編輯】
      • 修改節點【狀態】為【關閉 DNS,關閉叢集快取】
      • 儲存
    • 等待節點不再有流量。可透過檢視訪問日誌檢查是否還有流量:

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

      此過程需要等待 DNS 過期,較為耗時。

  • 升級:

    # 把 openresty-edge-node.tar.gz 傳輸到 Edge Node 所在的機器上
    
    tar xf openresty-edge-node.tar.gz
    cd openresty-edge-node
    sudo bash upgrade.sh
    
  • 降級

    如升級失敗,可以執行以下步驟進行降級:

    # 下載降級指令碼
    curl -O https://openresty.com/client/oredge/downgrade-edge-node-offline.sh
    
    # 放到舊的 Edge Node 的離線安裝包的目錄中
    cp downgrade-edge-node-offline.sh <old-packages-dir>
    
    # 執行降級指令碼
    sudo bash downgrade-edge-node-offline.sh
    

5. 升級 Edge Admin 資料庫

  • 備份資料庫

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

# 請替換 127.0.0.1 成實際的 IP,替換 5432 成實際的埠。
/usr/local/openresty-postgresql12/bin/pg_dump or_edge_admin                       \
    -h 127.0.0.1 -p 5432 -U postgres --schema-only                              \
    | gzip > db_edge_admin_schema_$(date '+%Y-%m-%d').sql.gz

/usr/local/openresty-postgresql12/bin/pg_dump or_edge_admin                      \
    -h 127.0.0.1 -p 5432 -U postgres --data-only                                \
    | gzip > db_edge_admin_data_$(date '+%Y-%m-%d').sql.gz
  • 升級資料庫程式

    如果你的系統中已經安裝了 openresty-postgresql 請使用 openresty-postgresql.tar.gz; 如果你的系統中已經安裝了 openresty-postgresql12 請使用 openresty-postgresql12.tar.gz

    # 把 openresty-postgresql[12].tar.gz 傳輸到 Edge Admin 資料庫所在的機器上
    tar xf openresty-postgresql[12].tar.gz
    cd openresty-postgresql[12]
    
    sudo bash upgrade.sh
    
  • 升級資料庫 Schema

    # 把 update-admin-db.sh 傳輸到 Edge Admin 資料庫所在的機器上
    bash update-admin-db.sh
    

6. 升級 Edge Admin

  • 檢視並記錄升級前的軟體版本:

    # centos/redhat/fedora
    rpm -q openresty-edge-admin
    # or
    rpm -q openresty-edge-admin-prod
    
    # debian/ubuntu
    dpkg -l | grep openresty-edge-admin
    # or
    dpkg -l | grep openresty-edge-admin-prod
    
  • 升級

    # 把 openresty-edge-admin.tar.gz 傳輸到 Edge Admin 所在的機器上
    
    tar xf openresty-edge-admin.tar.gz
    cd openresty-edge-admin
    sudo bash upgrade.sh
    
  • 降級

    如升級失敗,可以執行以下步驟進行降級:

    # 下載降級指令碼
    curl -O https://openresty.com/client/oredge/downgrade-edge-admin-offline.sh
    
    # 放到舊的 Edge Admin 的離線安裝包的目錄中
    cp downgrade-edge-admin-offline.sh <old-packages-dir>
    
    # 執行降級指令碼
    sudo bash downgrade-edge-admin-offline.sh
    

7. 重新編譯

需要重新編譯應用,建議按照這樣的順序來:

  1. 先重新編譯幾個流量較少的不包含泛域名的 HTTP 應用
  2. 重新編譯幾個大流量的不包含泛域名的 HTTP 應用
  3. 全量編譯所有包含泛域名的應用
  4. 全量編譯所有應用
  5. 編譯全域性規則
# 在 admin 機器上
cd /usr/local/oredge-admin/
# 重新編譯升級相容配置
sudo /bin/bash utils/recompile-apps.sh upgrade-config
# 重新編譯指定應用 ( APP-ID 替換為應用 ID)
sudo /bin/bash utils/recompile-apps.sh http APP-ID
# 重新編譯所有應用
sudo /bin/bash utils/recompile-apps.sh wildcard-http
sudo /bin/bash utils/recompile-apps.sh http
sudo /bin/bash utils/recompile-apps.sh http_proxy
sudo /bin/bash utils/recompile-apps.sh socks5_proxy
# 重新編譯全域性規則
sudo /bin/bash utils/recompile-apps.sh global
# 重新編譯waf規則
sudo /bin/bash utils/recompile-apps.sh waf
# 重新編譯dns
sudo /bin/bash utils/recompile-apps.sh dns
# 重新編譯全域性動作
sudo /bin/bash utils/recompile-apps.sh global-action
# 重新編譯閘道器節點(可能會觸發 node 節點過載)
sudo /bin/bash utils/recompile-apps.sh gateway

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

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

sudo /bin/bash utils/recompile-apps.sh http

此時,我們推薦用另外一個工具,來併發編譯,如下命令將啟動 4 個程序來編譯:

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

如果不夠快,也可以指定更大的併發,但是不能超過 8,比如:

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

有問題請與我們隨時溝通!