Neo4j HA 集群 - 单实例块

Posted

技术标签:

【中文标题】Neo4j HA 集群 - 单实例块【英文标题】:Neo4j HA cluster - single instances block 【发布时间】:2015-03-10 13:24:56 【问题描述】:

8 个实例构成我的 Neo4j HA 集群(Neo4j 版本 2.1.2) 我使用新闻提要算法执行该技术的基准测试。 单个客户端每个实例同时执行 50 个读取(!)查询,目标是部署到所有实例的 server plugin。 基准测试在所有实例都从主实例引导数据后开始。请求由客户端循环分发。

如果我使用具有 3 或 4 个实例的集群,一切正常。 负载均匀分布在所有实例中(根据 CPU 负载),并且达到了低请求延迟。

但是,对于 8 个实例,其中 2 个实例立即具有很高的请求延迟。 由于高请求率,它们在 3 秒内从 500 毫秒增加到 10 秒,并随着基准持续时间进一步增加。 这些实例的 CPU 负载最大。 其余 6 个实例现在 CPU 负载较低,因为客户端仍在等待挂起的请求。 如果我不对 2 个实例发出请求,其余 6 个实例将按预期执行。 如果我更改顺序,相同的实例会被阻塞,因此这与服务器 ID 无关。 如果我从集群中删除其中一个实例,另一个实例仍处于阻塞状态。

这似乎与具体实例有关,但所有8个实例的设置都是相同的,因为它们是虚拟机。 日志文件也不包含提示。所有实例都在主服务器的console.log 中标记为可用。 任何想法是什么导致了这个问题以及如何解决它? 作为一个肮脏的修复,我将启动一个包含 10 个实例的集群并只使用其中的 8 个,但这不是一个好的解决方案。

编辑: 由于节点属性上的索引创建,我观察到类似的行为。 每个节点的第一个请求加载索引并等待 10 秒以使其可用,这在某些情况下时间太短了。 我立即停止了基准测试。所有节点的 CPU 负载都很高,当 CPU 空闲时,我只是重新启动了 Neo4j 服务器。 当它们再次上涨时,指数就可用了——在大多数情况下。

因此,这可能是与索引相关的问题。在 HA 集群中创建索引的正确方法是什么?

【问题讨论】:

也许你可以分享你的插件代码,也可以查看受影响实例的堆栈跟踪(jstack 或 kill -3 【参考方案1】:

哦,抱歉,没有看到您的代码?那么 feed 端点被调用了吗?

可能是内存问题?插件是有状态的,因此如果您的 Graphity-Instance 保持状态,它可能会占用大量内存。

所以请启用 gc-logging 并查看是否出现问题。

【讨论】:

是的,提要端点被调用。如果在第一次创建 Graphity 实例时调用端点。 Graphity 实例是静态的,仅使用一个实例。如果您确实直接浏览了代码,您可能希望在 Graphity 存储库中查看 instance initialization method。我希望问题与初始化有关。根据htop 有足够的可用内存,但我会查看 GC 日志。

以上是关于Neo4j HA 集群 - 单实例块的主要内容,如果未能解决你的问题,请参考以下文章

节点启动时neo4j ha集群失败

HA集群详细配置和实例

基于Keepalived构建高可用集群配置实例(HA Cluster)

基于Keepalived构建高可用集群配置实例(HA Cluster)

HBase的单节点集群详细启动步骤(分为Zookeeper自带还是外装)

HBase的单节点集群详细启动步骤(分为Zookeeper自带还是外装)