绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
ArangoDB 数据库复制技巧
2022-04-08 17:57:42

1. ArangoDB 数据库复制简介

1.1 复制分类

1.1.1 同步复制

只用在数据集群内
在客户端进行写操作时,数据会复制到全部的分片(Shard),然后才算完成一个写操作
客户的写操作延迟增加
数据的完整性在全部节点上都得到保障
复制数据的每个分片都有一个 Leader,后面跟 r-1 个跟随者,r 就是 replicationFactor

1.1.2 卫星集合(Satellite Collection)

企业版功能,动态的 replicationFactor,允许数据库服务器使用本地 Join,减少复杂查询时的网络开销

1.1.3 异步复制

通过 write-ahead 日志记录全部的修改
Slave 节点主动链接到主节点,从日志里读取全部的修改内容,按顺序在本地执行
Slave 节点终和主节点拥有一样的数据

1.2 区分数据分片和复制

分片 - 是把一个 Collection 的数据,根据某种条件,拆分成几个部分,这些部分可以保存在一个或多个服务器上
复制 - 是把一个 Collection 的数据里的每个Shard,根据 ReplicationFactor 复制在几个数据库服务器上。或者通过异步复制,整个复制到另外的一个数据库服务器或集群

2. 异步复制

注意: 一下操作全部通过 ArangoDB 的命令行工具进行。在系统命令行状态执行 arangosh 进入。

2.1 异步复制的组件

Replication Logger - 按发生顺序记录源服务器上的数据修改
Replication Applier - 从源服务器读取修改,并在从服务器上做修改

2.1 操作

2.1.1 检查服务器状态

require("@arangodb/replication").logger.state();{"state" : {"running" : true,"lastLogTick" : "133322013","totalEvents" : 16,"time" : "2014-07-06T12:58:11Z"},"server" : {"version" : "2.2.0-devel","serverId" : "40897075811372"},"clients" : {}}
复制代码

2.1.2 检查日志状态

require("@arangodb/replication").logger.firstTick();require("@arangodb/replication").logger.tickRanges();
复制代码

2.1.2 检查 Applier (在从服务器上)

require("@arangodb/replication").applier.state();{"state" : {"running" : true,"lastAppliedContinuousTick" : "152786205","lastProcessedContinuousTick" : "152786205","lastAvailableContinuousTick" : "152786205","progress" : {"time" : "2014-07-06T13:04:57Z","message" : "fetching master log from offset 152786205","failedConnects" : 0},"totalRequests" : 38,"totalFailedConnects" : 0,"totalEvents" : 1,"lastError" : {"errorNum" : 0},"time" : "2014-07-06T13:04:57Z"},"server" : {"version" : "2.2.0-devel","serverId" : "210189384542896"},"endpoint" : "tcp://master.example.org:8529","database" : "_system"}
复制代码

2.1.3 一次性建立复制(并持续进行)

以下以复制 _system 数据库为例
require("@arangodb/replication").setupReplication(configuration);db._useDatabase("_system");require("@arangodb/replication").setupReplication({endpoint: "tcp://master.domain.org:8529",username: "myuser",password: "mypasswd",verbose: false,includeSystem: false,incremental: true,autoResync: true});
复制代码

2.1.4 启动、关闭和检查复制

require("@arangodb/replication").applier.state();require("@arangodb/replication").applier.start();require("@arangodb/replication").applier.stop();
复制代码

2.1.5 检查和修改配置

require("@arangodb/replication").applier.properties();{"requestTimeout" : 600,"connectTimeout" : 10,"ignoreErrors" : 0,"maxConnectRetries" : 10,"chunkSize" : 0,"autoStart" : false,"adaptivePolling" : true,"includeSystem" : true,"requireFromPresent" : false,"autoResync" : false,"autoResyncRetries" : 2,"verbose" : false}require("@arangodb/replication").applier.properties({endpoint: "tcp://master.domain.org:8529",username: "root",password: "secret",verbose: false});
复制代码

2.1.6 手动复制

2.1.6.1 整个选中的数据库

require("@arangodb/replication").sync({endpoint: "tcp://master.domain.org:8529",username: "root",password: "secret,includeSystem: true});
复制代码
2.1.6.2 选择集合
require("@arangodb/replication").sync({endpoint: "tcp://master.domain.org:8529",username: "root",password: "secret,includeSystem: true});
复制代码

2.1.7 配置样例

2.1.7.1 一次性建立

require("@arangodb/replication").setupReplication(configuration);db._useDatabase("_system");require("@arangodb/replication").setupReplication({endpoint: "tcp://master.domain.org:8529",username: "myuser",password: "mypasswd",verbose: false,includeSystem: false,incremental: true,autoResync: true});
复制代码

2.1.7.2 初始设置和只复制一次

db._useDatabase("_system");var replication = require("@arangodb/replication");/* run command in async mode */var id = replication.sync({endpoint: "tcp://master.domain.org:8529",username: "myuser",password: "mypasswd",async: true});/* now query the status of our operation */print(replication.getSyncResult(id));
复制代码

2.1.7.3 复制集合

db._useDatabase("_system");var replication = require("@arangodb/replication");/* run command in async mode */var id = replication.syncCollection("test", {endpoint: "tcp://master.domain.org:8529",username: "myuser",password: "mypasswd",async: true});/* now query the status of our operation */print(replication.getSyncResult(id));
复制代码

2. 同步复制

  • 同步复制必须在集群下配置
  • 配置时在集合的配置里设置 ReplciationFactor
  • 必须在创建集合时设置 ReplicationFactor,之后的修改
  • 可以一开始设置一个大的 Factor,当集合被恢复到大的集群,或者集群扩展时,系统自动使用更多的数据库节点
分享好友

分享这个小栈给你的朋友们,一起进步吧。

ArangoDB
创建时间:2022-04-08 17:28:44
ArangoDB
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

技术专家

查看更多
  • LCR_
    专家
戳我,来吐槽~