【深入学习Redis丨第六篇】Redis哨兵模式与操作详解

打印 上一主题 下一主题

主题 980|帖子 980|积分 2940

〇、前言

   哨兵是一个分布式系统,你可以在一个架构中运行多个哨兵历程,这些历程使用浮名协议来接收关于Master主服务器是否下线的信息,并使用投票协议来决定是否执行主动故障迁移,以及选择哪个Slave作为新的Master。
  


  
一、哨兵模式概述

1.1、为什么要启动哨兵模式

当我们的主服务器宕机后,要手动的去切换主从模式,如许的人工干预,费事费力,还会造成一段时间我们的服务不能使用。所有我们要使用哨兵模式来办理这一题目。
1.2、什么是哨兵模式

哨兵是对Redis的系统的运行环境的监控,它是一个独立历程,功能有二个:
监控主机Redis和从机Redis是否运行正常;
主机Redis出现故障后主动将从机转化为主机;
1.3、哨兵工作原理

单个哨兵的工作原理:

单个哨兵,只必要监控主Redis,就大概得到从Redis。
多个哨兵的工作原理:

多个哨兵,不仅同时监控主从Redis,而且哨兵之间互为监控。
多个哨兵,防止哨兵单点故障。
1.4、哨兵功能

集群监控:负责监控主从集群中的Master和Slave历程是否正常工作。
故障转移(failover):如果Master宕机,会主动从Slave中选举出新的Master,举行主从主动切换。
配置中心:如果发生了故障转移,Sentinel负责关照客户端新的Master的地址。
消息关照:如果某个redis节点有故障,那么Sentsinel会发送报警消息给系统管理员。
1.5、配置说明

  1. protected-mode no
  2. #关闭保护模式,使外网能访问。
  3. port 26379
  4. #修改端口。三份文件分别不同。
  5. daemonize no
  6. #修改为后台运行。
  7. pidfile /var/run/redis-sentinel.pid
  8. #指定不同pid文件,注意文件夹不存在自己要新建。
  9. logfile ""
  10. #配置哨兵日志文件。
  11. dir "/tmp"
  12. #配置哨兵工作路径。
  13. sentinel monitor mymaster 192.167.1.123 6379 2
  14. #配置哨兵需要监控的主节点ip和端口,2表示哨兵数(quorum)
  15. sentinel auth-pass mymaster ibethfy
  16. #配置哨兵连接主节点的认证密码。(主节点配置的requirepass)。
  17. sentinel down-after-milliseconds mymaster 5000
  18. #配置多少毫秒后没收到主节点的反馈,则主观认为主节点down了。
  19. sentinel failover-timeout mymaster 30000
  20. #表示如果30秒后,mysater仍没活过来,则启动failover,从剩下的slave中选一个升级为master
  21. sentinel parallel-syncs mymaster 1
  22. #parallel-syncs 指定了在执行故障转移时, 最多可以有多少个slave同时对新的master进行同步, 这个数字越小, 完成故障转移所需的时间就越长
复制代码
注意:
majority表示大多数哨兵
quorum表示哨兵数
如果quorum < majority,比如5个哨兵,majority就是3,quorum设置为2,那么就3个哨兵授权就可以执行切换。
但是如果quorum >= majority,那么必须quorum数目的哨兵都授权,比如5个哨兵,quorum是5,那么必须5个哨兵都同意授权,才能执行切换。
二、单哨兵模式

在一主多从的环境中,125为主机,123、124为从机
哨兵主机121
2.1、设置哨兵

修改配置文件/usr/local/redis/sentinel.conf
  1. [root@zutuanxue redis]# vim sentinel.conf
  2. #修改配置
  3. sentinel monitor mymaster 192.168.1.123 6379 1
复制代码
注意:
mymaster:监控主数据的名称,命名时可以使用大小写字母和“.-_”符号
192.168.1.123 6379:主机的IP和端口号
2.2、启动哨兵

  1. [root@zutuanxue redis]# ./src/redis-sentinel ./sentinel.conf
  2. [root@zutuanxue redis]# ./src/redis-server ./sentinel.conf --sentinel
