如何启动ArangoDB集群主动故障转移模式?实操遇阻咨询
聊聊ArangoDB 3.3.7主动故障转移集群启动的坑,以及3个DBServer的可行性
首先得敲个重点:你参考的是3.11版本的文档,但实际用的是3.3.7,这俩版本的主动故障转移配置逻辑差得挺多,这大概率是你启动失败的核心原因!一定要对应版本的文档来操作,别跨版本瞎套步骤。
一、先解决启动失败的核心问题:版本不匹配
- ArangoDB 3.3.x和3.11的主动故障转移在节点启动参数、集群初始化流程上都有不少差异,3.11的步骤放到3.3.7上肯定跑不通,你得去找3.3.7对应的官方文档跟着做。
- 说回3.3.7的硬性要求:Agent节点数量必须是奇数,你用3个是完全符合要求的,这点没问题;但DBServer官方确实只推荐2个,因为主动故障转移是主从架构,2个节点就够实现故障切换了。
二、关于3个DBServer的可行性
- 官方不支持3个DBServer是因为主动故障转移的设计初衷就是主备切换,2个节点就能满足复制和故障转移需求。加第3个DBServer的话,集群复制逻辑会变复杂,而且官方不会针对这种配置做测试,后续出问题可能找不到官方支持。
- 不过实操中3个DBServer在3.3.7里确实能跑起来,但属于非官方配置,风险得自己担:比如升级的时候可能出兼容问题,故障排查也没官方文档可参考。
三、排查启动失败的具体步骤
- 检查Agent启动参数
- 每个Agent必须把所有其他Agent的地址都加到
--cluster.agency-endpoint里,比如第一个Agent的启动命令大概是这样:arangod --server.endpoint tcp://0.0.0.0:8529 --cluster.agency true --cluster.my-address tcp://agent1:8529 --cluster.agency-endpoint tcp://agent1:8529 --cluster.agency-endpoint tcp://agent2:8529 --cluster.agency-endpoint tcp://agent3:8529 --database.directory ./agent1 - 注意
--cluster.my-address要用集群内所有节点都能访问的地址,别用localhost(本地测试除外)。
- 每个Agent必须把所有其他Agent的地址都加到
- 正确初始化集群
- 3.3版本得用
arangosh连到任意一个Agent,执行初始化命令:require("@arangodb/cluster").agencyInit({ endpoints: ["tcp://agent1:8529", "tcp://agent2:8529", "tcp://agent3:8529"] }); - 等初始化成功了再启动DBServer和Coordinator节点。
- 3.3版本得用
- 扒日志找问题
- 每个节点的数据库目录里都有
arangod.log日志文件,启动失败的具体原因(比如网络不通、端口被占、参数写错)都在里面,这是排查问题最直接的方法。
- 每个节点的数据库目录里都有
- 检查网络连通性
- 确保所有Agent之间、Agent和DBServer/Coordinator之间都能互相访问默认的8529端口,防火墙或者安全组别把这些端口给封了。
内容的提问来源于stack exchange,提问作者ile
相关产品推荐
相关产品推荐

