介绍
MapR-DB表复制允许将数据复制到可能位于同一群集或另一个群集中的另一个表。 这与自动复制和集群内复制不同,后者是将数据复制到不同的物理节点中以实现高可用性并防止数据丢失。
本教程重点介绍MapR-DB表复制,该复制在不同集群上的表之间复制数据。
在不同群集之间复制数据使您能够:
- 提供另一级灾难恢复,以保护您的数据和应用程序免受全局数据中心故障的影响,
- 将数据推送到应用程序和用户附近,
- 聚合来自多个数据中心的数据。
复制拓扑
MapR-DB表复制提供各种拓扑,以使复制适应业务和技术要求:
- 主从复制 :在这种拓扑中,您可以将一种方法从源表复制到副本。 副本可以在远程群集中,也可以在源表所在的群集中。
- 多主复制 :在这种复制拓扑中,存在两种主从关系,每个表都扮演着主从角色。 客户端应用程序更新两个表,每个表将更新复制到另一个表。
在此示例中,您将学习如何设置多主复制。
先决条件
- 2个具有Enterprise Edition许可证的MapR Clusters 5.x
- 在此演示中,它们分别称为
cluster1
和cluster2
- 在此演示中,它们分别称为
设置复制
在接下来的步骤中,您将配置集群以启用mutip-master复制,如下所示:
配置集群
源群集的每个节点必须与目标群集的CLDB节点通信。 在源集群的每个节点上,编辑mapr-clusters.conf
文件并添加目标集群信息。
群集1配置
在cluster1
所有节点中,编辑/opt/mapr/conf/mapr-clusters.conf
文件并添加cluster2
配置。 该文件应如下所示:
cluster1 secure=false cluster1-node1:7222 cluster1-node2:7222 cluster1-node2:7222
cluster2 secure=false cluster2-node1:7222 cluster2-node2:7222 cluster2-node3:7222
群集2配置
在cluster2
所有节点中,编辑/opt/mapr/conf/mapr-clusters.conf
文件并添加cluster1
配置。 该文件应如下所示:
cluster2 secure=false cluster2-node1:7222 cluster2-node2:7222 cluster2-node3:7222
cluster1 secure=false cluster1-node1:7222 cluster1-node2:7222 cluster1-node2:7222
您可以在文档中找到有关mapr-clusters.conf
格式的信息 。
使用mapr
用户在cluster1
节点之一上打开终端窗口,然后执行以下操作:
$ ls /mapr/cluster1/
apps hbase installer opt tmp user var
$ ls /mapr/cluster2/
apps hbase installer opt tmp user var
安装和配置MapR网关
MapR网关介导源MapR集群和目标MapR集群之间的单向通信。 在此示例中,您将使用多主复制,这意味着将数据从cluster1
复制到cluster2
以及从cluster2
复制到cluster1
。
好的做法是将MapR-Gateway安装到目标集群,因此在我们的情况下,让我们在cluster1
节点之一上安装一个网关,在cluster2
节点之一上安装一个网关。 请注意,此配置将不高度可用,通常您将按群集部署多个网关。
安装MapR-Gateway
以root身份在cluster1
一个节点上,使命令适应您的linux环境,例如在节点cluster1-node2
$ yum install mapr-gateway
# Update MapR configuration
$ /opt/mapr/server/configure.sh -N cluster1 -C cluster1-node1:7222,cluster1-node2:7222,cluster1-node3:7222 -R
在cluster2
上执行相同的cluster2
,例如在节点cluster2-node2
上执行cluster2-node2
:
$ yum install mapr-gateway
# Update MapR configuration
$ /opt/mapr/server/configure.sh -N cluster1 -C cluster2-node1:7222,cluster2-node2:7222,cluster2-node3:7222 -R
注册到群集的网关
现在我们已经在每个集群上运行了网关,您必须在每个集群中注册网关 。
在cluster1
运行以下命令以将cluster2
网关注册为目标:
$ maprcli cluster gateway set -dstcluster cluster2 -gateways cluster2-node2
# Check the configuration
$ maprcli cluster gateway list
在cluster2
运行以下命令以将cluster1
网关注册为目标:
$ maprcli cluster gateway set -dstcluster cluster1 -gateways cluster1-node2
# Check the configuration
$ maprcli cluster gateway list
使用复制创建表
在终端窗口中,以cluster1
上的mapr
用户身份创建表并插入文档:
$ maprcli table create -path /apps/user_profiles -tabletype json
这将创建一个新的JSON表; 也可以使用/mapr/cluster1/apps/user_profiles
。
现在,使用MapR-DB Shell添加文档:
$ mapr dbshell
maprdb mapr:> insert /apps/user_profiles --value '{"_id":"user001" , "first_name":"John", "last_name":"Doe"}'
maprdb mapr:> find /apps/user_profiles
添加表复制
让我们现在能够之间的复制user_profiles
上cluster1
的user_profiles
表cluster2
。
在cluster1
,在终端窗口上以mapr
身份运行以下命令:
$ maprcli table replica autosetup -path /apps/user_profiles -replica /mapr/cluster2/apps/user_profiles -multimaster yes
您可以使用以下命令获取有关表的复制配置的信息:
$ maprcli table replica list -path /apps/user_profiles -json
测试复制
在cluster2
打开另一个终端,然后使用MapR-DB Shell查看复制的数据:
$ mapr dbshell
maprdb mapr:> find /apps/user_profiles
{"_id":"user001","first_name":"John","last_name":"Doe"}
1 document(s) found.
您也可以使用完整路径/mapr/cluster2/apps/user_profiles
在cluster1
使用MapR-DB Shell添加新文档:
$ mapr dbshell
maprdb mapr:> insert /apps/user_profiles --value '{"_id":"user002" , "first_name":"Simon", "last_name":"Dupont"}'
maprdb mapr:> find /apps/user_profiles
在cluster2
表中查找,您将看到数据已被复制。
您可以在cluster2
插入或删除文档,并在cluster1
进行查找,您会看到新文档也朝另一个方向被复制。
请注意,在本演示中,我们使用两个连接到每个集群的终端,您可以在单个MapR-DB Shell中使用全局命名空间进行一些测试。
结论
在本教程中,您学习了如何设置MapR-DB Multi-Master复制以在2个群集之间自动复制数据。
MapR-DB表复制不仅在拓扑(主从/ mult-master)方面提供了许多选项,而且还提供一些选项和命令来:
- 复制某些列/属性或列族
- 在受保护的群集中配置复制
- 暂停复制。
您可以在文档中找到有关MapR-DB表复制和MapR-Gateway的更多信息:
- 表复制
- 设置表复制
- 配置和管理MapR网关
翻译自: https://www.javacodegeeks.com/2017/08/getting-started-mapr-db-table-replication.html