将企业数据库迁移到 Eon 模式

MIGRATE_ENTERPRISE_TO_EON 函数会将企业数据库迁移到 Eon 模式。迁移过程包括以下阶段:

  1. 检查迁移先决条件

  2. 验证合规性

  3. 执行迁移

  4. 检查迁移结果

  5. 激活 Eon 数据库

迁移先决条件

必须满足以下条件;否则 MIGRATE_ENTERPRISE_TO_EON 将返回错误:

  • 源企业数据库版本必须不低于 10.0。

  • 源数据库中的所有节点必须处于 UP 状态,且类型为 PERMANENT 或 EPHEMERAL。通过查询 NODES 系统表进行验证:

    => SELECT node_name, node_type, node_state FROM nodes;
        node_name     | node_type | node_state
    ------------------+-----------+------------
     v_vmart_node0001 | PERMANENT | UP
     v_vmart_node0002 | PERMANENT | UP
     v_vmart_node0003 | PERMANENT | UP
    (3 rows)
    
  • 必须将源数据库配置为弹性群集。默认情况下,将自 Vertica 版本 9.2.1 起创建的任何数据库配置为弹性群集。要验证是否已将企业数据库配置为弹性群集,请查询 ELASTIC_CLUSTER 系统表:

    => SELECT is_enabled FROM elastic_cluster;
     is_enabled
    ------------
     t
    (1 row)
    

    如果查询返回 false,请对企业数据库调用 ENABLE_ELASTIC_CLUSTER 函数。

  • 源企业数据库必须根据目标 Eon 对象存储的要求(请参阅下面的配置要求)来配置 Eon 参数。

  • 该数据库不得包含不受 Eon 支持的投影

不受支持的投影

Eon 数据库不支持四种类型的投影,如下所述。如果 MIGRATE_ENTERPRISE_TO_EON 在企业数据库中找到这些投影类型中的任何一种,它将回滚迁移并在迁移错误日志中报告违规投影或其锚表。例如:

The following projections are inconsistent with cluster segmentation. Rebalance them with REBALANCE_CLUSTER() or REBALANCE_TABLE():
Projection(Anchor Table): public.incon1_p1_b0(public.incon1)

配置要求

在迁移之前,您必须在源数据库中设置某些配置参数。具体参数取决于 Eon 数据库的环境。

S3:AWS、Pure Storage、MinIO

以下要求适用于所有受支持的云和非云(本地)S3 环境:AWS、Pure Storage 和 MinIO。但有一个例外:通过 AWS 从企业模式数据库迁移时不适用。

Azure

  • 您必须使用 azb:// 架构 URI 来设置用于公共数据存储的 Azure Blob 存储位置。有关此 URI 的格式,请参阅 Azure Blob 存储对象存储

  • 请选择以下身份验证方法之一以授予 Vertica 对存储位置的访问权限:

    • 配置托管标识以授予 Azure VM 对存储位置的访问权限。此选项不需要在 Vertica 中进行任何配置。

    • 在数据库级别设置 AzureStorageCredentialsAzureStorageEndpointConfig 配置参数,以使 Vertica 使用存储位置进行身份验证。

有关这两种身份验证方法的详细信息,请参阅 Azure Blob 存储对象存储

GCP

HDFS

合规性验证

在运行迁移之前,请检查企业源数据库是否符合所有迁移要求。您可以通过将 MIGRATE_ENTERPRISE_TO_EON 的最后一个布尔实参设置为 true 来表示这是一次试运行而不是实际迁移:

=> SELECT migrate_enterprise_to_eon('s3://dbbucket', '/vertica/depot', true);

如果该函数遇到任何合规性问题,它会将这些问题写入数据库目录中的迁移错误日志 migrate_enterprise_to_eon_error.log 中。

迁移执行

MIGRATE_ENTERPRISE_TO_EON 将企业数据库迁移到 Eon 模式数据库。例如:

=> SELECT migrate_enterprise_to_eon('s3://dbbucket', '/vertica/depot', false);

如果最后一个实参被忽略或为 false,则该函数会执行迁移。MIGRATE_ENTERPRISE_TO_EON 将在前台运行,直到它返回成功或错误(阻止在源企业数据库上的同一会话中执行所有操作)。如果成功,MIGRATE_ENTERPRISE_TO_EON 将返回已迁移数据库中的节点的列表。然后,您可以继续恢复已迁移的 Eon 数据库

处理中断的迁移

如果迁移在该函数返回结果(例如,客户端断开连接或发生网络中断)之前中断,则迁移会出错。在这种情况下,请调用 MIGRATE_ENTERPRISE_TO_EON 以重新开始迁移。

目标数据库的公共存储将保留发生错误之前已复制的数据。当您调用 MIGRATE_ENTERPRISE_TO_EON 以恢复迁移时,该函数会先检查公共存储上的数据,然后仅从源数据库复制未处理的数据。

重复迁移

您可以多次重复迁移到同一个公共存储位置。这对于回填上一次迁移期间在源数据库中进行的更改很有用。

以下约束适用:

  • 您只能从一个数据库迁移到同一公共存储位置。

  • 恢复新迁移的 Eon 数据库后,您无法再次迁移到其公共存储,除非您先删除数据库,然后再清理存储。

监控迁移

DATABASE_MIGRATION_STATUS 系统表会实时显示迁移进度,还会存储以前迁移的数据。以下示例显示正在进行迁移的数据:

=> SELECT node_name, phase, status, bytes_to_transfer, bytes_transferred, communal_storage_location FROM database_migration_status ORDER BY node_name, start_time;
     node_name    |       phase        |  status   | bytes_to_transfer | bytes_transferred | communal_storage_location
