7 个版本
0.1.6 | 2021 年 6 月 19 日 |
---|---|
0.1.5 | 2021 年 6 月 12 日 |
#1730 在 数据库接口
16KB
308 行
httpredis
使用 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.pem
是 redis.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