Redis Cluster / Redis Replication

更新日期: 2015-12-12 阅读次数: 6500 分类: 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 聊聊。 白天工地搬砖,晚上哄熊孩子,可能回复有点慢,见谅。 查看更多联系方式

相关文章

爱评论不评论

近期节日

2019年10月22日 世界传统医药日
2019年10月24日 霜降
2019年10月24日 联合国日
2019年10月31日 世界勤俭日
2019年11月01日 万圣节
2019年11月08日 立冬
2019年11月08日 中国记者日
2019年11月10日 世界青年节
2019年11月11日 光棍节,双十一购物节
2019年11月14日 世界糖尿病日
2019年11月17日 国际大学生节
2019年11月20日 国际儿童日
查看更多节日