回滚 Apigee Edge 4.18.05

Edge for Private Cloud v4.18.05

如果您在更新到 Edge 4.18.05 期间遇到错误,可以回滚导致错误的组件,然后再次尝试更新。

您可以将 Edge 4.18.05 回滚到以下功能发布版本:

  • 版本 4.18.01
  • 版本 4.17.09*
  • 版本 4.17.05*

* 如需从 4.18.05 回滚到 4.17.09 或 4.17.05,除了回滚每个节点上的组件之外,您还必须回滚 Postgres。如果您回滚到 4.18.01,则无需回滚 Postgres,因为升级过程不包含 Postgres 更新。

在以下两种情况下,您可能需要执行回滚:

  1. 回滚到先前的功能版本。例如,从 4.18.05 到 4.18.01。
  2. 回滚到同一版本中之前的更新版本。例如,从 4.18.05.02 到 4.18.05.01。

如需了解详情,请参阅 Apigee Edge 发布流程

谁可以执行回滚

执行回滚的用户应与最初更新 Edge 的用户相同,或以 root 身份运行的用户相同。

默认情况下,Edge 组件以用户“apigee”的身份运行。在某些情况下,您可能以不同的用户身份运行 Edge 组件。例如,如果路由器必须访问特权端口(例如低于 1000 的端口),则必须以 root 用户或有权访问这些端口的用户身份运行路由器。或者,您也可以以一个用户身份运行一个组件,以另一个用户身份运行另一个组件。

使用通用代码的组件

以下 Edge 组件共用相同的代码。因此,如需回滚某个节点上的任何一个组件,您必须回滚该节点上的所有这些组件。

  • edge-management-server(管理服务器)
  • edge-message-processor(消息处理器)
  • edge-router(路由器)
  • edge-postgres-server(Postgres 服务器)
  • edge-qpid-server(Qpid 服务器)

例如,如果您在节点上安装了管理服务器、路由器和消息处理器,如需回滚其中任何一个,您必须全部回滚。

回滚到先前的功能版本

如需从 4.18.05 回滚到 4.17.09 或 4.17.05,除了回滚每个节点上的组件之外,您还必须回滚 Postgres。如果从 4.18.01 回滚,则无需回滚 Postgres,因为升级过程不包含 Postgres 更新。

如需回滚到先前的功能版本,请在托管相应组件的每个节点上执行以下操作:

  1. 下载您要回滚到的版本的 bootstrap.sh 文件:

    • 如需回滚到 4.18.01,请下载 bootstrap_4.18.01.sh
      curl https://software.apigee.com/bootstrap_4.18.01.sh -o /tmp/bootstrap_4.18.01.sh 
    • 如需回滚到 4.17.09,请下载 bootstrap_4.17.09.sh
      curl https://software.apigee.com/bootstrap_4.17.09.sh -o /tmp/bootstrap_4.17.09.sh 
    • 如需回滚到 4.17.05,请下载 bootstrap_4.17.05.sh
      curl https://software.apigee.com/bootstrap_4.17.05.sh -o /tmp/bootstrap_4.17.05.sh 
  2. 停止组件以进行回滚:
    1. 如需回滚节点上的任何使用通用代码的组件,您必须停止所有组件,如以下示例所示:
      /opt/apigee/apigee-service/bin/apigee-service edge-management-server stop
      /opt/apigee/apigee-service/bin/apigee-service edge-router stop
      /opt/apigee/apigee-service/bin/apigee-service edge-message-processor stop
      /opt/apigee/apigee-service/bin/apigee-service edge-qpid-server stop
      /opt/apigee/apigee-service/bin/apigee-service edge-postgres-server stop
    2. 如需回滚节点上的任何其他组件,请仅停止该组件:
      • /opt/apigee/apigee-service/bin/apigee-service component stop
  3. 如果您要回滚创收功能,请从所有管理服务器和消息处理器节点中卸载该应用:
    /opt/apigee/apigee-service/bin/apigee-service edge-mint-gateway uninstall
  4. 卸载组件以在节点上回滚:
    1. 如需回滚节点上使用通用代码的组件,您必须卸载 edge-gateway 组件组来将其全部卸载,如以下示例所示:
      /opt/apigee/apigee-service/bin/apigee-service edge-gateway uninstall
    2. 如需回滚节点上的任何其他组件,请仅卸载该组件,如以下示例所示:
      /opt/apigee/apigee-service/bin/apigee-service component uninstall

      其中 component 是组件名称。

    3. 如需回滚边缘路由器,除了卸载 edge-gateway 组件组外,您还必须删除 /opt/nginx/conf.d 文件的内容:
      cd /opt/nginx/conf.d
      rm -rf *
  5. 卸载 4.18.05 版的 apigee-setup
    /opt/apigee/apigee-service/bin/apigee-service apigee-setup uninstall
  6. 安装 4.18.01、4.17.09 或 4.17.05 版 apigee-service 实用程序及其依赖项。以下示例会安装 4.17.09 版的 apigee-service
    sudo bash /tmp/bootstrap_4.17.09.sh apigeeuser=uName apigeepassword=pWord

    其中,uNamepWord 是您从 Apigee 收到的用户名和密码。如果省略 pWord,系统会提示您输入。

    如果您收到错误消息,请务必在第 1 步中下载 bootstrap.sh 文件。

  7. 安装 apigee-setup
    /opt/apigee/apigee-service/bin/apigee-service apigee-setup install
  8. 安装旧版组件:
    /opt/apigee/apigee-setup/bin/setup.sh -p component -f configFile

    其中,component 是要安装的组件,configFile 是要安装旧版本的配置文件。

  9. 如果您要回滚 Qpid,请清空 iptables:
    sudo iptables -F
  10. 对托管要回滚的组件的每个节点重复此过程。