------------------+--------------------+-----------+-------------------+------------------+---------------------------
 v_vmart_node0001 | Catalog Conversion | COMPLETED |                 0 |                0 | s3://verticadbbucket/
 v_vmart_node0001 | Data Transfer      | COMPLETED |              1134 |             1134 | s3://verticadbbucket/
 v_vmart_node0001 | Catalog Transfer   | COMPLETED |              3765 |             3765 | s3://verticadbbucket/
 v_vmart_node0002 | Catalog Conversion | COMPLETED |                 0 |                0 | s3://verticadbbucket/
 v_vmart_node0002 | Data Transfer      | COMPLETED |              1140 |             1140 | s3://verticadbbucket/
 v_vmart_node0002 | Catalog Transfer   | COMPLETED |              3766 |             3766 | s3://verticadbbucket/
 v_vmart_node0003 | Catalog Conversion | COMPLETED |                 0 |                0 | s3://verticadbbucket/
 v_vmart_node0003 | Data Transfer      | RUNNING   |           5272616 |           183955 | s3://verticadbbucket/

错误日志记录

MIGRATE_ENTERPRISE_TO_EON 会在数据库目录的 migrate_enterprise_to_eon_error.log 中记录与迁移相关的警告、错误和提示。在执行期间,该函数还会将消息以及错误日志的路径名一起打印到标准输出中。

转换结果

请按如下方式处理源数据库中的可见对象:

  • 全局编录对象:已同步到公共存储。

  • 同一伙伴实例投影组中的多个分段投影:将迁移组中的一个投影。

  • 仅在一个节点上复制的未分段投影:分布在所有节点上。

  • 节点数:相同数量的节点,以及相等数量的分段分片。您可能希望更改分片数量,以提高与子群集中节点数量的一致性。有关详细信息,请参阅RESHARD_DATABASE

  • USER 和 TEMP 存储位置:已迁移。请考虑评估所有已迁移的存储位置与 Eon 模式数据库的相关性。有关详细信息,请参阅临时数据的 S3 存储

  • DATA 和 TEMP,DATA 存储位置:未迁移。新的默认 DATA 和 TEMP,DATA 位置与存储库位于同一路径上。

  • 故障组和存储策略:未迁移。

  • 外部过程:未迁移。

  • 与网络设置(负载均衡组、网络地址、路由规则、子网等)相关的编录对象:未迁移。

存储库位置是在 MIGRATE_ENTERPRISE_TO_EON 中指定的。恢复后,将默认存储库大小设置为本地文件系统的 80%。

Eon 数据库激活

HDFS 先决条件

如果迁移到具有 HDFS 公共存储的 Eon 数据库,请创建在恢复新的 Eon 数据库时要使用的引导文件。引导文件必须位于要启动恢复操作的同一节点上,并且可以由启动恢复操作的用户读取。

仅当新的 Eon 数据库使用以下一项或两项时,才需要引导文件:

  • 高可用性 (HA) 名称节点:将 HadoopConfDir 设为 hdfs-site.xml 配置文件的位置 — 通常为 /etc/hadoop/conf。此文件定义了 hdfs.nameservices 参数和各个名称节点,并且必须分布在所有群集节点上。有关详细信息,请参阅配置 HDFS 访问

  • Kerberos 身份验证:设置以下 Kerberos 配置参数

    • KerberosServiceName

    • KerberosRealm

    • KerberosKeytabFile

例如,采用 HA 和 Kerberos 身份验证的 Eon 数据库的引导文件必须具有以下设置:

HadoopConfDir = config-path
KerberosServiceName = principal-name
KerberosRealm = realm-name
KerberosKeytabFile = keytab-path

所有迁移

迁移完成且 Eon 数据库已做好使用准备后,请执行以下步骤:

  1. 请使用以下方法之一恢复数据库:

    • 使用管理控制台从 S3GCP 上的公共存储恢复。
    • 使用管理工具从 Azure、S3、GCP 或 HDFS 上的公共存储恢复。

    在以下示例中,管理工具 revive_db 命令会恢复使用 S3 公共存储的三节点数据库:

    admintools -t revive_db
       -x auth_params.conf \
       --communal-storage-location=s3://verticadbbucket \
       -d VMart \
       -s 172.16.116.27,172.16.116.28,172.16.116.29 \
       --force
    

    在下一个示例中,revive_db 会恢复使用 HDFS 公共存储的三节点数据库:

    admintools -t revive_db
       -x bootstrap_params.conf \
      --communal-storage-location=webhdfs://mycluster/verticadb \
      -d verticadb \
      -s vnode01,vnode02,vnode03
    
  2. 检查 /opt/vertica/config/admintools.conf 中的 controlmode 设置。此设置必须与实施 Eon 需满足的网络消息传递要求兼容。例如,S3/AWS (Amazon Cloud) 依赖于单播消息传递,这与 point-to-point (pt2pt) 的 controlmode 设置兼容。如果源数据库 controlmode 设置为 broacast 且迁移到 S3/AWS 公共存储,则必须使用管理工具来更改 controlmode

    $ admintools -t re_ip -d dbname -T
    
  3. 启动 Eon 模式数据库。

  4. 调用 CLEAN_COMMUNAL_STORAGE 以移除迁移过程中可能留下的不需要的数据文件。

  5. 如果迁移到 S3 本地公共存储(Pure Storage 或 MinIO),则使用 ALTER DATABASE...SET PARAMETERAWSStreamingConnectionPercentage 配置参数设为 0。

  6. 查看存储库存储位置大小并根据需要进行调整

  7. 如果分片数量不是最佳,请考虑重新切分 Eon 模式数据库。有关详细信息,请参阅选择分片数和初始节点计数。如果需要,请使用 RESHARD_DATABASE 来更改分片数量。