【Redis哨兵集群】

目录

  • 开始配置主从复制
  • 开始配置Redis Sentinel

@

***

在开始之前,我们先来看看Redis的主从复制

主从复制原理:

  1. 从服务器向主服务器发送SYNC命令。
  2. 主服务器接到SYNC命令后,会调用BGSAVE命令,创建一个RDB文件,并使用缓冲区记录接下来执行的所有写命令。
  3. 当主服务器执行完BGSAVE命令后,会向从服务器发送RDB文件,而从服务器则会接收并执行这个文件。
  4. 主服务器将缓冲区存储的所有写命令发送给从服务器执行。

---------

Redis主从复制使用的是RDB备份方式来同步主从服务器的数据的。

同步开始之后,通过主库命令传播的方式,主动复制方式实现。

2.8以后实现PSYNC饿机制,实现断线重连。

Redis主从复制的背景问题

Reids主从复制可将主节点数据同步给从节点,从节点此时有两个作用:

  1. 一旦主节点宕机,从节点作为主节点的备份可以随时顶上来.
  2. 扩展主节点的读能力,分担主节点的读压力.

.

一旦主节点宕机,从节点上位,那么就需要人为修改所有应用方的主节点地址(指定新的master地址),还需要命令所有从节点复制新的主节点.

这个问题很麻烦,而redis-sentinel就可以很好的解决这个问题.

*

Redis-Sentinel**

????Redis-Sentinel是redis官方推荐的高可用性能解决方案,当用redis做master-slave的高可用时,如果master本机宕机,redis本身或者客户端都没有实现主从切换的功能,而redis-sentinel是一个独立运行的进程,用于监控多个maser-slave集群,其自动发现master宕机,进行自动切换:slave > master



Sentinel主要功能

  • 不时的监控redis是否良好运行,如果节点不可达就会对节点做下线标示.
  • 如果被标示的是主节点,则sentinel就会和其它的sentinel节点“协商”,如果其它节点也认为主节点不可达,就会选举一个sentinel节点来完成自动故障转移.
  • 在master-slave进行切换后,master_redis.conf、slave_redis.conf和sentinel.conf的内容都会发生改变,即master_redis.conf中会多一行slaveof的配置,sentinel.conf的监控目标会随之调换.

    *

    Sentinel工作原理**

    每一个Sentinel以每秒钟一次的频率向它所知的所有Master、Slave以及其它Sentinel实例发送一个PING命令.

    如果一个实例(Instance)距离最后一次有效回复PING命令的时间超过down-after-milliseconds选项所指定的值,则这个实例会被Sentinel标记为主观下线.

    如果一个Master被标记为主观下线,则正在监视这个Master的所有Sentinel都会以每秒一次的频率确认这个Master的确进入了主观下线状态.

    当有足够数量的Sentinel(大于等于配置文件中指定的值)在指定的时间范围内确认这个Master的确进入了主观下线状态,那么这个Master会被标记为客观下线.

    在一般情况下,每个Sentinel会以每10秒一次的频率向它已知的所有Master、Slave发送INFO命令.

    当有Master被Sentinel标记为客观下线时,Sentinel向下线的Master的所有Slave发送INFO命令的频率会从10秒一次改为每秒一次.

    若没有足够数量的Sentinel同意Master已经下线,则此Master的客观下线状态就会被移除.



主观下线和客观下线

主观下线

Subjectively Down,简称SDOWN,指的是当前Sentinel实例对某个redis服务器做出的下线判断

客观下线

Objectively Down,简称ODOWN,指的是多个Sentinel实例在对Master Server做出SDOWN判断,并且通过SENTINEL is-master-down-by-addr命令互相交流之后,得出的Master Server下线判断,然后开启failover.

SDOWN

适合于Master和Slave,只要一个Sentinel发现Master进入了ODOWN,这个Sentinel就可能会被其它Sentinel推选出,并对下线的主服务器执行自动故障迁移操作.

ODOWN

只适用于Master,对于Slave的Redis实例,Sentinel在将它们判断为下线前不需要进行协商,所以Slave的Sentinel永远不会到达ODOWN.

主从复制架构图

Redis Sentinel架构图

Sentinel是redis一个进程,不存储数据,只负责监控redis.

关于Redis的发布订阅,详见此文献【Redis发布订阅】

---

开始配置主从复制

搭建环境:

