Redis(二十八)- Redis的哨兵模式

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: 这篇文章将介绍另外一种模式—哨兵模式,该模式在master宕机之后可以自动从各个slave中选举一个作为新的master。

1. 简介

上一篇文章我们介绍了Redis中的主从复制模式,在文章的末尾我们说到了这种模式的一个弊端。那就是当master宕机之后,slave不能自动晋升为master,这就会导致redis服务出现不可用的情况。

这篇文章将介绍另外一种模式—哨兵模式,该模式在master宕机之后可以自动从各个slave中选举一个作为新的master。

2. 哨兵模式的构造

通过哨兵来监听master,当master宕机之后,哨兵会选举出新的master。哨兵可以设置一个,也可以设置多个,一般而言在生产中会设置大于1个的奇数个哨兵,这是为了防止哨兵自身宕机的情况。

3. 哨兵模式的设置

3.1. 将redis服务设置为一主两从

3.2. 新建 sentinel.conf 文件

在redis.conf的同级目录下,新建一个名为 sentinel.conf的文件,这个文件的名称不能修改,不能错。

3.3. 配置哨兵

在前面创建的sentinel.conf 文件中写入如下内容:

sentinel monitor mymaster 127.0.0.1 6379 1

其中,mymaster 为监控对象其的服务器名称,1 为至少有多少个哨兵同意迁移的数量。

3.4. 启动哨兵

在 /usr/local/bin 目录下有个名为redis-sentinel的程序,启动它即可启动哨兵。这里为了方便演示,采用的是客户端的启动方式。如果想采用后台启动的方式,则需要在 sentinel.conf 文件中设置daemonize yes

/usr/local/bin/redis-sentinel /myredis/sentinel.conf

正常启动之后可以看到sentinel 的端口号是 26379,监听到的master是: 127.0.0.1 6379

4. 观察哨兵模式的运行

这里手动将主服务器 6379宕机。然后,大概10秒左右可以看到哨兵窗口日志,切换了新的主机。

哨兵通过选举的方式,选出了 6380 作为新的master。

5. 哨兵模式的选举策略

哨兵模式的选举过程有三步:

从下线的主服务的所有从服务里面挑选一个从服务,将其转成主服务。选择的条件详见下方说明。

挑选出新的主服务之后sentinel向原主服务的从服务发送slaveof新主服务的命令,复制新master。

当下线的服务重新上线时,sentinel 会向其发送slaveof命令,让其成为新主的从服务器。

5.1. 选举的条件

选择优先级靠前的

优先级在redis.conf中默认replica-priority 100 ,值越小优先级越高

选择偏移量最大的
偏移量是指获得原主机数据最全的

选择runid最小的从服务
每个redis实例启动后都会随机生成一个40位的runid。

6. 复制延时

由于所有的写操作都是先在master上操作,然后同步更新到slave上,所以从master同步到slave机器有一定的延迟,当系统很繁忙的时候,延迟问题会更加严重,slave机器数量的增加也会使这个问题严重。

7. 连接哨兵模式代码

private static JedisSentinelPool jedisSentinelPool = null;
    public static Jedis getJedisFromSentinel() {
        if (jedisSentinelPool == null) {
            Set<String> sentinelSet = new HashSet<>();
            sentinelSet.add("127.0.0.1:26379");
            JedisPoolConfig poolConfig = new JedisPoolConfig();
            poolConfig.setMaxTotal(10); //最大可用连接数
            poolConfig.setMaxIdle(5); //最大闲置连接数
            poolConfig.setMinIdle(5); //最小闲置连接数
            poolConfig.setBlockWhenExhausted(true); //连接耗尽是否等待
            poolConfig.setMaxWaitMillis(2000); //等待时间
            poolConfig.setTestOnBorrow(true); //取连接的时候进行一下测试ping
            jedisSentinelPool = new JedisSentinelPool("mymaster", sentinelSet, poolConfig);
            return jedisSentinelPool.getResource();
        }
        return jedisSentinelPool.getResource();
    }

总结

本文首先介绍了哨兵模式的搭建,哨兵的搭建其实就是增加sentinel.conf文件,然后启动 redis-sentinel 命令

接着哨兵如何进行选举的,当主机宕机之后,哨兵在10秒后会检查一次,然后进行选举,选举的条件是:

选取优先级高的,即replica-priority值越小越先被选择,

选取偏移量最大的,即拥有主机数据最全的

选择runid最小的从服务


相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
3月前
|
监控 负载均衡 NoSQL
Redis之哨兵模式
Redis之哨兵模式
|
3月前
|
消息中间件 NoSQL Redis
Redis高可用之哨兵模式(第二部分)
Redis高可用之哨兵模式(第二部分)
|
3月前
|
监控 NoSQL 算法
Redis之哨兵模式
【1月更文挑战第8天】哨兵模式说白点就是:自动选举老大的模式。
194 6
|
5月前
|
存储 监控 NoSQL
redis主从模式,redis哨兵模式,redis集群模式
redis主从模式,redis哨兵模式,redis集群模式
redis主从模式,redis哨兵模式,redis集群模式
|
3月前
|
缓存 监控 NoSQL
Redis的哨兵模式是什么?它的作用是什么?
Redis的哨兵模式是什么?它的作用是什么?
167 0
|
3月前
|
NoSQL 算法 Redis
Redis哨兵模式原理
Redis哨兵模式原理
48 0
|
4月前
|
存储 运维 监控
百度搜索:蓝易云【【NOSQL】redis哨兵模式、集群搭建详解。】
总结来说,Redis哨兵模式和集群都是为了提高Redis的高可用性和可伸缩性。哨兵模式适用于少数几个Redis节点的环境,当主节点不可用时能够自动进行故障切换。而集群则适用于大规模数据存储和处理的场景,通过数据分片和故障检测实现分布式的高性能Redis环境。根据具体需求,选择适合的方案来搭建Redis环境。
37 0
|
4月前
|
监控 NoSQL 算法
Redis哨兵模式部署,哨兵模式原理分析以及图解
Redis哨兵模式部署,哨兵模式原理分析以及图解
132 0
|
4月前
|
存储 监控 NoSQL
REDIS哨兵模式
Redis哨兵模式是一种用于实现Redis高可用性的机制。在哨兵模式下,有一个或多个哨兵进程监控Redis主节点和从节点的状态,并在主节点出现故障时自动将一个从节点升级为新的主节点,以确保系统的持续可用性。
47 1
|
4月前
|
NoSQL Redis Docker
使用bitnamiredis-sentinel部署Redis 哨兵模式
使用bitnamiredis-sentinel部署Redis 哨兵模式
176 0

热门文章

最新文章