7 个版本

0.1.6 2021 年 6 月 19 日
0.1.5 2021 年 6 月 12 日

#1730数据库接口

BSD-3-Clause

16KB
308

httpredis

build

使用 TLS 的 Redis Sentinel 的 HTTP 状态码。

为什么?

当使用 HAProxy 并配置 Redis 和 Sentinel 使用 TLS 时,提供高可用性。

要解决的问题

在不使用 TLS 的情况下,HAProxy 可以这样配置以找到当前的主节点

backend redis
    mode tcp
    balance first
    timeout queue 5s
    default-server check inter 1s fall 2 rise 2 maxconn 500
    option tcp-check
    tcp-check connect
    tcp-check send AUTH\ secret\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 info\ server\r\n
    tcp-check expect rstring uptime_in_seconds:\d{2,}
    tcp-check send QUIT\r\n
    tcp-check expect string +OK
    server redis1 10.0.1.11:6379
    server redis2 10.0.1.12:6379
    server redis3 10.0.1.13:6379

这效果很好,但如果 Redis 配置为使用 TLS,则 option tcp-check 无法正常工作,因为它不支持 TLS。

工作原理

httpredis 是一个连接到 Redis 的 Web 服务,当请求 info replication 并确定角色为 role:master 时,该服务将返回 HTTP 状态码 200

HAProxy 的配置可以是

backend redis
    mode tcp
    option httpchk
    default-server check inter 1s fall 2 rise 2 port 36379
    server redis1 10.0.1.11:6379 ssl crt /path/to/redis.pem ca-file /path/to/ca.crt ssl verify none
    server redis2 10.0.1.11:6379 ssl crt /path/to/redis.pem ca-file /path/to/ca.crt ssl verify none
    server redis3 10.0.1.11:6379 ssl crt /path/to/redis.pem ca-file /path/to/ca.crt ssl verify none

redis.pemredis.crt + redis.key

$ cat redis.crt redis.key > redis.pem

每个 Redis 节点都需要运行 httpredis

$ cargo install httpredis

然后这样运行

httpredis --tls-ca-cert-file /path/to/ca.crt --tls-cert-file /path/to/redis.crt --tls-key-file /path/to/redis.key --pass secret

使用 httpredis -h 检查更多选项

依赖项

~12–25MB
~365K SLoC