将数据库复制到其他群集
当心
保护备份位置并严格限制已有权访问数据库中所有数据的用户对备份的访问权限,这一点十分重要。破坏备份意味着破坏数据库。可使用 vbr
将整个数据库复制到其他 Vertica 群集。此功能可帮助您执行诸如在开发和生产环境之间复制数据库之类的任务。从本质上来说,将数据库复制到另一个群集,是同时在进行备份和还原操作。数据将从源数据库群集中备份,然后通过单个操作还原到目标群集。
注意
copycluster 任务与 HDFS 存储位置不兼容。copycluster 使用 Linuxrsync
工具将文件从源群集复制到目标群集。HDFS 存储备份和还原以使用快照为基础。HDFS 存储位置中的数据备份至 HDFS 本身。Vertica 不能将数据以与传输至 Linux 群集相同的方式传输至远程 HDFS 群集。
Vertica 编录、数据和临时目录的目录位置在源和目标数据库上必须相同。可使用以下 vsql 查询查看源数据库目录位置。此示例出于演示目的设置了扩展显示,并列出最受关注的各列:node_name
、storage_path
和 storage_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
.
.
.
注意编录、数据和临时存储的目录路径。这些路径在源数据库中的所有节点上均相同,在目标数据库中也必须相同。
注意
在将数据库复制到其他群集时,如果目标数据不同,vbr
将覆盖所有现有数据。若要保留目标群集上的现有数据,请在调用 copycluster``vbr
任务之前为目标创建完整数据库备份。
识别目标群集的节点名称
在配置目标群集之前,您需要知道 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 登录。
注意
在群集内执行免密码访问与在群集之间执行免密码访问不同。源群集和目标群集上的管理员帐户的 SSH ID 可能不一样。您必须配置目标群集中的每个主机,才能接受源群集的 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 不需要重新发送这些文件。