如需从 4.18.05 回滚到 4.17.09 或 4.17.05,除了回滚每个节点上的组件之外,您还必须回滚 Postgres。如果从 4.18.01 回滚,则无需回滚 Postgres,因为升级过程不包含 Postgres 更新。

回滚到先前的更新版本

如需将某个组件回滚到特定版本的版本,请在托管该组件的每个节点上执行以下操作:

  1. 下载特定的组件版本:
    /opt/apigee/apigee-service/bin/apigee-service component_version install

    其中,component_version 是要安装的组件和更新版本。例如:

    /opt/apigee/apigee-service/bin/apigee-service edge-ui-4.17.09-0.0.3749 install

    如果您使用的是 Apigee 在线代码库,则可以使用以下命令确定可用的组件版本:

    yum --showduplicates list comp

    例如:

    yum --showduplicates list edge-ui
  2. 使用 apigee-setup 安装组件:
    /opt/apigee/apigee-setup/bin/setup.sh -p comp -f configFile

    例如:

    /opt/apigee/apigee-setup/bin/setup.sh -p ui -f configFile

    请注意,安装时仅指定组件名称,而非版本。

  3. 对托管要回滚的组件的每个节点重复此过程。

如需从 4.18.05 回滚到 4.17.09 或 4.17.05,除了回滚每个节点上的组件之外,您还必须回滚 Postgres。如果从 4.18.01 回滚,则无需回滚 Postgres,因为升级过程不包含 Postgres 更新。

回滚 Postgres 9.6 更新

如果您从版本 4.17.05 或 4.17.09 升级到 4.18.05,则除了 Edge 组件之外,您还必须回滚 Postgres 更新。

要在主备用配置中更新 Postgres 时回滚 Postgres 更新,请执行以下操作:

  • 将新的备用节点提升为 Postgres 主节点。新的 Postgres 主实例与之前安装的 Edge 的版本相同。
  • 将旧备用节点配置为新主节点的备用节点。旧备用节点的版本与之前安装的 Edge 相同。
  • 向分析群组和使用方群组注册新的主节点和备用节点。

