使用容器为 AlloyDB Omni 执行次要版本升级

选择文档版本:

如需应用 bug 修复、安全补丁和次要增强功能,而无需迁移数据,请在同一主要版本轨道中将容器映像替换为更高次要版本映像,从而为 AlloyDB Omni 执行次要数据库版本升级。次要版本升级会保留现有的主机数据目录和配置文件,并允许您验证升级后的安装,或在需要时回滚到更早的次要版本。

如需在 PostgreSQL 主要版本之间进行升级,请参阅在虚拟机上升级 AlloyDB Omni。

本页面上的说明适用于独立单节点部署以及多节点拓扑中的各个数据库节点,例如具有读取副本或高可用性备用节点的部署。根据您的设置,查看以下注意事项:

  • 外部数据目录:在停止并移除容器之前,请确认您的数据库数据存储在装载到容器中的永久性主机目录(例如 -v DATA_DIR:/var/lib/postgresql/data)中。移除仅在容器文件系统中存储数据的容器会删除您的数据库数据。如需了解详情,请参阅使用容器安装 AlloyDB Omni。
  • 多节点拓扑:在升级主节点之前,请务必先升级所有副本节点和备用节点。在高可用性设置中,请先暂停自动故障切换或故障检测,然后再停止容器;在升级前主节点之前,请先切换到已升级的备用节点。
  • 具有扩展程序的自定义容器映像:如果您使用 PostGIS 或 Orafce 等第三方扩展程序构建了自定义容器映像,请先使用更新后的次要版本基础映像重新构建自定义容器映像,然后再重新创建容器。

准备工作

在升级 AlloyDB Omni 之前,请完成以下步骤:

  1. 规划维护窗口或短暂的服务停机时间,因为更换容器需要暂时停止数据库服务。
  2. 在开始升级之前,请对数据库进行完整备份。如需了解详情,请参阅备份和恢复概览。
  3. 如果您要升级多节点拓扑,请确定当前的主节点以及所有备用节点或副本节点,以便先升级备用节点和副本节点。
  4. 检查正在运行的容器,记录其当前映像、主机数据目录装载、端口映射、环境变量和运行时标志,以便您可以使用相同的配置重新创建容器:

    Docker

    docker inspect CONTAINER_NAME

    Podman

    podman inspect CONTAINER_NAME

    将 CONTAINER_NAME 替换为您的 AlloyDB Omni 容器的名称,例如 my-omni。

  5. 在升级之前,请检查当前的 AlloyDB Omni 数据库版本:

    Docker

    docker exec -it CONTAINER_NAME psql -h localhost -U postgres -c "SELECT version();"

    Podman

    podman exec -it CONTAINER_NAME psql -h localhost -U postgres -c "SELECT version();"

拉取更新后的容器映像

将目标次要版本容器映像拉取到宿主机:

Docker

docker pull IMAGE_URI

Podman

podman pull IMAGE_URI

将 IMAGE_URI 替换为您要升级到的容器映像 URI 和次要版本标记,例如,Debian 映像的 google/alloydbomni:18.4.0 或 Red Hat 通用基础映像 (UBI) 的 google/alloydbomni:18.4.0-ubi9。

如果您的部署使用带有 PostGIS 或 Orafce 等扩展程序的自定义容器映像,请更新 Dockerfile 中的 FROM 指令或 OMNI_VERSION 构建参数,以引用更新后的次要版本标记,然后在继续操作之前构建更新后的自定义映像。

升级 AlloyDB Omni

