在两个实例上设置Neo4j复制

时间:2015-11-20 11:35:10

标签: neo4j neo4j-ha

我打算为neo4j配置某种 2节点复制类似于mysql复制。由于我对资源有点限制,我不想为两个以上的云计算实例付费。此外,我对neo4j数据库的一次实时或接近实时复制感到满意。所以我能想到的方法是:

  1. 借助仲裁实例在两个计算节点上配置HA。在第一个节点上设置一个neo4j实例(主服务器),在第二个节点上设置另一个neo4j实例(从服务器)+另一个neo4j实例(仲裁器,仅用于仲裁,无数据记录)实例。
  2. OR

    1. 使用neo4j-backup工具设置cron进行在线备份。每小时左右设置增量备份。不确定它可能放在prod服务器上的负载,计划测试出来。
    2. 我更倾向于采用第一种方法,因为我可以更实时地复制数据库(我也可以通过即时故障转移获得HA /负载平衡,但现在不是优先考虑的事项)。

      请告诉我

      • 两种方法中的哪一种更好,
      • 如果有另一种方法可以实现相同或
      • 如果上述任何方法不适合或有一些缺陷。

      我对Neo4j HA有点新意,所以请原谅我的无知。谢谢!

1 个答案:

答案 0 :(得分:4)

因此。您已经提到了可用的解决方案。

TL; DR;我更喜欢第一种选择。

群集

通常,推荐的布局是3个节点(2个从站+ 1个主站)。 但你的布局 - 2个节点(1个主节点+ 1个从节点+ 1个仲裁节点)也是可行的。特别是如果一台服务器可以处理您的工作量。

好东西:

  • 几乎是“实时”复制品。
  • 利用资源处理更大工作量的可能性。
  • 更好的可用性。

注意:

  • 如果您在master上有10mb / sec的写入负载,那么将在从属节点上应用相同的负载。这根本不应该影响从slave的读取(除了写入负载非常大)。
  • 维护成本更高,然后是单实例安装。您应该计划如何处理集群升级,配置更新,插件更新。
  • 分支数据。在集群环境中,当两个节点具有不同的数据并且应该决定应该保留哪些数据时,存在以“裂脑”情形结束的可能性。 Neo4j处理这种情况非常好。但是你应该记住,在非常罕见的情况下可能会发生小的数据丢失。

备份

好东西:

  • 简单。只需从数据库进行备份。
  • 一致性检查。进行备份时,工具会运行一致性检查以验证数据库是否未损坏。 Backup不会搞砸实时数据库。如果有任何问题 - 将通过备份实用程序的日志通知您。请参阅以下有关如何执行备份的详细信息。
  • 数据库。 Neo4j备份是功能齐全的数据库。你可以启动指向备份数据库的服务器,并做你想做的一切。
  • 增量备份。您可以像往常一样经常进行增量备份。

注意:

  • Neo4j垂直扩展(取决于数据库的大小)。它可以处理单个实例上的巨大负载(我们在中型机器上有多达3k个请求/秒)。因此,您可以为Neo4j服务器和其他更小(更便宜)的备份获得一台更大的机器。

如何执行备份?

应该记住一件事 - 实时数据库仍然可以完全运行。备份实用程序不会停止或阻止任何操作。

提交数据库中的事务时,所有更改都将附加到事务日志中。

  • 如果没有先前的备份:复制整个存储。
  • 当有先前的备份和事务日志可用时:复制新的事务日志并将其重播到存储。
  • 如果有先前的备份且交易不可用:丢弃现有存储,复制现有存储。

为什么交易日志无法使用?您的配置可能会说只保留最新的交易记录(即1小时),或者根本不保留。

相关设置:

其他

无论如何,您应该考虑在群集环境中进行备份事件。无论如何,一切都会失败。

通常 - 一切都取决于您的负载和数据库大小。

如果您的数据库足够小以完全适合内存并且一台机器足以处理所有负载,那么一个Neo4j实例就足够了。只做备份。

如果您没有更好的可扩展性/可用性和实时工作副本,那么群集设置是最佳选择。