离线升级 OpenResty Edge

1. 获取离线包

如果您没有名称为 Edge-Offline-VERSION.tar.gz 的离线包,请使用邮箱在 OpenResty 下载中心 登录并下载。

tar xf Edge-Offline-VERSION.tar.gz

# 如: tar xf Edge-Offline-20210721.tar.gz

通常离线包里会包含以下内容:

  • openresty-postgresql.tar.gz,与 openresty-postgresql12.tar.gz 二选一
  • openresty-postgresql12.tar.gz,与 openresty-postgresql.tar.gz 二选一
  • openresty-edge-admin.tar.gz
  • openresty-edge-node.tar.gz
  • openresty-edge-log-server.tar.gz
  • update-admin-db-VERSION.sh,仅升级时使用
  • update-log-server-db-VERSION.sh,仅升级时使用
  • init_admin_db_VERSION.sh,仅安装时使用
  • init_log_server_db_VERSION.sh,仅安装时使用

2. 升级 Log Server 数据库

  • 升级数据库程序

    如果你的系统中已经安装了 openresty-PostgreSQL 请使用 openresty-postgresql.tar.gz; 如果你的系统中已经安装了 openresty-postgresql12 请使用 openresty-postgresql12.tar.gz

    # 把 openresty-postgresql[12].tar.gz 传输到 Log Server 数据库所在的机器上
    tar xf openresty-postgresql[12].tar.gz
    cd openresty-postgresql[12]
    
    sudo bash upgrade.sh
    
  • 升级数据库 Schema

    # 把 update-log-server-db-VERSION.sh 传输到 Log Server 数据库所在的机器上
    bash update-log-server-db-VERSION.sh
    
    # 如:bash update-log-server-db-40.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. 升级 Node

先升级 1~2 个 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,请按照以下步骤进行;否则,请根据您实际情况进行。

    • 把准备升级的 Node 节点下线:

      • 进入【网关集群】页面
      • 对节点所在集群进行【编辑】
      • 修改节点【状态】为【关闭 DNS,关闭集群缓存】
      • 保存
    • 等待节点不再有流量。可通过查看访问日志检查是否还有流量:

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

      此过程需要等待 DNS 过期,较为耗时。

  • 升级:

    # 把 openresty-edge-node.tar.gz 传输到 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
    
    # 放到旧的 Node 的离线安装包的目录中
    cp downgrade-edge-node-offline.sh <old-packages-dir>
    
    # 执行降级脚本
    sudo bash downgrade-edge-node-offline.sh
    

5. 升级 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 传输到 Admin 数据库所在的机器上
    tar xf openresty-postgresql[12].tar.gz
    cd openresty-postgresql[12]
    
    sudo bash upgrade.sh
    
  • 升级数据库 Schema

    # 把 update-admin-db-VERSION.sh 传输到 Admin 数据库所在的机器上
    bash update-admin-db-VERSION.sh
    
    # 如:bash update-admin-db-179.sh
    

6. 升级 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 传输到 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
    
    # 放到旧的 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

有问题请与我们随时沟通!