复制代码

看出:
125为主机,123、124为从机
2.3、从机宕机

杀死124从机历程,30秒后观察哨兵日志
  1. [root@zutuanxue redis]# ps -ef|grep redis
  2. root      18752  12399  0 06:35 pts/1    00:00:00 ./src/redis-cli
  3. root      22163      1  0 12:18 ?        00:00:02 ./src/redis-server 0.0.0.0:6379
  4. root      22392  22002  0 12:44 pts/2    00:00:00 grep --color=auto redis
  5. [root@zutuanxue redis]# kill -s 9 22163
复制代码

启动124从机,观察哨兵日志
  1. [root@zutuanxue redis]# ./src/redis-server ./redis.conf
复制代码

2.4、主机宕机

杀死125主机历程,30秒后观察哨兵日志
  1. [root@zutuanxue redis]# ps -ef|grep redis
  2. root      14988      1  0 06:20 ?        00:01:15 ./src/redis-server 0.0.0.0:6379
  3. root      15144   8874  0 06:35 pts/0    00:00:00 ./src/redis-cli
  4. root      18527  18104  0 12:50 pts/1    00:00:00 grep --color=auto redis
  5. [root@zutuanxue redis]# kill -s 9 14988
复制代码

日志状态说明:
  1. +reset-master:
  2. #主服务器已被重置。
  3. +slave:
  4. #一个新的从服务器已经被 Sentinel 识别并关联。
  5. +failover-state-reconf-slaves:
  6. #故障转移状态切换到了 reconf-slaves 状态。
  7. +failover-detected:
  8. #另一个 Sentinel 开始了一次故障转移操作,或者一个从服务器转换成了主服务器。
  9. +slave-reconf-sent:
  10. #领头(leader)的 Sentinel 向实例发送了 [SLAVEOF](/commands/slaveof.html) 命令,为实例设置新的主服务器。
  11. +slave-reconf-inprog:
  12. #实例正在将自己设置为指定主服务器的从服务器,但相应的同步过程仍未完成。
  13. +slave-reconf-done:
  14. #从服务器已经成功完成对新主服务器的同步。
  15. -dup-sentinel:
  16. #对给定主服务器进行监视的一个或多个 Sentinel 已经因为重复出现而被移除 —— 当 Sentinel 实例重启的时候,就会出现这种情况。
  17. +sentinel:
  18. #一个监视给定主服务器的新 Sentinel 已经被识别并添加。
  19. +sdown:
  20. #给定的实例现在处于主观下线状态。
  21. -sdown:
  22. #给定的实例已经不再处于主观下线状态。
  23. +odown:
  24. #给定的实例现在处于客观下线状态。
  25. -odown:
  26. #给定的实例已经不再处于客观下线状态。
  27. +new-epoch:
  28. #当前的纪元(epoch)已经被更新。
  29. +try-failover:
  30. #一个新的故障迁移操作正在执行中,等待被大多数 Sentinel 选中(waiting to be elected by the majority)。
  31. +elected-leader:
  32. #赢得指定纪元的选举,可以进行故障迁移操作了。
  33. +failover-state-select-slave:
  34. #故障转移操作现在处于 select-slave 状态 —— Sentinel 正在寻找可以升级为主服务器的从服务器。
  35. no-good-slave:
  36. #Sentinel 操作未能找到适合进行升级的从服务器。Sentinel 会在一段时间之后再次尝试寻找合适的从服务器来进行升级,又或者直接放弃执行故障转移操作。
  37. selected-slave:
  38. #Sentinel 顺利找到适合进行升级的从服务器。
  39. failover-state-send-slaveof-noone:
  40. #Sentinel 正在将指定的从服务器升级为主服务器,等待升级功能完成。
  41. failover-end-for-timeout:
  42. #故障转移因为超时而中止,不过最终所有从服务器都会开始复制新的主服务器(slaves will eventually be configured to replicate with the new master anyway)。
  43. failover-end:
  44. #故障转移操作顺利完成。所有从服务器都开始复制新的主服务器了。
  45. +switch-master
  46. #配置变更,主服务器的 IP 和地址已经改变。 这是绝大多数外部用户都关心的信息。
  47. +tilt:
  48. #进入 tilt 模式。
  49. -tilt:
  50. #退出 tilt 模式
