知识库

配置 HAProxy 仅将写入请求发送到 Leader 节点

关于实现代理服务器以将写入请求定向到 Neo4j 集群中的主节点并将读取请求定向到从节点,有几种选项。通常,建议在应用程序代码中处理此逻辑。但是,还有另一种方法。

通过使用 HAProxy 的以下配置,您可以将 GET 请求(读取)定向到从节点,同时将其他所有请求(DELETE, POST, PUT)定向到主节点。

global
daemon
maxconn 256

defaults
mode http
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms

frontend http-in
bind *:80
acl write_methods method POST DELETE PUT
#Only POST and DELETE methods are used according to the documentation
use_backend neo4j-write if write_methods
default_backend  neo4j-read-only

backend neo4j-read-only
balance roundrobin
option httpchk GET /db/manage/server/causalclustering/read-only
server s1 10.0.1.10:7474 maxconn 32 check
server s2 10.0.1.11:7474 maxconn 32 check
server s3 10.0.1.12:7474 maxconn 32 check

backend neo4j-write
balance roundrobin
option httpchk GET /db/manage/server/causalclustering/writable
server s1 10.0.1.10:7474 maxconn 32 check
server s2 10.0.1.11:7474 maxconn 32 check
server s3 10.0.1.12:7474 maxconn 32 check

这里的逻辑是,默认情况下请求会被路由到跟随者(follower),如果它是写入请求(POST、DELETE、PUT),则改为路由到主节点(Master)。

有关此主题的更多信息,请参阅产品文档:https://neo4j.ac.cn/docs/operations-manual/3.5/ha-cluster/haproxy/

在 HAProxy 中配置基本认证的第一步是获取用户名:密码的 base64 表示。

要在命令行执行此操作,对于用户名为 neo4j,密码为 neo4j

$ echo -n "neo4j:neo4j" | base64
bmVvNGo6bmVvYWRtaW4=

请注意,此用户名-密码组合无效,仅用于演示目的。

然后按照如下方式附加 HTTP/1.0\r\nAuthorization:\ Basic\ base64_username_password

option httpchk GET /db/manage/server/causalclustering/writable HTTP/1.0\r\nAuthorization:\ Basic\ bmVvNGo6bmVvYWRtaW4=
© . All rights reserved.