Redis Cluster / Redis Replication

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

相关文章

爱评论不评论

近期节日

2020年04月02日 国际儿童图书日
2020年04月03日 寒食节
2020年04月04日 清明节
2020年04月07日 世界卫生日
2020年04月11日 世界帕金森病日
2020年04月19日 谷雨
2020年04月21日 复活节
2020年04月22日 世界地球日
2020年04月23日 世界读书日
2020年04月26日 知识产权日
2020年04月30日 佛诞
2020年04月30日 全国交通安全反思日
查看更多节日