ArangoDB 数据库配置主从关系

2020-04-21  本文已影响0人  腾云已被使用

如有侵权请联系作者。
转载请注明出处。
帮助他人,记录自己。

标签

ArangoDB 2.7.5,ArangoDB,2.7.5,数据库,主从关系,master-slave,master,slave,主备。

修订历史

说明

最近工作中遇到一个需求,让配置一下 ArangoDB 数据库的主备关系,从 master 数据库自动同步数据到 slave 数据库中。如果是普通的配置也就罢了,关键公司数据库是“老古董”——ArangoDB 2.7.5。现在配置 3.x 版本很容易,所以记录一下。

如果想直接开始请跳转至操作步骤

注意事项

资源下载地址

常用命令

sudo docker pull arangodb:2.7.5
sudo docker run -d -p 8529:8529 --name my_arangodb arangodb:2.7.5
sudo docker container ls
sudo docker exec -it containerId /bin/bash
arangosh --server.endpoint tcp://masterIp:8529 --server.database arango-test --server.username name --server.password userPassword
Ctrl + c / Ctrl + d / quit
db._listDatabases();
db._useDatabases("databaseName");
db._createDatabases("databaseName");
db._dropDatabases("databaseName");
db.collectionName.count();
db.collectionName.toArray();
arangod --replication.active-failover=true
require("org/arangodb/replication").logger.state();
require("org/arangodb/replication").applier.state();
db._useDatabase("_system");
require("org/arangodb/replication").setupReplication({endpoint: "tcp://master.domain.org:8529", username: "myuser", password: "mypasswd", verbose: false, includeSystem: false, incremental: true, autoResync: true });
require("org/arangodb/replication").applier.start(<tick>);
require("org/arangodb/replication").applier.stop();
require("org/arangodb/replication").applier.properties({endpoint: "tcp://master.domain.org:8529", username: "root", password: "secret", verbose: false, includeSystem: true, autoStart: true, autoResync: true});
require("org/arangodb/replication").applier.properties();
require("org/arangodb/replication").sync({endpoint: "tcp://master.domain.org:8529", database: "adam", username: "root", password: "secret, includeSystem: true });
var replication = require("org/arangodb/replication");
var id = replication.sync({endpoint: "tcp://master.domain.org:8529", database: "adam", async: true});
print(replication.getSyncResult(id));

操作步骤

  1. 启动 ArangoDB 2.7.5 的 Docker 容器并进入。

  2. 连接容器内数据库 server。

arangosh
  1. 创建数据库并使用:
db._createDatabase("Construct");
db._useDatabase("Construct");
  1. 手动进行一次数据同步拉取全数据,并获取 lastLogTick(数据量过大建议使用异步方式)。

同步方式:

require("org/arangodb/replication").sync({endpoint: "tcp://master.domain.org:8529", database: "Construct"});

数据量大的话,使用同步方式容易卡死,可以使用异步方式拉取数据:

var replication = require("org/arangodb/replication");
var id = replication.sync({endpoint: "tcp://master.domain.org:8529", database: "Construct", async: true});
print(replication.getSyncResult(id));

拉取数据未完成返回 false,已完成则返回结果信息(关键是获取 lastLogTick),如下:

{
  "collections" : [
    {
      "id" : "28243094",
      "name" : "_users"
    },
    {
      "id" : "29947030",
      "name" : "_graphs"
    },
    ...
    {
      "id" : "41612438",
      "name" : "_system_users_users"
    },
    {
      "id" : "57406614",
      "name" : "WorkflowRelation"
    },
    {
      "id" : "57799830",
      "name" : "TemplateRef"
    }
  ],
  "lastLogTick" : "170563815548423"
}
  1. 查看数据库 applier 的 state 和 properties 信息:
require("org/arangodb/replication").applier.properties();
require("org/arangodb/replication").applier.state();
  1. 配置 applier。如果没有指定 database 名称,则默认使用当前使用的 database 名称:
require("org/arangodb/replication").applier.stop();
require("org/arangodb/replication").applier.properties({endpoint: "tcp://master.domain.org:8529", database: "Construct", verbose: false, includeSystem: true, autoStart: true, autoResync: true, autoResyncRetries: 10, adaptivePolling: true});
  1. 启动自动同步(参数是第四步中获取到的 lastLogTick 值):
require("org/arangodb/replication").applier.start("<lastLogTick>");
上一篇 下一篇

猜你喜欢

热点阅读