升级 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.

有问题我们随时沟通 :)