配置 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
此处的逻辑表示默认情况下请求被路由到跟随者,如果它是写入请求(POST、DELETE、PUT),则将其路由到主节点。
有关此主题的更多信息,请参阅产品文档: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=
此页面是否有帮助?