neo4j HA healthcheck端点通过AWS负载均衡器返回401

时间:2015-09-24 12:36:37

标签: amazon-web-services neo4j load-balancing amazon-elb

我在AWS EC2(Linux)内的私有子网中的2个虚拟机上运行4个节点(2个群集节点,2个仲裁节点)neo4j 2.2.5企业群集。我能够启动集群并让成员加入它们。 我还配置了一个AWD Elastic Load Balancer来访问不同机器的7474端口。负载均衡器运行状况检查使用下面的结束点进行配置。

      /db/manage/server/ha/available

但是,服务器返回401是未经授权的,因为它们不包含授权标头。我不确定AWS是否允许您为healthcheck传递身份验证值。是否有可能让neo4j不需要auth用于"只是"这些健康检查网址? (我不想为整个数据库禁用auth)。 谢谢, NN

5 个答案:

答案 0 :(得分:3)

AWS ELB不支持自定义标头,我建议您使用HAproxy而不是ELB - 以下是配置的精彩描述 - http://blog.armbruster-it.de/2015/08/neo4j-and-haproxy-some-best-practices-and-tricks/

答案 1 :(得分:2)

以下内容见2.3.3:

Filesys::DfPortable

dbms.security.ha_status_auth_enabled

说明:要求授权访问HA状态端点。

有效值:dbms.security.ha_status_auth_enabled是一个布尔值。

默认值:true

将其更改为false将允许在没有安全性的情况下访问HA状态检查端点。我目前正在使用此作为将AWS ELB与Neo4j配合使用的方法,并且它的工作正常。

答案 2 :(得分:0)

回答您的问题 - 在Neo4j中不可能只抑制一条路径的身份验证。我们看到there - 白名单是硬编码的,无法扩展。

也许您可以在案例中使用nginx作为反向代理?

解决方案:

  • 将nginx放在Neo4j实例前面。
  • 配置标准代理设置
  • for /db/manage/server/ha/available自动添加授权标题

有几篇文章可以帮助您进行设置:

示例(未测试):

location /db/manage/server/ha/available {
    proxy_set_header HOST "Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==";

    proxy_pass http://localhost:7474/db/manage/server/ha/available;
}

答案 3 :(得分:0)

实际上FylmTM的解决方案是正确的方法!这只需要一些小的调整 - 请参见下文..

location /db/manage/server/ha/available {
proxy_set_header Authorization "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==";
proxy_pass_header  Authorization;
proxy_pass http://ip-10-0-1-98:7474/db/manage/server/ha/available;

}

这解决了上述问题,您可以使用AWS ELB进行健康检查! 现在我仍然需要弄清楚为什么我在这些网址上出现404错误(请参阅下面的帖子)

neo4j HA cluster end points return 404

答案 4 :(得分:0)

您需要在neo4j.conf中将这两个变量设置为 false 。这两个变量的默认值为 true

这些变量可帮助ELB在不进行身份验证的情况下进行健康检查

dbms.security.ha_status_auth_enabled=false
dbms.security.causal_clustering_status_auth_enabled=false

用于设置弹性负载平衡器

  1. 需要为负载均衡器配置以下侦听器Listeners in load balancer

  2. 设置两个弹性负载平衡器。一种用于读取,用于neo4j桌面,另一种用于将数据写入neo4j

对于状态终结点,请根据Neo4j版本检查URL- https://neo4j.com/docs/operations-manual/current/monitoring/causal-cluster/http-endpoints/

用于读取数据的ELB。

运行状况检查-http:7474 / db / manage / server / causalclustering / available enter image description here

用于写入数据的ELB。

运行状况检查-http:7474 / db / manage / server / causalclustering / writable enter image description here