redis-哨兵

在这里插入图片描述

概述

Redis Sentinel是一个分布式系统,为Redis提供高可用性解决方案。可以在一个架构中运行多个 Sentinel 进程(progress), 这些进程使用流言协议(gossip protocols)来 接收关于主服务器是否下线的信息, 并使用投票协议(agreement protocols)来决定是否执行自动故 障迁移, 以及选择哪个从服务器作为新的主服务器。

注意

  1. 哨兵也是一台redis服务器,只是不提供数据服务
  2. 通常哨兵配置数量为单数(当服务器出现问题时,哨兵们会进行投票是否切换master,双数的哨兵单位,投票很可能打平)

作用

Redis 的 Sentinel 系统用于管理多个 Redis 服务器(instance) 该系统执行以下三个任务:

  • 监控(Monitoring): Sentinel 会不断地定期检查你的主服务器和从服务器是否运作正常。
  • 提醒(Notification): 当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。
  • 自动故障迁移(Automaticfailover): 断开master与slave连接,选取一个slave作为master,将其他slave连接到新的master,并告知客户端新的服务器地址

在从(slave)服务器宕机时

在Redis中从库重新启动后会自动加入到主从架构中,自动完成同步数据。在Redis2.8版本后,主从断线后恢复的情况下实现增量复制。

在主(master)服务器宕机时

  1. 从所在从属服务器中挑选一台作为master使用,在从数据库中执行SLAVEOF NO ONE命令,断开主从关系并且提升为主库继续服务
  2. 第二步,将主库重新启动后,执行SLAVEOF命令,将其设置为其他库的从库,这时数据就能更新回来

搭建

配置文件详解

需要注意的是:在配置文件中,所有的<master-name>参数必须相同

# 指定哨兵服务器的端口号,注意:哨兵也是一台redis服务器
port 26379
# 指定是否以守护线程的方式启动
daemonize no
# 启用守护进程运行后,Redis将在/var/run/redis-sentinel.pid中写入一个pid文件
pidfile /var/run/redis-sentinel-26379.pid
# 指定日志文件的名称,推荐【sentinel+端口号】
logfile "sentinel-26379.txt"
# 指定相关数据文件存放的目录
dir ./data

# 哨兵节点定期监控 
# 名字叫做 <master-name>  并且 IP 为 <ip> 端口号为 <port> 的主节点。<quorum> 表示的是哨兵判断主节点是否发生故障的票数。
# 也就是说如果我们将<quorum>设置为2就代表至少要有两个哨兵认为主节点故障了,才算这个主节点是客观下线的了,
# 一般是设置为sentinel节点数的一半加一。
# sentinel monitor <master-name> <ip> <port> <quorum>
sentinel monitor mymaster 127.0.0.1 6379 2

#  每个哨兵节点会定期发送ping命令来判断Redis节点和其余的哨兵节点是否是可达的,如果超过了配置的<times>时间没有收到pong回复,
#  就主观判断节点是不可达的,<times>的单位为毫秒。
#  sentinel down-after-milliseconds <master-name> <times>
sentinel down-after-milliseconds mymaster 30000

# 当哨兵节点都认为主节点故障时,哨兵投票选出的leader会进行故障转移,选出新的主节点,原来的从节点们会向新的主节点发起复制,
# 这个配置就是控制在故障转移之后,每次可以向新的主节点发起复制的节点的个数,最多为<nums>个,
# 因为如果不加控制会对主节点的网络和磁盘IO资源很大的开销。
# sentinel parallel-syncs <master-name> <nums>
sentinel parallel-syncs mymaster 1

# 这个代表哨兵进行故障转移时如果超过了配置的<times>时间就表示故障转移超时失败。
# sentinel failover-timeout <master-name>  <times>
sentinel failover-timeout mymaster 180000

# 安全
# 避免脚本重置,默认值yes
# 默认情况下,SENTINEL SET将无法在运行时更改notification-script和client-reconfig-script。
# 这避免了一个简单的安全问题,客户端可以将脚本设置为任何内容并触发故障转移以便执行程序。
sentinel deny-scripts-reconfig yes

# 如果主节点设置了密码,则需要这个配置,否则哨兵无法对主节点进行监控。
# sentinel auth-pass <master-name> <password>
sentinel auth-pass mymaster 123456

启动哨兵

虽然sentinel(哨兵)也是redis服务器,但是启动方式和服务器的方式略有不同,是用redis-sentinel程序启动
sentinel的配置文件也是对应的

redis-sentinel sentinel.conf

sentinel程序和server都在安装目录的src下
在这里插入图片描述

在这里插入图片描述

多哨兵模式

多哨兵模式,配置不同端口的配置文件来开启多个哨兵客户端

案例

  1. 启动服务器,设置主从关系
    在这里插入图片描述

在这里插入图片描述
2. 启动哨兵,这里我设置了三个哨兵 分别设置不同端口号
在这里插入图片描述

启动多个哨兵,监视master,并且从master那里得到所有的从属服务器的信息,加以监视,哨兵与哨兵之间也会互相联系

在这里插入图片描述

每当启动一个哨兵或者服务器,都会自动的重写(所有)哨兵的配置文件,同步修改
在这里插入图片描述

当从属服务器宕机时

这里我们在6380与6381两个从属服务器里面任选一个,将它关掉

在这里插入图片描述

在这里插入图片描述

当失联服务器重新连接时,哨兵们会得到通知,并且重新监视这个从属服务器

在这里插入图片描述

当主(master)服务器宕机时

这里我们模仿主服务器宕机,我们手动关闭当前主服务器,6379的服务器

在这里插入图片描述
我们在配置文件里设置了等待30秒哨兵启动自动转移

在这里插入图片描述
在这里插入图片描述
之前的6379主服务器重新运行,哨兵们会将它转变身份,变成slave,从属服务器,并且将它连接至新的master

在这里插入图片描述
在这里插入图片描述

原理

哨兵机制(sentinel)的高可用

Sentinel(哨兵)是Redis 的高可用性解决方案:由一个或多个Sentinel 实例 组成的Sentinel 系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器。

如图所示
在这里插入图片描述
在Server1 掉线后:
在这里插入图片描述
升级Server2 为新的主服务器:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值