配置 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=
此页面有帮助吗?