完成回滚后,将不再需要旧的主节点。然后,您可以停用旧的主节点。

  1. 确保新的备用 Postgres 节点正在运行:
    /opt/apigee/apigee-service/bin/apigee-all status

    如果 Postgres 没有运行,请将其启动:

    /opt/apigee/apigee-service/bin/apigee-all start
  2. 确保在旧的主节点和旧的备用节点上停止 Postgres:
    /opt/apigee/apigee-service/bin/apigee-all status

    如果 Postgres 正在运行,请将其停止:

    /opt/apigee/apigee-service/bin/apigee-service edge-postgres-server stop > /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql stop

  3. 如果安装了 Qpid,请在旧的备用节点上启动 Qpid:
    /opt/apigee/apigee-service/bin/apigee-service edge-qpid-server start
  4. 将新的备用节点升级为 Postgres 主实例:
    1. 将新备用节点升级为新主节点
      apigee-service apigee-postgresql promote-standby-to-master new_standby_IP

      如果出现提示,请输入“apigee”用户的 Postgres 密码,默认为“postgres”。

    2. 修改用于安装当前版本 Edge 的配置文件,以指定以下内容:
      # IP address of the new master:
      PG_MASTER=new_standby_IP
      # IP address of the old standby node
      PG_STANDBY=old_standby_IP
    3. 配置新的主实例
      /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql setup-replication-on-master -f configFile
  5. 重新构建旧的备用节点:
    1. 修改用于安装当前版本 Edge 的配置文件,以指定以下内容:
      # IP address of the new master:
      PG_MASTER=new_standby_IP
      # IP address of the old standby node
      PG_STANDBY=old_standby_IP
    2. 移除旧备用节点上的数据目录:
      cd /opt/apigee/data/apigee-postgresql/pgdata > rm -rf *
    3. 将旧备用节点重新配置为新主节点的备用节点:
      /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql setup-replication-on-standby -f configFile
    4. 确保 Postgres 在旧的备用节点上运行:
      /opt/apigee/apigee-service/bin/apigee-all status

      如果它没有运行,请启动它:

      /opt/apigee/apigee-service/bin/apigee-service edge-postgres-server start
  6. 查看新主节点上的 /opt/apigee/apigee-postgresql/conf/pg_hba.conf 文件,验证是否已添加新的备用节点。
  7. 通过在管理服务器上运行以下命令来查看当前的分析和使用方群组信息:
    curl -u sysAdminEmail:password http://ms_IP:8080/v1/analytics/groups/ax

    此命令会在 name 字段中返回分析群组名称,并在 consumer-groups 下的 name 字段中返回使用方群组名称。它还会在 postgres-server 字段和 datastores 字段中返回旧 Postgres 主节点和备用节点的 UUID。您应该会看到以下形式的输出:

    {
      "name" : "axgroup-001",
      "properties" : {
      },
      "scopes" : [ "VALIDATE~test", "sgilson~prod" ],
      "uuids" : {
        "qpid-server" : [ "8381a053-433f-4382-bd2a-100fd37a1592", "4b6856ec-ef05-498f-bac6-ef5f0d5f6521" ],
        "postgres-server" : [
          "ab1158bd-1d59-4e2a-9c95-24cc2cfa6edc:27f90844-efab-4b32-8a23-8f85cdc9a256"
        ]
      },
      "consumer-groups" : [ {
        "name" : "consumer-group-001",
        "consumers" : [ "8381a053-433f-4382-bd2a-100fd37a1592", "4b6856ec-ef05-498f-bac6-ef5f0d5f6521" ],
        "datastores" :
          [ "ab1158bd-1d59-4e2a-9c95-24cc2cfa6edc:27f90844-efab-4b32-8a23-8f85cdc9a256" ],
          "properties" : {     }
        }
      ],
      "data-processors" : {
      }
    }

  8. 通过在旧主节点上运行以下 curl 命令,获取旧主实例的 UUID 地址:
    curl -u sysAdminEmail:password http://node_IP:8084/v1/servers/self

    您应该会在输出末尾看到以下形式的节点 UUID:

    "type" : [ "postgres-server" ],
    "uUID" : "599e8ebf-5d69-4ae4-aa71-154970a8ec75"
  9. 重复执行上一步,获取旧备用节点和新主节点的 IP 地址。
  10. 从使用方组中移除旧的主节点和备用节点:
    curl -u sysAdminEmail:password -X DELETE \
      "http://ms_IP:8080/v1/analytics/groups/ax/axgroup-001/consumer-groups/consumer-group-001/datastores/masterUUID,standbyUUID" -v

    其中,axgroup-001consumer-group-001 是分析群组和使用方群组的默认名称。masterUUID,standbyUUID 的顺序与您在上面查看当前的分析和消费者群体信息时显示的顺序相同。您可能必须将它们指定为 standbyUUID,masterUUID

    consumer-groupsdatastores 属性现在应为空。

  11. 从分析组中移除旧的主节点和备用节点:
    curl -u sysAdminEmail:password -X DELETE \
      "http://ms_IP:8080/v1/analytics/groups/ax/axgroup-001/servers?uuid=masterUUID,standbyUUID&type=postgres-server" -v

    现在,uuids 下的 postgres-server 属性应为空。

  12. 向分析群组和使用方群组注册新的 PG 主节点和备用节点:
    curl -u sysAdminEmail:password -X POST -H "Content-Type: application/json" -d ''
      "http://ms_IP:8080/v1/analytics/groups/ax/axgroup-001/servers?uuid=masterUUID,standbyUUID&type=postgres-server" -v
    curl -u sysAdminEmail:password -X POST -H "Content-Type:application/json" -d ''
      "http://ms_IP:8080/v1/analytics/groups/ax/axgroup-001/consumer-groups/consumer-group-001/datastores?uuid=masterUUID,standbyUUID" -v
  13. 验证分析组:
    curl -u sysAdminEmail:password http://ms_IP:8080/v1/analytics/groups/ax

    您应该会看到分析组和使用方组中列出的新主节点和备用节点的 UUID。

  14. 重启边缘管理服务器:
    /opt/apigee/apigee-service/bin/apigee-service edge-management-server restart
  15. 重启所有 Qpid 服务器:
    /opt/apigee/apigee-service/bin/apigee-service edge-qpid-server restart
  16. 重启所有 Postgres 服务器:
    /opt/apigee/apigee-service/bin/apigee-service edge-postgres-server restart
  17. 通过在两台服务器上发出以下脚本来验证复制状态。系统应在两台服务器上显示相同的结果,以确保复制成功:

    在新主实例上,运行以下命令:

    /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql postgres-check-master

    验证其是否为主服务器。在旧备用节点上:

    /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql postgres-check-standby

    验证设备是否为备用设备。

  18. 在发出多个 API 请求后重复执行上一步,以确保节点已同步。
  19. 按照将 Apigee Edge 4.16.01/4.16.05 更新为 4.17.09 中所述的过程停用旧的 Postgres 主实例。

    或者,您也可以从旧的主节点中卸载 Qpid,并在新的主节点上安装 Qpid。卸载 Qpid 后,您可以停用旧的主节点。