一台Redis服务器(版本redis-5.0.2)

三个Redis实例(一个主节点Master,两个从节点Slave)

配置文件

***

主节点 7001.conf

port 7001
daemonize yes
logfile /usr/local/redis-5.0.2/logs/7001.log
dbfilename dump-7001.rdb
dir /usr/local/redis-5.0.2/db/7001/

从节点 7002.conf

port 7002
daemonize yes
logfile /usr/local/redis-5.0.2/logs/7002.log
dbfilename dump-7002.rdb
dir /usr/local/redis-5.0.2/db/7002/

# 指定主节点
slaveof 127.0.0.1 7001

从节点 7003.conf

port 7003
daemonize yes
logfile /usr/local/redis-5.0.2/logs/7003.log
dbfilename dump-7003.rdb
dir /usr/local/redis-5.0.2/db/7003/

# 指定主节点
slaveof 127.0.0.1 7001

验证主从关系

***

在主节点上查看主从通信关系

在从节点上查看主从通信关系

此时,一主双从已经搭建完毕了,可在Master上写入些数据,然后在Slave查看.

***

开始配置Redis Sentinel

搭建环境:

包含上面搭建主从的所有环境

还增加了三个redis-sentinel实例(27001.conf、27002.conf、27003.conf)

配置文件

***

27001.conf

port 27001
daemonize yes
dir "/usr/local/redis-5.0.2/db/"
logfile "/usr/local/redis-5.0.2/logs/27001.conf"

sentinel monitor mymaster 127.0.0.1 7001 2
# mymaster:主节点的别名
# 当前Sentinel节点监控 127.0.0.1 7001 这个主节点
# 2:表示主节点失败至少需要2个Sentinel节点同意

sentinel down-after-milliseconds mymaster 30000
# 每个Sentinel节点都要定期发PING命令来判断Redis数据节点和其余Sentinel节点是否可达
# 这里配置为30000毫秒,即超过30秒未收到某个节点的PING命令且未收到回复,则判定不可达

sentinel parallel-syncs mymaster 1
# 当Sentinel节点集合对主节点故障判定达成一致时,Sentinel领导者节点会做故障转移操作,选出新的主节点
# 原来的从节点会向新的主节点发起复制操作,限制每次向新的主节点发起复制操作的从节点个数为1

sentinel failover-timeout mymaster 180000
# 设定故障转移的超时时间为180000毫秒

27002.conf、27003.conf的配置与上面的配置(27001.conf)差异仅在于端口.

启动哨兵:redis-sentinel 配置文件

启动后,哨兵的配置文件会被重写入sentinel myid等信息.

验证哨兵集群

***

[[email protected] conf]# redis-cli -p 27001 info sentinel
# 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:7003,slaves=2,sentinels=3
# 看到最后一条信息即正确配置了哨兵集群
# name=mymaster  -> 哨兵别名
# status=ok  -> 状态OK
# address=127.0.0.1:7003  -> 监控的地址
# slaves=2 -> 当前有2个从节点
# sentinels=3  -> 当前共有3个哨兵

到这里,哨兵集群已经搭建完毕了.

不用说,此时你肯定是想去干掉主节点了吧,先别慌,我们来看看下面的监控扩扑图.

监控扩扑图

验证故障转移的大致思路

  • 干掉主节点的Redis进程7001端口,等待down-after-milliseconds配置的时间后,观察从节点是否会进行新的master选举,进行切换.
  • 重新恢复旧的“master”节点,查看此时的redis身份.

原文地址:https://www.cnblogs.com/zyk01/p/10176559.html

时间: 2024-11-05 16:28:16

【Redis哨兵集群】的相关文章

为什么redis哨兵集群只有2个节点无法正常工作?

由于redis的响应速度快,每秒支持的并发极高(号称10万),现在redis越来越流行了redis支持的存储有: string, hash(map),list, set, sortset 同时可以使用redis的setnx 来实现分布式锁首先谈谈redis的哨兵模式: 哨兵支持对主从的监控,并且当主节点挂机之后,可以启动从节点升级为主节点继续提供服务同时哨兵也支持对客户端提供发现服务,客户端通过连接哨兵从而获取主节点的信息,如果主节点挂机,在升级从节点为主节点之后,客户端通过哨兵可以连接上新的主

11.Redis 哨兵集群实现高可用

