怎樣將企業模式的Vertica數據庫遷移到EON
版本日志
| 日期 | 修改內容 |
|---|---|
| 20211222 | 初建 |
| 20220407 | 1、增加不支持的projection類型列表。 2、增加在源庫上的參數配置介紹 |
前言
Vertica EON 模式的共享存儲支持 AWS、GCP、Azure、Ali等公有云存儲,還有 minio、HDFS 等私有云存儲。如果您是老用戶,可能您現在的Vertica數據庫是跑在企業模式部署下的,如果您希望將現在的企業模式數據庫轉換為 EON 數據庫,如果沒有自動工具,將企業模式數據庫遷移到云存儲上變為EON數據庫非常麻煩,通常只能通過業務數據遷移的辦法。
為了促進和加速從企業模式到 EON 模式的遷移,Vertica 提供了新的函數 MIGRATE_ENTERPRISE_TO_EON ,實現企業模式到 EON 的數據庫轉換。
遷移前準備
- 數據庫版本在10.0及以上,10.0以下版本不支持進行遷移。
- 待遷移數據庫集群和共享存儲之間的配置已經完成。
- 只能對企業數據庫進行遷移。
- 企業數據庫中的所有節點在數據庫遷移時必須處于UP狀態,以保證能夠完成目錄轉換和數據文件傳輸。
- 企業數據庫中的所有節點都必須是 PERMANENT 或 EHEMERAL 類型。 集群中存在任何 EXECUTE 或 STANDBY 的節點都會導致錯誤。
- S3 credentials 和 (endpoint for non-AWS locations)必須在配置參數中以確保正確復制數據和目錄。
- 企業數據庫中所有分段projection的分段必須與集群分段相同。
- 企業數據庫中不允許有非彈性分割的projection
- 企業數據庫必須是彈性集群
- 企業數據庫中不允許使用 groupROSes 或未捆綁的存儲文件
不支持的Projection
Eon 數據庫不支持四種類型的投影,如下所述。如果 MIGRATE_ENTERPRISE_TO_EON 在 Enterprise 數據庫中找到任何這些投影類型,它會回滾遷移并在遷移錯誤日志中報告有問題的投影或其表名。例如:
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)
| 不支持的原因 | 說明 | 解決方法 |
|---|---|---|
| projection未分布到所有節點 | 例如,在集群中添加了節點,因此當前投影數據的分布與新的集群分割要求不一致。 | 重分布集群或者表 錯誤日志文件列出了所有投影有問題的表的名稱。 您可以使用 REBALANCE_TABLE函數,將這些表進行重分布。 您還可以通過調用 REBALANCE_CLUSTER函數重新分布數據庫中所有未分布到所有節點的表。 |
| projection不支持彈性分割 | 使用NODES選項創建projection。 在禁用彈性分段的數據庫中創建的projection。 |
刪除投影,使用所有節點重新創建。 |
| 使用 GROUPED 子句定義 | 在單個 ROS 容器中合并多個列 | 刪除投影,重新創建沒有 GROUPED 子句。 |
| 存儲在非捆綁存儲容器中的數據 | 僅在版本 7.2 中引入存儲容器捆綁之前創建的 Vertica 數據庫中發現。 | 使用元函數 COMPACT_STORAGE 在數據庫中捆綁存儲容器。 錯誤日志使用將數據存儲在非捆綁存儲容器中的投影來命名所有表。您可以將這些名稱用作元函數 COMPACT_STORAGE 的參數。 |
必要的參數配置
遷移前,在源數據庫上設置以下配置參數。所有參數都必須在數據庫級別設置。
| 目標 Eon 環境 | 配置要求 |
|---|---|
| S3: AWS, Pure Storage, MinIO | 以下要求適用于所有受支持的云和非云(本地)環境:AWS、Pure Storage 和 MinIO。 有一個例外情況:從 AWS 上的企業模式數據庫遷移。 AWSEndpoint (Pure Storage, MinIO only) AWSRegion (AWS only) AWSAuth / IAM role AWSEnableHttps 注意: 如果使用 Pure Storage 和 MinIO 遷移到本地公共存儲,請將配置參數 AWSEnableHttps 設置為與數據庫 TLS 加密設置兼容:如果使用 TLS,則 AWSEnableHttps=1,否則為 0。如果設置不兼容,則遷移返回錯誤。 |
| Azure | 1、必須使用 azb:// 架構 URI 來設置用于公共數據存儲的 Azure Blob 存儲位置。有關此 URI 的格式,請參閱 Azure Blob 存儲對象存儲。 2、選擇以下身份驗證方法之一以授予 Vertica 對存儲位置的訪問權限: ?2.1、配置托管標識以授予 Azure VM 訪問存儲位置的權限。此選項不需要在 Vertica 中做任何配置。 ?2.2、在數據庫級別設置 AzureStorageCredentials 和 AzureStorageEndpointConfig 配置參數,讓 Vertica 使用存儲位置進行身份驗證。 有關這兩種身份驗證方法的詳細信息,請參閱 Azure Blob 存儲對象存儲。 |
| GCP | GCSEndpoint GCSAuth GCSEnableHttp |
| HDFS | 適用以下要求: 源數據庫必須配置為訪問 HDFS,包括(如適用)高可用性 (HA) 和 Kerberos 身份驗證設置。 提示: 如果使用 Kerberos 身份驗證,請記錄以下 Kerberos 配置參數的設置。您需要將這些設置應用于遷移的 Eon 數據庫: KerberosServiceName KerberosRealm KerberosKeytabFile 注意: 以下限制適用于 Kerberos 身份驗證: ?遷移僅支持 Vertica 身份驗證。不支持通過委托令牌或代理用戶進行用戶身份驗證。 ?遷移不支持多個 Kerberos 領域的身份驗證。 在數據庫級別設置配置參數 HadoopConfDir(非 HA 環境不需要)。 |
開始遷移
不同數據庫對象的遷移方法
| 企業模式對象 | 遷移到Eon數據庫 |
|---|---|
| Global catalog objects(projection、schema、users、權限等) | 直接同步到共享存儲,不會發生變化 |
| 一個projection_basename下的伙伴projection(b0,b1) | 遷移一個projection到共享存儲(通常為b0) |
| Unsegmented projection | 在共享存儲上保存一份數據,并將其復制分布到所有節點 |
| 節點數 | 相同數量的節點和相同數量的分段分片 |
| Depot location | 如 MIGRATE_ENTERPRISE_TO_EON 中所指定。 revive 后,默認depot大小設置為本地文件系統的 80% |
| USER和TEMP存儲路徑數據 | 遷移到共享存儲 |
| 容錯組與存儲策略 | 不遷移 |
| 外部程序(External procedures) | 不遷移 |
| 與網絡設置相關的目錄對象——負載平衡組、網絡地址、路由規則、子網等。 | 不遷移 |
遷移語法
SELECT MIGRATE_ENTERPRISE_TO_EON ( 'communal?storage?location', 'depot?location' [, is?dry?run] );
- communal_storage_location:目錄和數據文件所在的 S3/GCP url。 這個參數是必需的。
- depot_location: eon 模式的倉庫位置路徑。 此參數是必需的,并且應該是顯式路徑。
- is_dry_run: 如果 is_dry_run=true,元函數只檢查存儲類型和投影分段,不會進行數據遷移。 此參數是可選的,默認情況下為 false
試運行
設置[, is?dry?run]參數為true:
=> SELECT migrate_enterprise_to_eon('s3://verticadbbucket', '/vertica/depot', true);
如果該函數發現任何合規性問題,它會將這些問題寫入數據庫目錄中的遷移錯誤日志 migrate_enterprise_to_eon_error.log。
正式遷移
=> SELECT migrate_enterprise_to_eon('s3://verticadbbucket', '/vertica/depot', false);
遷移進度跟蹤
-
Eon Shards - 遷移后的分片數量和企業模式的節點數相同,數據分片的方法與projection的分段相同。
-
通過 database_migration_status 系統表監控遷移進度
- node_name
- transaction_id
- phase:步驟描述,依次執行的遷移操作包括:目錄轉換、數據傳輸、目錄傳輸。 其中,數據傳輸表示傳輸數據文件和庫文件。 目錄傳輸包括檢查點和事務日志文件的傳輸
- status:包含如下狀態: RUNNING, COMPLETED, ABORT
- bytes_transfered, bytes_to_transfer:當進行操作目錄轉換步驟時,bytes_transfered 和 bytes_to_transfer 均為 0。
- communal_storage_location
- start_time and end_time:步驟的起止時間。
=> SELECT node_name, phase, status, bytes_to_transfer, bytes_transfered, communal_storage_location FROM database_migration_status ORDER BY node_name, start_time;
node_name | phase | status | bytes_to_transfer | bytes_transfered | 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/
增量遷移
- 遷移任務會對比數據庫和共享存儲的文件差異,只上傳差異數據。
- 假設沒有失敗,第一次遷移運行將完成大部分數據傳輸。 后續的遷移運行預計會更短,因為它們只傳輸上次運行和當前運行開始時間之間企業數據庫中發生的增量。
- 允許數據庫管理員控制遷移進度,選擇在空閑時間進行遷移工作。
- 可以使用這個估計來安排時間停止對企業數據庫的更改,執行最終遷移運行以同步兩個數據庫,并恢復 eon 數據庫。
- 復活(啟動)新遷移的 Eon 數據庫后,您無法再次進行增量遷移到其公共存儲,除非您先刪除數據庫然后清理存儲。
并發遷移
- 不支持從同一個集群到同一個公共存儲位置的多個數據庫遷移任務
- 允許將多個數據庫遷移任務從同一集群遷移到不同的公共存儲位置,但使用場景很少。
- 當從不同的集群同時遷移到相同的共享存儲位置時。遷移任務先上傳 cluster_config.json 文件的數據庫會被恢復,稍后上傳 cluster_config.json 文件的遷移任務將失敗。 不建議進行這種操作。
- 為防止覆蓋公用存儲位置上的現有數據庫,如果公用存儲位置上已有數據庫,則從其他企業數據庫遷移數據庫將失敗。
遷移完成后
復活 Eon 數據庫
遷移完成且 Eon 數據庫可供使用后,可以使用管理控制臺或管理工具從公共存儲中恢復數據庫。
復活數據庫所需的節點數量與企業模式的節點數量一致。數據庫復活后,可再根據實際需求收縮或者添加主子集群節點數。
例如,以下 admintools 命令恢復了一個三節點遷移的 Eon 數據庫:
admintools -t revive_db -x bootstrap_params.conf \ --communal-storage-location=webhdfs://mycluster/verticadb \ -d verticadb \ -s vnode01,vnode02,vnode03
如果發生增量遷移,建議在遷移后的 eon 數據庫中運行 CLEAN_COMMUNAL_STORAGE() 以清理過時的文件。





