设为首页 收藏本站
查看: 972|回复: 0

[经验分享] redis高可用之redis sentinel(哨兵)的搭建以及应用

[复制链接]

尚未签到

发表于 2018-11-4 07:19:25 | 显示全部楼层 |阅读模式
  redis的sentinel可以监控redis一个和多个redis的主从复制架构。
  主要实现的功能有:

  •   监控(Monitoring): Sentinel 会不断地检查你的主服务器和从服务器是否运作正常。
  •   提醒(Notification): 当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。
  •   自动故障迁移(Automatic failover): 当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作, 它会将失效主服务器的其中一个从服务器升级为新的主服务器, 并让失效主服务器的其他从服务器改为复制新的主服务器; 当客户端试图连接失效的主服务器时, 集群也会向客户端返回新主服务器的地址, 使得集群可以使用新主服务器代替失效服务器。

  •   redis一主双从的IP信息
      master:127.0.0.1:7000
      slave1  :  127.0.0.1:7001
      slvae2  :  127.0.0.1:7002
  •   环境
      CentOS 7.2
      redis 3.2.3
  •   redis配置信息:
      daemonize yes
      port 7000
      pidfile "/var/run/redis/redis-7000.pid"
      logfile "/var/log/redis/redis-7000.log"
      dbfilename "dump-7000.rdb"
      上述配置是主要更改的配置信息,其余的使用默认的配置就好了
  •   搭建redis的一主双从
      启动redis
      /usr/bin/redis-server /etc/redis/7000.conf
      /usr/bin/redis-server /etc/redis/7001.conf
      /usr/bin/redis-server /etc/redis/7002.conf
      查看redis是否启动成功
      netstat -tunlp | egrep '7000|7001|7002'
      tcp        0      0 0.0.0.0:27000           0.0.0.0:*               LISTEN      13010/redis-sentine
      tcp        0      0 127.0.0.1:7001          0.0.0.0:*               LISTEN      12952/redis-server
      tcp        0      0 127.0.0.1:7002          0.0.0.0:*               LISTEN      12958/redis-server
      搭建主从
      slave1:redis-cli -h 127.0.0.1 -p 7001 slaveof 127.0.0.1 7000
      slave2:redis-cli -h 127.0.0.1 -p 7002 slaveof 127.0.0.1 7000
      查看主从是否搭建成功
      master : redis-cli -h 127.0.0.1 -p 7000 info replication
      # Replication
      role:master
      connected_slaves:2
      slave0:ip=127.0.0.1,port=7001,state=online,offset=937723,lag=0
      slave0:ip=127.0.0.1,port=7002,state=online,offset=937723,lag=0
      测试主从是否搭建成功
      master : redis-cli -h 127.0.0.1 -p 7000 set mykey 'hello'
      slave1 : redis-cli -h 127.0.0.1 -p 7001 get mykey
      slave2 : redis-cli -h 127.0.0.1 -p 7002 get mykey
  •   配置sentinel
      daemonize yes #后台运行
      port 27000
      pidfile "/var/run/redis/redis-sentinel27000.pid"
      logfile "/var/log/redis/redis-sentinel27000.log"
      sentinel monitor mymaster 127.0.0.1 7000 1
      #监控master的名字mymaster,IP地址127.0.0.1,端口7000.
      #1 表示只需要一个sentinel认为master属于下线状态就可以进行failover(故障转移),实验的时候
  这个值我一直设置为2,但是我只开启了一个sentinel,所以导致我人为的下线master的时候,无论如何都不能自动的故障转移,等我更改配置为1了之后,故障转移成功了。
  sentinel down-after-milliseconds mymaster 60000
  #表示master在多久返回sentinel发送个master的ping命令的回复,则认为master已经下线。单位是毫秒。60000就是60秒。
  sentinel failover-timeout mymaster 180000
  #表示故障自动转移的超时时间。
  sentinel parallel-syncs mymaster 1
  #表示故障转移成功之后,多少个从服务器向新的master服务器同步数据。这个值越小,则完成故障转移所需要的时间就越长。

  •   启动sentinel
      在2.8.0以后redis包含了sentinel的文件。
      /usr/bin/redis-server /etc/redis/redis-sentinel27000.conf --sentinel
      /usr/bin/resis-sentinel /etc/redis/redis-sentinel27000.conf
      上述的俩个命令都可以启动sentinel,并且命令效果是相同的
  •   检测sentinel启动成功
      命令行
      netstat -tunlp | grep '27000'
      redis-cli -h 127.0.0.1 -p 27000 info sentine
      # Sentinel
      sentinel_masters:1
      sentinel_tilt:0
      sentinel_running_scripts:0
      sentinel_scripts_queue_length:0
      sentinel_simulate_failure_flags:0
      master0:name=mymaster,status=ok,address=127.0.0.1:7000,slaves=2,sentinels=1
      日志
      tailf /var/log/redis/redis-sentinel27000.log
    DSC0000.png

  •   自动故障转移实验
      任务下线master
      redis-cli -h 127.0.0.1 -p 7000 shutdown
      查看master的redis日志信息
      tailf /var/log/redis/redis-7000.log
    DSC0001.png

      在redis日志中可以看得到下线之前redis会做一个快照,将redis的数据保存到本地的磁盘中
      查看sentinel的日志信息
      tailf /var/log/redis/redis-sentinel27000.log
    DSC0002.png

  在日志中我们可以看到
  +sdown master mymaster 127.0.0.1 7000
  #sentinel将master标记为主观下线
  +odown master mymaster 127.0.0.1 7000 #quorum 1/1
  #sentinel将master标记为客观下线
  +new-epoch 1
  +try-failover master mymaster 127.0.0.1 7000
  +try-failover master mymaster 127.0.0.1 7000
  +vote-for-leader cd4713bb67522a3cc34ed44d761c972f63978b97 1
  #开始投票
  +elected-leader master mymaster 127.0.0.1 7000
  +failover-state-select-slave master mymaster 127.0.0.1 7000
  +selected-slave slave 127.0.0.1:7002 127.0.0.1 7002 @ mymaster 127.0.0.1 7000
  +failover-state-send-slaveof-noone slave 127.0.0.1:7002 127.0.0.1 7002 @ mymaster 127.0.0.1 7000
  +failover-state-wait-promotion slave 127.0.0.1:7002 127.0.0.1 7002 @ mymaster 127.0.0.1 7000
  +promoted-slave slave 127.0.0.1:7002 127.0.0.1 7002 @ mymaster 127.0.0.1 7000
  +failover-state-reconf-slaves master mymaster 127.0.0.1 7000
  +slave-reconf-sent slave 127.0.0.1:7001 127.0.0.1 7001 @ mymaster 127.0.0.1 7000
  +slave-reconf-inprog slave 127.0.0.1:7001 127.0.0.1 7001 @ mymaster 127.0.0.1 7000
  +slave-reconf-done slave 127.0.0.1:7001 127.0.0.1 7001 @ mymaster 127.0.0.1 7000
  +failover-end master mymaster 127.0.0.1 7000
  +switch-master mymaster 127.0.0.1 7000 127.0.0.1 7002
  #设置新master服务器127.0.0.1 7002
  +slave slave 127.0.0.1:7001 127.0.0.1 7001 @ mymaster 127.0.0.1 7002
  +slave slave 127.0.0.1:7000 127.0.0.1 7000 @ mymaster 127.0.0.1 7002
  +sdown slave 127.0.0.1:7000 127.0.0.1 7000 @ mymaster 127.0.0.1 7002
  加入日志中出现上述红色字体信息则表明failover转移成功
  4.验证新的主从
  原slave2新master : redis-cli -h 127.0.0.1 -p 7002 info replication
  # Replication
  role:master
  connected_slaves:1
  slave0:ip=127.0.0.1,port=7001,state=online,offset=1118302,lag=1
  新master : redis-cli -h 127.0.0.1 -p 7002 set testkey "test"
  slave1 : redus-cli -h 127.0.0.1 -p 7001 get testkey
  #查看value是否存在
  5.重新拉起旧的master
  /usr/bin/redis-server /etc/redis/7000.conf
  查看sentinel日志
  tailf /var/log/redis/redis-sentinel27000.log
  -sdown slave 127.0.0.1:7000 127.0.0.1 7000 @ mymaster 127.0.0.1 7002
  +fix-slave-config slave 127.0.0.1:7000 127.0.0.1 7000 @ mymaster 127.0.0.1 7002
  查看集群信息
  redis-cli -h 127.0.0.1 -p 7002 info replication
  # Replication
  role:master
  connected_slaves:2
  slave0:ip=127.0.0.1,port=7001,state=online,offset=1130960,lag=0
  slave1:ip=127.0.0.1,port=7000,state=online,offset=1130827,lag=1


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-630407-1-1.html 上篇帖子: 配置 PHP 的 Session 存储到 Redis-11448322 下篇帖子: redis3.0.4 集群安装步骤
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表