作者:中华石杉 Redis 哨兵集群实现高可用 哨兵的介绍 sentinel,中文名是哨兵.哨兵是 redis 集群机构中非常重要的一个组件,主要有以下功能: 集群监控:负责监控 redis master 和 slave 进程是否正常工作. 消息通知:如果某个 redis 实例有故障,那么哨兵负责发送消息作为报警通知给管理员. 故障转移:如果 master node 挂掉了,会自动转移到 slave node 上. 配置中心:如果故障转移发生了,通知 client 客户端新的 master 地址

三台服务器上离线安装redis哨兵集群,一主二从三哨兵

三台服务器上离线安装redis哨兵集群,一主二从三哨兵 系统安装好gcc环境,(不然编译redis会报错).依旧不知道怎么离线安装gcc环境的可查看CentOS下离线安装gcc环境,图文详细 下载 点击官网地址下载Linux版的redis http://download.redis.io/releases/redis-5.0.4.tar.gz 上传 put D:\AppStore\redis\redis-5.0.4.tar.gz /root 安装 tar xzf redis-5.0.4.tar.

Redis 哨兵集群实现高可用

哨兵的介绍 sentinel,中文名是哨兵.哨兵是 redis 集群机构中非常重要的一个组件,主要有以下功能: 集群监控:负责监控 redis master 和 slave 进程是否正常工作. 消息通知:如果某个 redis 实例有故障,那么哨兵负责发送消息作为报警通知给管理员. 故障转移:如果 master node 挂掉了,会自动转移到 slave node 上. 配置中心:如果故障转移发生了,通知 client 客户端新的 master 地址. 哨兵用于实现 redis 集群的高可用,本身

redis 哨兵集群原理及部署

复制粘贴自: https://www.cnblogs.com/kevingrace/p/9004460.html 请点击此链接查看原文. 仅供本人学习参考, 如有侵权, 请联系删除, 多谢! Redis的集群方案大致有三种:1)redis cluster集群方案:2)master/slave主从方案:3)哨兵模式来进行主从替换以及故障恢复. 一.sentinel哨兵模式介绍Sentinel(哨兵)是用于监控redis集群中Master状态的工具,是Redis 的高可用性解决方案,sentinel

redis哨兵集群的搭建

Linux里插入 i 退出并保存 esc :wq  按enter键 搭建哨兵:(主服务器用来插入,从服务器用来做查询) 1.复制conf文件 2.主服务器为:master    从服务器为:slaves 3.分别修改从服务器conf配置文件中的端口号,并设置本机ip的主服务器端口号 4.退出并保存 5.启动客户端 ./redis-cli 6.输入  info 可看到如下信息:   7.退出  quit 8.进入从服务器的命令  ./redis-cli -p 6380 进的就是6380的服务器 9

10、redis哨兵集群高可用

1 Redis的分片技术 1.1 分片介绍 1.1.1 传统方式的问题 说明:如果采用单台redis时,如果redis出现宕机现象.那么会直接影响我们的整个的服务. 1.1.2 采用分片模式 说明:由一台redis扩展到多台redis.由多台redis共同为用户提供服务.并且每台redis中保存1/N的数据. 好处:如果一台redis出现了问题.不会影响整个redis的服务. 1.1.3 配置多台redis 说明:将redis.conf文件拷贝3份到shard文件夹下.分别形成6379/6380

docker-compose搭建redis哨兵集群

头脑风暴 出于学习目的,您可以很轻松地在docker环境下运行redis的单个实例,但是如果您需要在生产环境中运行它,那么必须将Redis部署为HA(High Avaliable)模式. Redis Sentinel为Redis提供高可用性,这意味着使用Sentinel可以创建Redis HA部署,该部署可以在无需人工干预的情况下抵抗某些类型的故障. Redis Sentinel提供的主要功能是: 当主节点发生故障时,它将自动选择一个备用节点并将其升级为主节点. 它是如何做到的,它会定期检查Re

redis哨兵集群

Sentinel 哨兵 修改src下的sentinel.conf文件 , 配置端口  :port:随便   daemonize yes 配置主服务器的ip 和端口 我们把监听的端口修改成7000,并且加上权值为1,这里的权值,是用来计算我们需要将哪一台服务器升级升主服务器 sentinel monitor <master-name> <ip> <redis-port> <quorum> sentinel monitor master-name 127.0.0