Redis Cluster / Redis Replication

更新日期: 2015-12-12 阅读次数: 11517 分类: Redis

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 莫忘配置。

python 的 sentinel 支持

参考

关于作者 🌱

我是来自山东烟台的一名开发者,有敢兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式