【发布时间】:2017-11-21 23:11:45
【问题描述】:
我在 Kubernetes 上使用 ArangoDB 3.2.2。我有一个主数据库和一个从数据库。在 arangosh 内的从数据库上,我输入以下命令:
db._useDatabase("mydb");
equire("@arangodb/replication").setupReplication({
endpoint: "tcp://master:8529",
username: "root",
password: "123456",
database: "mydb",
verbose: true,
includeSystem: false,
incremental: true,
autoResync: true,
maxConnectRetries: 20,
adaptivePolling: false,
idleMinWaitTime: 0.001,
idleMaxWaitTime: 1.5,
chunkSize: 5000
});
命令阻塞几秒钟,然后开始复制,我可以看到主数据库中的集合已复制到从属数据库。但是,一段时间后复制停止。
当我跑步时: require("@arangodb/replication").applier.state 这就是我所看到的:
{
"state" : {
"running" : true,
"lastAppliedContinuousTick" : "6384020",
"lastProcessedContinuousTick" : "6384026",
"lastAvailableContinuousTick" : "6389353",
"safeResumeTick" : "6382367",
"progress" : {
"time" : "2017-11-15T12:14:09Z",
"message" : "fetching master log from tick 6382367, first regular tick 6367894, barrier: 0, open transactions: 0",
"failedConnects" : 0
},
"totalRequests" : 1155,
"totalFailedConnects" : 0,
"totalEvents" : 83,
"totalOperationsExcluded" : 0,
"lastError" : {
"errorNum" : 0
},
"time" : "2017-11-15T12:15:47Z"
},
"server" : {
"version" : "3.2.2",
"serverId" : "77969163868004"
},
"endpoint" : "tcp://master:8529",
"database" : "mydb"
}
当我再次运行复制命令时,我看到集合再次被复制...
如何初始化一个稳定的复制过程? 我知道这是一个异步复制,但在我的用例中,我需要尽快更新从属设备...我的复制配置是否适合我的需求?
【问题讨论】:
-
如果我理解正确,复制应用程序将其状态报告为“正在运行”,而其他分析表明实际上没有应用主服务器的任何更改?我想了解您如何得出应用程序不起作用的结论。您是否正在查看集合中的文档计数?或者您正在查看应用程序
state()命令的多个进度结果?至少这里的刻度值和totalRequests值应该随着时间的推移而增加。如果他们不这样做,那么应用程序似乎确实挂了。 -
顺便说一下,配置的
chunkSize值似乎相当低。它只有 5KB,这可能意味着 master 返回的批次最多会那么大。如果插入/修改/删除了许多文档,或者文档大小通常大于 100 字节左右,则 5KB 并不多。我建议将chunkSize的值增加到 1 MB 左右,看看是否有帮助,甚至使用默认值。我还建议打开adaptivePolling,因为这意味着当没有太多事情可做时,从从属到主控发出的 HTTP 请求会减少。 -
是否有任何其他进程(除了 arangod 本身)试图在从属设备上写入数据,特别是写入集合
my_col? -
两种存储引擎(RocksDB 和 MMFiles)肯定存在差异。但是,复制应该与两种存储引擎一起工作,而不仅仅是一个。所以在从站上你只是在读取数据,而使用 RocksDB 会卡住吗?那听起来像一个错误!
-
这可能是 3.2.8 版本中修复的错误的副作用,但这纯粹是猜测,因为我还没有重现该问题。
标签: kubernetes replication arangodb