在两个实例上设置 Neo4j 复制

Dev*_*evD 2 neo4j neo4j-ha

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

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

或者

  1. 使用 neo4j-backup 工具为在线备份设置 cron。每小时左右设置一次增量备份。不确定它可能给生产服务器带来的负载,计划测试一下。

我更倾向于第一种方法,因为我获得了更实时的数据库副本(我也通过即时故障转移获得了 HA/负载平衡,但这不是现在的优先事项)。

请告诉我

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

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

Fyl*_*mTM 5

所以。您已经提到了可用的解决方案。

TL; 博士; 我更喜欢第一个选项。

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

好东西:

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

笔记:

  • 如果您在主节点上有 10 mb/秒的写入负载,那么将在从节点上应用相同的负载。这根本不应该影响从从站的读取(除了写入负载非常大)。
  • 维护成本较大,然后单实例安装。您应该计划如何处理集群升级、配置更新、插件更新。
  • 分支数据。在集群环境中,可能会出现“裂脑”场景,当 2 个节点具有不同的数据并且应该决定应该保留哪些数据时。Neo4j 可以很好地处理此类情况。但您应该记住,在非常罕见的情况下可能会发生少量数据丢失。

备份

好东西:

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

笔记:

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

如何进行备份?

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

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

  • 当没有以前的备份存在时:复制整个存储。
  • 当有以前的备份和事务日志可用时:复制新的事务日志并将它们重播到存储中。
  • 当以前的备份和事务不可用时:丢弃现有存储,复制现有存储。

为什么事务日志不可用?您的配置可能会说只保留最新的事务日志(即 1 小时),或者根本不保留。

相关设置:

其他

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

一般来说 - 一切都取决于您的负载和数据库大小。

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

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