global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
stats timeout 30s
user haproxy
group haproxy
daemon
# 以下行启用多线程。这应该与您希望使用的可用线程数量相关。
nbproc 1
nbthread 4
cpu-map auto:1/1-4 0-3
# 默认 SSL 材料位置
ca-base /etc/ssl/certs
crt-base /etc/ssl/private
# 在启用 SSL 的监听套接字上使用的默认加密套件。
# 更多信息,请参见 ciphers(1SSL)。此列表来自
# https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/
# 另一个包含额外指令的备选列表可以从以下地址获取
# https://mozilla.github.io/server-side-tls/ssl-config-generator/?server=haproxy
ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS
ssl-default-bind-options no-sslv3
maxconn 40000
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000
errorfile 400 /etc/haproxy/errors/400.http
errorfile 403 /etc/haproxy/errors/403.http
errorfile 408 /etc/haproxy/errors/408.http
errorfile 500 /etc/haproxy/errors/500.http
errorfile 502 /etc/haproxy/errors/502.http
errorfile 503 /etc/haproxy/errors/503.http
errorfile 504 /etc/haproxy/errors/504.http
# 以下是 HAProxy 的常见设置。在本例中,我们连接到两个实例,并为 keydb-cli 使用一个共享端口。
# 客户端连接到端口 6380,并根据设置和检查被重定向到两个节点之一。
#
# 对于 active-replica(主主复制)支持,您将有两个互为副本且数据同步的主节点。
# 不需要哨兵节点,因为没有需要提升为 master 的副本节点。
# HAProxy 会检查一个实例是否宕机,并将写入操作定向到另一个节点。这是通过健康检查完成的。
# 负载均衡策略 (balance) 的默认配置是 roundrobin(轮询)。如果您希望优先使用某个服务器,可以在服务器 IP 地址旁边添加
# "backup" 关键字。这样 HAProxy 将会把流量发送到非备份实例,除非该实例不可达。
# 您也可以考虑在服务器行末尾添加权重。权重可以表示为 "weight 50%"(总和为 100%),或者如果不带 % 符号,则为 1 到 256 之间的数字。
# 选择 "balance first" 将使用第一个连接的实例,只有在 maxconn 超出时才开始使用第二个实例。
# 如果您设置了密码,需要在这里包含它,并为两个节点设置相同的密码。
# 请注意,在常见的主从复制设置中,您会使用 "expect string role:master" 来验证您只向健康的 master 发送流量。
# 对于 Active-rep(主主复制),您会使用 "expect string role: active-replica",因为这是主主复制模式下的角色。理解这个获取数据和
# 健康检查的概念后,您可以根据需要探测其他信息。
listen mykeydb
bind *:6380
maxconn 40000
mode tcp
balance first
option tcplog
option tcp-check
#如果您有基本认证,请取消下面几行的注释
#tcp-check send AUTH\ yourpassword\r\n
#tcp-check expect string +OK
tcp-check send PING\r\n
tcp-check expect string +PONG
tcp-check send info\ replication\r\n
tcp-check expect string role: master
tcp-check send QUIT\r\n
tcp-check expect string +OK
server keydb3 172.19.0.3:6379 maxconn 20000 check inter 1s
server keydb2 172.19.0.2:6379 maxconn 20000 check inter 1s
# 发送 PING 是一种健康检查,用于确保服务器处于活动状态。获取复制信息是为了确定该节点是否为
# master。如果不是 master,则不向其写入。这可以防止尝试向副本实例写入数据。
# QUIT 命令可以防止每次运行时产生不必要的日志信息。
# 常见的主从复制 HAProxy 设置不需要包含 "balance" 选项或 "backup",因为只有 master
# 会接收到流量(通过健康检查)。如果您有哨兵节点,它们会自动将副本提升为 master,届时
# 健康检查会将流量重定向到新的 master。