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哦,抱歉,没有看到您的代码?那么 feed 端点被调用了吗?
可能是内存问题?插件是有状态的,因此如果您的 Graphity-Instance 保持状态,它可能会占用大量内存。
所以请启用 gc-logging 并查看是否出现问题。
【讨论】:
是的,提要端点被调用。如果在第一次创建 Graphity 实例时调用端点。 Graphity 实例是静态的,仅使用一个实例。如果您确实直接浏览了代码,您可能希望在 Graphity 存储库中查看 instance initialization method。我希望问题与初始化有关。根据htop
有足够的可用内存,但我会查看 GC 日志。以上是关于Neo4j HA 集群 - 单实例块的主要内容,如果未能解决你的问题,请参考以下文章
基于Keepalived构建高可用集群配置实例(HA Cluster)
基于Keepalived构建高可用集群配置实例(HA Cluster)