redis replication 与 cluster 的区别
概念区分
- redis replication 是主从复制
- cluster 是对全量数据进行 sharding, 散列到不同的节点上
redis replication
经典的 master/slave 模式, 即主从复制 (replication), 参考
- 可以一 master 多 slave
- slave 可以再分出 slave,类似树形结构
- master/slave 是非阻塞式同步,即同步时,master 仍然可以进行读写操作
- 同步时,在 slave 侧也是非阻塞式的,即仍然可以进行读操作,但是读取的是同步前的数据
- slave 通常用于 read-only 操作,例如耗费资源的 SORT 操作, 或者单纯的灾备
配置 redis replication 时需要注意的问题
master 一定要设置持久化。否则在关闭持久化,且有类似 supervisor 拉起挂掉的 redis 进程的情况下, 可能造成数据的丢失。
原因是 redis 进程关闭之后,内存中的数据将会被清空,重启之后,数据在 empty 的情况下,会同步到 slave 那里,造成所有的数据丢失。
replication 的同步策略
- 2.8 版本之前,同步连接断开,重连之后会进行全量同步。
- 2.8 版本之后,重连之后不一定需要全量同步,通常是增量同步。即将需要执行的操作同步从 master 同步到 slave。
开放端口带来的安全问题
由于主从同步需要开放端口
slaveof 192.168.1.1 6379
所以最好为 master 设置访问密码,并将密码写到 redis 的配置文件里
masterauth <password>
replication 模式下 master 与 slave 的自动切换
考虑以下场景,当 master 宕机,如果自动将 slave 选举为 master
参考 Redis Sentinel Documentation
sentinel 是哨兵的意思
Redis Sentinel 的技能包括
- 监控. 判断 master/slave 实例是否工作正常
- 通知. 在 redis 实例异常的情况下,可以通过 api 的方式通知管理员,或者响应处理程序
- 自动故障切换. 当 master 倒下后,sentinel 会在 slave 中自动选举出一个新 master 并通知其他 slave
- 为 client 提供配置信息。例如当前的 master 是谁。(所有应用层需要请求 sentinel 获取当期的 master 地址)
架构中需要部署多个 sentinel 实例
- 部分 sentinel 实例挂掉,不会影响选举新 master 的逻辑
- 工作异常的 sentinel 实例没有选举新 master 的资格 (例如网络异常,无法连接)
- client 可以请求任意 sentinel 实例获取 master 的配置信息
推荐使用 Redis 2.8 & Sentinel 2
注意: sentinel 默认使用了 TCP port 26379 进行通讯,iptables 莫忘配置。
参考
微信关注我哦 👍
我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式