如需在 PostgreSQL 主要版本之间进行升级,请参阅在虚拟机上升级 AlloyDB Omni。
本页面上的说明适用于独立单节点部署以及多节点拓扑中的各个数据库节点,例如具有读取副本或高可用性备用节点的部署。根据您的设置,查看以下注意事项:
- 外部数据目录:在停止并移除容器之前,请确认您的数据库数据存储在装载到容器中的永久性主机目录(例如
-v DATA_DIR:/var/lib/postgresql/data)中。移除仅在容器文件系统中存储数据的容器会删除您的数据库数据。如需了解详情,请参阅使用容器安装 AlloyDB Omni。 - 多节点拓扑:在升级主节点之前,请务必先升级所有副本节点和备用节点。在高可用性设置中,请先暂停自动故障切换或故障检测,然后再停止容器;在升级前主节点之前,请先切换到已升级的备用节点。
- 具有扩展程序的自定义容器映像:如果您使用 PostGIS 或 Orafce 等第三方扩展程序构建了自定义容器映像,请先使用更新后的次要版本基础映像重新构建自定义容器映像,然后再重新创建容器。
准备工作
在升级 AlloyDB Omni 之前,请完成以下步骤:
- 规划维护窗口或短暂的服务停机时间,因为更换容器需要暂时停止数据库服务。
- 在开始升级之前,请对数据库进行完整备份。如需了解详情,请参阅备份和恢复概览。
- 如果您要升级多节点拓扑,请确定当前的主节点以及所有备用节点或副本节点,以便先升级备用节点和副本节点。
检查正在运行的容器,记录其当前映像、主机数据目录装载、端口映射、环境变量和运行时标志,以便您可以使用相同的配置重新创建容器:
Docker
docker inspect CONTAINER_NAMEPodman
podman inspect CONTAINER_NAME将
CONTAINER_NAME替换为您的 AlloyDB Omni 容器的名称,例如my-omni。在升级之前,请检查当前的 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_URIPodman
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 安装升级到更高的次要版本,请在每个节点上完成以下步骤。在多节点拓扑中,请先在每个备用节点或副本节点上完成以下步骤,然后再升级主节点:
停止并移除现有的 AlloyDB Omni 容器:
Docker
docker container stop CONTAINER_NAME docker container rm CONTAINER_NAMEPodman
podman container stop CONTAINER_NAME podman container rm CONTAINER_NAME停止并移除容器不会影响装载的主机数据目录中的数据库文件。
使用更新后的次要版本映像并装载现有主机数据目录,重新创建并启动 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_URIPodman
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 以用于生产。
验证升级
重新创建并启动容器后,确认数据库服务正在运行更新后的次要版本:
检查 AlloyDB Omni 容器的状态,并确认其状态为
Up:Docker
docker ps --filter "name=CONTAINER_NAME"Podman
podman ps --filter "name=CONTAINER_NAME"连接到数据库,并确认升级后的版本处于活跃状态:
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 安装还原到先前的次要版本,请停止并移除升级后的容器,然后启动使用先前次要版本映像的容器:
停止并移除升级后的 AlloyDB Omni 容器:
Docker
docker container stop CONTAINER_NAME docker container rm CONTAINER_NAMEPodman
podman container stop CONTAINER_NAME podman container rm CONTAINER_NAME使用之前的次要版本映像并装载相同的主机数据目录,重新创建并启动容器:
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_URIPodman
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。
确认容器正在运行,并且之前的数据库版本处于活跃状态:
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();"