从 AlloyDB Omni 15.5.2 及更低版本迁移到最新版本

本页介绍了如何从版本 15.5.2 及更低版本迁移到最新版 AlloyDB Omni。

从 AlloyDB Omni 15.5.4 开始,您可以使用常用软件包管理工具控制 AlloyDB Omni。

如果您已安装 AlloyDB Omni,请按照本页中的说明迁移到新的单映像安装。

前提条件

在开始升级到最新版本的 AlloyDB Omni 之前,如果您尚未完成以下前提条件,请先完成这些前提条件。

升级到 AlloyDB Omni 15.5.2

支持 AlloyDB Omni CLI 的最新 AlloyDB Omni 版本为 15.5.2。如需检查 AlloyDB Omni 的版本,请运行以下命令:

sudo alloydb version

输出类似于以下内容:

AlloyDB Omni CLI version: 1.6
AlloyDB Omni database server version: 15.5.2

如果输出显示的数据库版本低于 15.5.2,请运行以下命令进行升级:

sudo alloydb database-server upgrade

收集有关现有安装的信息

  1. 运行以下命令:

    cat /var/alloydb/config/dataplane.conf
  2. cat 命令的输出中,记下以下变量的值以供参考:

    • DATADIR_PATH,例如 /var/alloydb/main
    • ENABLE_ALLOYDB_AI,例如 FALSE
    • PGPORT,例如 5432
    • INSTANCE_TYPE,例如 PRIMARY/READ_REPLICA

删除使用 postgres_ann 扩展程序创建的 ScaNN 索引

postgres_ann 扩展程序已重命名为 alloyd_scann。如果您已安装 postgres_ann 扩展程序并使用该扩展程序创建了 ScaNN 索引,则必须先删除所有 ScaNN 索引并卸载该扩展程序,然后才能执行升级。

如需处理因重命名 postgres_ann 扩展程序而对数据库造成的任何影响,请完成以下步骤:

  1. 运行并连接到 AlloyDB Omni。
  2. 确定使用 ScaNN 索引的所有表。

     \c DATABASE_NAME
     select schemaname, relname, indexrelname, indextype, indexconfig, indexsize, indexscan FROM pg_stat_ann_indexes;

    DATABASE_NAME 替换为您要运行查询的数据库的名称。

  3. 使用 pg_dump 等实用程序将索引定义和参数保存为转储 DDL,以便稍后重新创建 ScaNN 索引。

    pg_dump -st TABLE_NAME DATABASE_NAME

    替换以下内容:

    • DATABASE_NAME:数据库的名称。
    • TABLE_NAME:表的名称。
  4. 删除使用 postgres_ann 索引创建的 ScaNN 索引。

    DROP INDEX INDEX_NAME;

    INDEX_NAME 替换为您要运行查询的数据库的名称。

  5. 验证您的所有数据库都不包含 ScaNN 索引。使用以下 SQL 查询验证删除操作:以下 SQL 应返回空结果集。

     \c DATABASE_NAME
     select schemaname, relname, indexrelname, indextype, indexconfig, indexsize, indexscan FROM pg_stat_ann_indexes;
  6. 请按照以下步骤移除 postgres_ann 扩展程序:

    1. 验证 postgres_ann 扩展程序是否已安装在数据库中。
    select * from pg_extension;
    1. 舍弃 postgres_ann 扩展。
    DROP EXTENSION postgres_ann CASCADE;
    1. 验证数据库中是否不再安装 postgres_ann 扩展程序。
    select * from pg_extension;

执行就地升级

  1. 停止现有数据库:

    sudo alloydb database-server stop
  2. 启动新的单映像 AlloyDB Omni,并挂载之前的现有数据目录:

    docker run --name CONTAINER_NAME \
        -e POSTGRES_PASSWORD=PASSWORD \
        -e PGDATA=/var/lib/postgresql/data \
        -v /var/alloydb/main/data:/var/lib/postgresql/data \
        -v /dev/shm:/dev/shm \
        -p PGPORT:5432 \
        --network=host \
        --ulimit=nice=-20:-20 \
        --ulimit=core=-1:-1 \
        --log-driver=journald \
        -d google/alloydbomni:15.5.5

    替换以下内容:

    • CONTAINER_NAME:要在宿主机的容器注册表中为此新的 AlloyDB Omni 容器分配的名称,例如 my-omni

    • PASSWORD:为新容器的 postgres 用户在创建后分配的密码。

    • PGPORT:AlloyDB Omni 运行的端口的 IP 地址。这是您在收集现有安装的相关信息的第 2 步中记下的值。

    docker run 的参数是早期版本 AlloyDB Omni 中使用的参数,但您可以进一步对其进行自定义。如需了解详情,请参阅自定义 AlloyDB Omni 安装

  3. 如果您的数据库实例类型为 PRIMARY,请运行以下命令以创建以下用户。这些用户名目前未使用,但预留以供日后扩展。

    for name in alloydbagent alloydbexport alloydbiamgroupuser alloydbiamuser alloydbimportexport alloydbobservability alloydbsqllogical alloydbsuperuser; do
      echo docker exec -it CONTAINER_NAME psql -h localhost -U postgres alloydbadmin \
        -c "CREATE ROLE ${name} NOLOGIN;" \
        -c "CREATE TABLE ${name}_table();" \
        -c "ALTER TABLE ${name}_table OWNER TO ${name};"
    done
  4. 如果 ENABLE_ALLOYDB_AI 设置为 TRUE,请按照安装 AlloyDB Omni 和 AlloyDB AI中的说明设置 AlloyDB AI。

  5. 连接到数据库,验证数据是否保持不变:

    docker exec -it CONTAINER_NAME psql -h localhost -U postgres
  6. 卸载 AlloyDB Omni CLI:

    sudo alloydb database-server uninstall

    卸载 AlloyDB Omni CLI 不会影响您存储在 AlloyDB Omni 中的数据。

使用 alloydb_scann 扩展重新创建 ScaNN 索引

升级 AlloyDB Omni 后,系统还会安装 alloydb_scann 扩展程序。请完成以下步骤,重新创建您在升级前删除的使用 postgres_ann 扩展程序创建的 ScaNN 索引部分中删除的 ScaNN 索引。

  1. 按照以下步骤创建 alloydb_scann 扩展程序:

    1. 如需创建 alloydb_scann 扩展程序,请运行以下查询:
    create extension alloydb_scann cascade;
    1. 验证 alloydb_scann 扩展程序是否已成功创建。
    select * from pg_extension;
  2. 为表重新创建 ScaNN 索引,然后恢复之前的 pg_dump DDL 索引定义。

    1. 在表上创建 ScaNN 索引:
    CREATE INDEX INDEX_NAME ON TABLE_NAME
        USING scann (VECTOR_COLUMN DISTANCE)
        WITH (num_leaves = NUM_LEAVES_VALUE);

    替换以下内容:

    • INDEX_NAME:索引的名称。
    • TABLE_NAME:表的名称。
    • VECTOR_COLUMN:存储向量数据的列的名称。
    • DISTANCE:要与此索引搭配使用的距离函数。
    • NUM_LEAVES_VALUE:要应用于索引的分区数量。
    1. 验证是否已创建索引。
    \d TABLE_NAME
    1. 建议:备份索引数据。我们建议您创建数据库和索引的备份,这是最佳实践。