复制代码
启动125主机,观察哨兵日志
  1. [root@zutuanxue redis]# ./src/redis-server ./redis.conf
复制代码

三、多哨兵模式

在一主多从的环境中,123为主机,124、125为从机
121中设置三个哨兵sentinel-1.conf、sentinel-2.conf、sentinel-3.conf
3.1、设置哨兵

将哨兵文件sentinel.conf,复制三份sentinel-1.conf、sentinel-2.conf、sentinel-3.conf
  1. [root@zutuanxue redis]# cp sentinel.conf sentinel-1.conf
  2. [root@zutuanxue redis]# cp sentinel.conf sentinel-2.conf
  3. [root@zutuanxue redis]# cp sentinel.conf sentinel-3.conf
复制代码
修改配置文件/usr/local/redis/sentinel-1.conf
  1. [root@zutuanxue redis]# vim sentine-l.conf
  2. #修改配置
  3. protected-mode no
  4. port 27001
  5. daemonize yes
  6. pidfile "/var/run/redis-sentinel-27001.pid"
  7. logfile "/usr/local/redis/log/27001.log"
  8. sentinel monitor m1 192.168.1.123 6379 1
  9. #sentinel myid c299ec06a9dde77dcbc086082e9d7e30a29615b7
复制代码
修改配置文件/usr/local/redis/sentinel-2.conf
  1. [root@zutuanxue redis]# vim sentine-2.conf
  2. #修改配置
  3. protected-mode no
  4. port 27002
  5. daemonize yes
  6. pidfile "/var/run/redis-sentinel-27002.pid"
  7. logfile "/usr/local/redis/log/27002.log"
  8. sentinel monitor m2 192.168.1.123 6379 1
  9. #sentinel myid c299ec06a9dde77dcbc086082e9d7e30a29615b7
复制代码
修改配置文件/usr/local/redis/sentinel-3.conf
  1. [root@zutuanxue redis]# vim sentine-3.conf
  2. #修改配置
  3. protected-mode no
  4. port 27003
  5. daemonize yes
  6. pidfile "/var/run/redis-sentinel-27003.pid"
  7. logfile "/usr/local/redis/log/27003.log"
  8. sentinel monitor m3 192.168.1.123 6379 1
  9. #sentinel myid c299ec06a9dde77dcbc086082e9d7e30a29615b7
复制代码
3.2、启动哨兵

  1. [root@zutuanxue redis]# ./src/redis-sentinel ./sentinel-1.conf
  2. [root@zutuanxue redis]# ./src/redis-sentinel ./sentinel-2.conf
  3. [root@zutuanxue redis]# ./src/redis-sentinel ./sentinel-3.conf
复制代码
3.3、从机宕机

杀死125从机历程
  1. [root@zutuanxue redis]# ps -ef|grep redis
  2. root      20733      1  0 11:55 ?        00:00:00 ./src/redis-server 0.0.0.0:6379
  3. root      20775  20646  0 11:59 pts/0    00:00:00 grep --color=auto redis
  4. [root@zutuanxue redis]# kill -s 9 20733
复制代码
启动125从机
  1. [root@zutuanxue redis]# ./src/redis-server ./redis.conf
复制代码
3.4、主机宕机

杀死123主机历程,30秒后观察哨兵日志
  1. [root@zutuanxue redis]# ps -ef|grep redis
  2. root      27555      1  0 11:55 ?        00:00:01 ./src/redis-server 0.0.0.0:6379
  3. root      27693  27393  0 12:08 pts/0    00:00:00 grep --color=auto redis
  4. [root@zutuanxue redis]# kill -s 9 27555
复制代码
启动123主机
  1. [root@zutuanxue redis]# ./src/redis-server ./redis.conf
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

渣渣兔

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表