将数据库复制到其他群集

可使用 vbr 将整个数据库复制到其他 Vertica 群集。此功能可帮助您执行诸如在开发和生产环境之间复制数据库之类的任务。从本质上来说,将数据库复制到另一个群集,是同时在进行备份和还原操作。数据将从源数据库群集中备份,然后通过单个操作还原到目标群集。

Vertica 编录、数据和临时目录的目录位置在源和目标数据库上必须相同。可使用以下 vsql 查询查看源数据库目录位置。此示例出于演示目的设置了扩展显示,并列出最受关注的各列:node_namestorage_pathstorage_usage

=> \x
Expanded display is on.
=> select node_name,storage_path, storage_usage from disk_storage;
-[ RECORD 1 ]-+-----------------------------------------------------
node_name     | v_vmart_node0001
storage_path  | /home/dbadmin/VMart/v_vmart_node0001_catalog/Catalog
storage_usage | CATALOG
-[ RECORD 2 ]-+-----------------------------------------------------
node_name     | v_vmart_node0001
storage_path  | /home/dbadmin/VMart/v_vmart_node0001_data
storage_usage | DATA,TEMP
-[ RECORD 3 ]-+-----------------------------------------------------
node_name     | v_vmart_node0001
storage_path  | home/dbadmin/SSD/schemas
storage_usage | DATA
-[ RECORD 4 ]-+-----------------------------------------------------
node_name     | v_vmart_node0001
storage_path  | /home/dbadmin/SSD/tables
storage_usage | DATA
-[ RECORD 5 ]-+-----------------------------------------------------
node_name     | v_vmart_node0001
storage_path  | /home/dbadmin/SSD/schemas
storage_usage | DATA
-[ RECORD 6 ]-+-----------------------------------------------------
node_name     | v_vmart_node0002
storage_path  | /home/dbadmin/VMart/v_vmart_node0002_catalog/Catalog
storage_usage | CATALOG
-[ RECORD 7 ]-+-----------------------------------------------------
node_name     | v_vmart_node0002
storage_path  | /home/dbadmin/VMart/v_vmart_node0002_data
storage_usage | DATA,TEMP
-[ RECORD 8 ]-+-----------------------------------------------------
node_name     | v_vmart_node0002
storage_path  | /home/dbadmin/SSD/tables
storage_usage | DATA
.
.
.

注意编录、数据和临时存储的目录路径。这些路径在源数据库中的所有节点上均相同,在目标数据库中也必须相同。

识别目标群集的节点名称

在配置目标群集之前,您需要知道 admintools 为源数据库中所有节点提供的确切名称。

要查看节点名称,请运行如下查询:

=> select node_name from nodes;
  node_name
------------------
 v_vmart_node0001
 v_vmart_node0002
 v_vmart_node0003
(3 rows)

您还可以通过从命令行运行 admintools 来查找节点名称。例如,对于 VMart 数据库,您可以输入如下命令:

$ /opt/vertica/bin/admintools -t node_map -d VMART
DATABASE | NODENAME         | HOSTNAME
-----------------------------------------------
VMART    | v_vmart_node0001 | 192.168.223.xx
VMART    | v_vmart_node0002 | 192.168.223.yy
VMART    | v_vmart_node0003 | 192.168.223.zz

配置目标群集

配置目标以允许源数据库与之连接,然后还原该数据库。目标群集必须满足以下条件:

  • 运行具有与源群集相同版本的热修复程序。例如,如果源群集和目标群集都运行版本 9.1.1-1,您可以还原数据库。

  • 具有与源群集相同数量的节点。

  • 具有与源数据库同名的数据库。目标数据库可以完全为空。

  • 具有与源群集相同的节点名称。NODES 系统表中列出的节点名称在两个群集上必须匹配。

  • 可从源群集访问。

  • 具有相同的数据库管理员帐户,并且所有节点必须允许源群集的数据库管理员通过不需要密码的 SSH 登录。

  • 具有足够的磁盘空间来完成 vbr \--task copycluster 命令。

为 CopyCluster 创建配置文件

要将数据库复制到其他群集,您必须专门创建一个配置文件。在该配置文件中,将目标群集中节点的主机名称指定为备份主机。您必须定义 backupHost;但是,vbr 会忽略 backupDir 选项,并始终将数据存储在目标数据库的编录和数据目录中。

您无法使用 copycluster 命令执行对象级别备份。相反,您必须执行完整数据库备份。

以下示例显示了如何设置 vbr,从而将 3 节点群集 v_vmart 上的数据库复制到另一个群集 test-host。


[Misc]
snapshotName = CopyVmart
tempDir = /tmp/vbr

[Database]
dbName = vmart
dbUser = dbadmin
dbPassword = password
dbPromptForPassword = False

[Transmission]
encrypt = False
port_rsync = 50000

[Mapping]
; backupDir is not used for cluster copy
v_vmart_node0001= test-host01
v_vmart_node0002= test-host02
v_vmart_node0003= test-host03

复制数据库

您必须在调用 copycluster 之前停止目标群集。

要复制群集,请使用数据库管理员帐户从源数据库中的节点运行 vbr

$ vbr -t copycluster -c copycluster.ini
Starting copy of database VMART.
Participating nodes: vmart_node0001, vmart_node0002, vmart_node0003, vmart_node0004.
Enter vertica password:
Snapshotting database.
Snapshot complete.
Determining what data to copy.
[==================================================] 100%
Approximate bytes to copy: 987394852 of 987394852 total.
Syncing data to destination cluster.
[==================================================] 100%
Reinitializing destination catalog.
Copycluster complete!

如果 copycluster 任务被中断,目标群集则会保留已传输的任何数据文件。如果您再次尝试该操作。Vertica 不需要重新发送这些文件。