Redis Sentinel部署
Redis Sentinel部署
禅道应用做多节点以后,session 不能只放本机文件里。客户这边给了三台 Redis 节点,要求用 Sentinel 做主从切换。
这里先记 Redis Sentinel 的基础部署。IP 都脱敏。
1 | redis01 10.10.30.11 |
安装 Redis
CentOS 7 上可以用 yum,也可以源码编译。客户环境为了统一版本,当时走的是 Redis 6.x 源码编译。
1 | yum install -y gcc make tcl wget |
创建目录:
1 | mkdir -p /etc/redis /data/redis /var/log/redis |
redis.conf
redis01 先作为 master:
1 | bind 0.0.0.0 |
redis02/redis03 作为 replica,多一行:
1 | replicaof 10.10.30.11 6379 |
启动:
1 | redis-server /etc/redis/redis.conf |
检查:
1 | redis-cli -a '<REDIS_PASSWORD>' INFO replication |
master 上应该看到 connected slaves。
sentinel.conf
三台都配 Sentinel。端口 26379。
1 | port 26379 |
2 是 quorum。三台 Sentinel 里至少两个认为 master 不可用,才会进入判断。
启动:
1 | redis-sentinel /etc/redis/sentinel.conf |
防火墙
1 | firewall-cmd --permanent --add-port=6379/tcp |
应用机测:
1 | nc -vz 10.10.30.11 6379 |
看 Sentinel 状态
1 | redis-cli -p 26379 SENTINEL masters |
如果 Sentinel 自己也配置了 requirepass,再带 -a:
1 | redis-cli -p 26379 -a '<REDIS_PASSWORD>' SENTINEL get-master-addr-by-name zentao-master |
注意这个密码不是 sentinel auth-pass 的概念。sentinel auth-pass 是 Sentinel 去连 Redis master/replica 用的;redis-cli -p 26379 -a 是客户端连 Sentinel 本身用的。这个当时就差点搞混。
切主测试
停 master:
1 | redis-cli -h 10.10.30.11 -a '<REDIS_PASSWORD>' SHUTDOWN |
然后看 Sentinel:
1 | redis-cli -h 10.10.30.12 -p 26379 SENTINEL get-master-addr-by-name zentao-master |
应该变成 redis02 或 redis03。
再看新 master:
1 | redis-cli -h 10.10.30.12 -a '<REDIS_PASSWORD>' INFO replication |
当时容易错的地方
- replica 配了
requirepass,但忘了masterauth。 - Sentinel 端口 26379 没放。
- 三台机器时间不一致,日志看起来很乱。
- 只启动 Redis,忘了启动 Sentinel。
- 应用只写死 Redis master IP,不会问 Sentinel。
- failover 以后旧 master 回来,要看它是否变成 replica。
参考
- Redis Sentinel 官方文档:https://redis.io/docs/latest/operate/oss_and_stack/management/sentinel/
- Redis replication:https://redis.io/docs/latest/operate/oss_and_stack/management/replication/
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 无尽infinite!

