测试 redis replication & sentinel & python

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

测试目的

测试一下在 redis 主从配置下,单点故障对应用层 (Python) 的影响。

测试环境

  • 系统: Ubuntu 14.10
  • redis 版本: 2.8.17 (redis-server -v)
  • Python 版本: 2.7.8
  • Python Redis 版本: 2.10.3 (python -c "import redis; print redis.VERSION")

Redis Replication and Sentinel

Redis 官网给出的 Sentinel 配置示例,实际上是模拟了对两个不同 redis replication 的监控。

sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 60000
sentinel failover-timeout mymaster 180000
sentinel parallel-syncs mymaster 1

sentinel monitor resque 192.168.1.3 6380 4
sentinel down-after-milliseconds resque 10000
sentinel failover-timeout resque 180000
sentinel parallel-syncs resque 5

配置规范

读写逻辑

  • 读写均在 master 上
  • 当前的 master IP, port 通过本机的 sentinel 获取

需确认的逻辑

  • 代码实现层: 是否每次 redis 操作,都需要额外的拉取 master 逻辑? redis python 模块能否主动发现? 主动发现的逻辑是否是通过异常实现的?
  • 逻辑实现层: 每次都需要去 sentinel 那里获取 master 信息造成的性能损耗是多少?

sentinel 在挂掉一台时,选举失败

配置了两台 sentinel 实例,其中一台挂掉时,并关闭 redis master,sentinel log 出现报错

-failover-abort-not-elected master mymaster .... Next failover delay: I will not start a failover before ....

python redis 模块端报错

No master found for 'master'

原因是 sentinel 实例数少于 3,只配置了两个。增加一个 sentinel 实例就 OK 了。

关闭一台 master 会看到那些错误提示

redis server (slave) 端看到的错误信息

Error condition on socket for SYNC: Connection refused MASTER MODE enabled (user request)

python redis 模块看到的错误信息

Error 111 connecting to 127.0.0.1:6380. Connection refused.

注意事项

  • sentinel 实例必须 3 个以上,2个判定为宕机才算
  • 如果 master/slave 设置了密码, sentinel 的实例配置也必须写明密码

参考

领取阿里云/腾讯云服务器优惠券

关于作者

我是来自山东烟台的一名开发者,喜欢瞎折腾,顺便记记笔记。有敢兴趣的话题,欢迎加微信 zhongwei 聊聊。 白天写程序,晚上哄熊孩子,可能回复有点慢,见谅。 查看更多联系方式

相关文章

爱评论不评论

近期节日

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日 全国交通安全反思日
2020年05月01日 国际劳动节
2020年05月04日 五四青年节
2020年05月05日 立夏
查看更多节日