如需将 AlloyDB Omni 安装升级到更高的次要版本,请在每个节点上完成以下步骤。在多节点拓扑中,请先在每个备用节点或副本节点上完成以下步骤,然后再升级主节点:

  1. 停止并移除现有的 AlloyDB Omni 容器:

    Docker

    docker container stop CONTAINER_NAME
    docker container rm CONTAINER_NAME

    Podman

    podman container stop CONTAINER_NAME
    podman container rm CONTAINER_NAME

    停止并移除容器不会影响装载的主机数据目录中的数据库文件。

  2. 使用更新后的次要版本映像并装载现有主机数据目录,重新创建并启动 AlloyDB Omni 容器:

    Docker

    docker run -d --name CONTAINER_NAME \
      -e POSTGRES_PASSWORD=PASSWORD \
      -v DATA_DIR:/var/lib/postgresql/data \
      -p HOST_PORT:5432 \
      --restart=always \
      IMAGE_URI

    Podman

    podman run -d --name CONTAINER_NAME \
      -e POSTGRES_PASSWORD=PASSWORD \
      -v DATA_DIR:/var/lib/postgresql/data \
      -p HOST_PORT:5432 \
      --restart=always \
      IMAGE_URI

    替换以下内容:

    • CONTAINER_NAME:AlloyDB Omni 容器的名称,例如 my-omni。
    • PASSWORD:容器的 postgres 用户的密码。装载现有初始化数据目录时,容器会保留数据库中配置的现有密码。
    • DATA_DIR:存储现有数据库数据的主机目录路径。
    • HOST_PORT:发布容器端口 5432 的宿主机上的 TCP 端口,例如 5432。
    • IMAGE_URI:更新后的次要版本容器映像 URI(或重新构建的自定义映像 URI),例如 google/alloydbomni:18.4.0。

    使用与上一个容器相同的基本操作系统映像变体(Debian 或 UBI),以便主机数据目录中的文件所有权与容器的 postgres 用户匹配。如果之前的容器使用了其他运行时标志(例如 --ulimit、--log-driver、--shm-size 或 -v /dev/shm:/dev/shm),请在重新创建容器时添加这些标志。如需了解详情,请参阅设置 AlloyDB Omni 以用于生产。

验证升级

重新创建并启动容器后,确认数据库服务正在运行更新后的次要版本:

  1. 检查 AlloyDB Omni 容器的状态,并确认其状态为 Up:

    Docker

    docker ps --filter "name=CONTAINER_NAME"

    Podman

    podman ps --filter "name=CONTAINER_NAME"
  2. 连接到数据库,并确认升级后的版本处于活跃状态:

    Docker

    docker exec -it CONTAINER_NAME psql -h localhost -U postgres -c "SELECT version();"

    Podman

    podman exec -it CONTAINER_NAME psql -h localhost -U postgres -c "SELECT version();"

回滚升级

如果您需要将 AlloyDB Omni 安装还原到先前的次要版本,请停止并移除升级后的容器,然后启动使用先前次要版本映像的容器:

  1. 停止并移除升级后的 AlloyDB Omni 容器:

    Docker

    docker container stop CONTAINER_NAME
    docker container rm CONTAINER_NAME

    Podman

    podman container stop CONTAINER_NAME
    podman container rm CONTAINER_NAME
  2. 使用之前的次要版本映像并装载相同的主机数据目录,重新创建并启动容器:

    Docker

    docker run -d --name CONTAINER_NAME \
      -e POSTGRES_PASSWORD=PASSWORD \
      -v DATA_DIR:/var/lib/postgresql/data \
      -p HOST_PORT:5432 \
      --restart=always \
      ROLLBACK_IMAGE_URI

    Podman

    podman run -d --name CONTAINER_NAME \
      -e POSTGRES_PASSWORD=PASSWORD \
      -v DATA_DIR:/var/lib/postgresql/data \
      -p HOST_PORT:5432 \
      --restart=always \
      ROLLBACK_IMAGE_URI

    替换以下内容:

    • CONTAINER_NAME:AlloyDB Omni 容器的名称,例如 my-omni。
    • PASSWORD:容器的 postgres 用户的密码。装载现有初始化数据目录时,容器会保留数据库中配置的现有密码。
    • DATA_DIR:存储现有数据库数据的主机目录路径。
    • HOST_PORT:发布容器端口 5432 的宿主机上的 TCP 端口,例如 5432。
    • ROLLBACK_IMAGE_URI:先前安装的容器映像 URI 和次要版本标记(或先前的自定义映像 URI),例如 google/alloydbomni:18.1.0。
  3. 确认容器正在运行,并且之前的数据库版本处于活跃状态:

    Docker

    docker ps --filter "name=CONTAINER_NAME"
    docker exec -it CONTAINER_NAME psql -h localhost -U postgres -c "SELECT version();"

    Podman

    podman ps --filter "name=CONTAINER_NAME"
    podman exec -it CONTAINER_NAME psql -h localhost -U postgres -c "SELECT version();"

后续步骤