从旧主实例中卸载 Qpid,并在新主实例上安装 Qpid

要从旧的主实例中卸载 Qpid,并将其安装到新的主实例上,请执行以下操作:

  1. 通过在所有消息处理器上运行以下命令,阻止消息处理器访问旧主节点上的 Qpid 端口 5672:
    iptables -A OUTPUT -p tcp -d 10.233.147.20 --dport 5672 -j DROP
  2. 运行以下命令,确保 Qpid 消息队列为空。在 Qpid 处理完所有待处理消息之前,您无法卸载它:
    qpid-stat -q

    此命令会显示一个包含 msg, msgIn, and msgOut 计数的表。 当 msg=0msgIn=msgOut 时,所有消息都将处理完毕。

  3. 在旧主实例上运行以下命令,确定旧主实例上 Qpid 服务器的 UUID。保存此信息,以便在后续步骤中使用:
    curl -u sysAdminEmail:password http://node_IP::8083/v1/servers/self
  4. 在旧主实例上停止 Qpid:
    /opt/apigee/apigee-service/bin/apigee-service edge-qpid-server stop
    /opt/apigee/apigee-service/bin/apigee-service apigee-qpidd stop
  5. 卸载 Qpid 服务器:
    /opt/apigee/apigee-service/bin/apigee-service edge-qpid-server uninstall
    /opt/apigee/apigee-service/bin/apigee-service apigee-qpidd uninstall
  6. 从分析和使用方群组中移除旧的 Qpid 服务器:
    curl -u sysAdminEmail:password -X DELETE -H "Content-Type: application/json" -d '' \
      "http://ms_IP:8080/v1/analytics/groups/ax/axgroup-001/consumer-groups/consumer-group-001/consumers/qpid_UUID" -v
    curl -u sysAdminEmail:password -X DELETE \
      "http://ms_IP:8080/v1/analytics/groups/ax/axgroup-001/servers?uuid=qpid_UUID&type=qpid-server" -v
  7. 从 ZooKeeper 中移除旧的 Qpid 服务器:
    curl -u sysAdminEmail:password -X DELETE \
      http://ms_IP:8080/v1/servers/qpid_UUID
  8. 在新主实例上安装 Qpid:
    /opt/apigee/apigee-setup/bin/setup.sh -p qs -f configFile
  9. 在新主实例上运行以下命令,确定新主实例上 Qpid 服务器的 UUID。保存此信息,以便在后续步骤中使用:
    curl -u sysAdminEmail:password
      http://node_IP::8083/v1/servers/self
  10. 向分析群组和消费者群组注册新的 Qpid 服务器:
    curl -u sysAdminEmail:password -X POST -H "Content-Type: application/json" -d '' \
      "http://ms_IP:8080/v1/analytics/groups/ax/axgroup-001/servers?uuid=qpid_UUID&type=qpid-server" -v
    curl -u sysAdminEmail:password -X POST -H "Content-Type:application/json" -d '' \
      "http://ms_IP:8080/v1/analytics/groups/ax/axgroup-001/consumer-groups/consumer-group-001/consumers?uuid=qpid_UUID" -v
  11. 重启所有消息处理器:
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
  12. 在新的 Qpid 服务器上运行以下命令,检查是否已创建队列:
    qpid-stat -q

    确保在 Qpid 服务器处理消息时,您看到 msgmsgInmsgOut 会更新。

如果您在回滚时遇到问题,请与 Apigee Edge 支持团队联系。