Redis哨兵 - 实战搭建

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: Redis 主从复制有一个缺点,当主机 Master 宕机以后,我们需要人工解决切换,如使用 slaveof no one 。实际上主从复制 并没有实现高可用。高可用侧重备份机器, 利用集群中系统的冗余,当系统中某台机器发生损坏的时候,其他后备的机器可以迅速的接替它来启动服务

相关链接

redis-GitHub-配置文件下载:https://github.com/redis/redis

redis 官网配置文件:https://redis.io/topics/config

作者搭建记录:https://github.com/mailjobblog/dev_redis/tree/master/sentinel

redis哨兵原理 - 思维导图:https://kdocs.cn/l/spXDj5U6vDKF

实战演示的服务节点分布图 :https://kdocs.cn/l/sk1lDLmDbLqY

redis哨兵原理:https://blog.mailjob.net/posts/2778025183.html

redis 主从复制搭建:https://blog.mailjob.net/posts/1586519326.html

redis广播:https://blog.mailjob.net/posts/2416487960.html

搭建方法

实战演练

1、下载redis和哨兵的配置文件

我是用 docker 搭建的 redis 节点,没有 .conf 文件,所以我需要下载 redis.confsentinel.conf

redis版本:6.0。下载地址:https://github.com/redis/redis

注释:下载配置文件的时候,请先查看自己的redis版本,然后下载匹配的redis配置文件,否则redis启动报错

2、首先建立redis主从复制

请参照上文中,相关链接中,redis 主从复制搭建 进行搭建

通过以上方法,搭建了3个redis节点

------------------------------------------------
名字--------IP--------------端口映射-------角色
redis1------172.30.0.10-----6000->6379-----mater
redis2------172.30.0.11-----6001->6379-----slave
redis3------172.30.0.12-----6002->6379-----slave
------------------------------------------------
3、开始建立3个哨兵节点
# 在 /data/redis_group/ 目录,创建 data4~data6 三个文件夹做数据卷

# 创建redis哨兵节点
docker run -itd -p 26000:26379 --network netredis --ip 172.30.0.20 -v /data/redis_group/data4:/data -v /data/redis_group/sentinel/sentinel-s1.conf:/etc/sentinel.conf --name redis-s1 [container id]
docker run -itd -p 26001:26379 --network netredis --ip 172.30.0.21 -v /data/redis_group/data5:/data -v /data/redis_group/sentinel/sentinel-s2.conf:/etc/sentinel.conf --name redis-s2 [container id]
docker run -itd -p 26002:26379 --network netredis --ip 172.30.0.22 -v /data/redis_group/data6:/data -v /data/redis_group/sentinel/sentinel-s3.conf:/etc/sentinel.conf --name redis-s3 [container id]

# 哨兵节点如下
------------------------------------------
名字----------IP--------------端口映射----
redis-s1------172.30.0.20-----26000->26379
redis-s2------172.30.0.21-----26001->26379
redis-s3------172.30.0.22-----26002->26379
------------------------------------------
4、修改哨兵的配置文件

哨兵 redis-s1 配置
vim /data/redis_group/sentinel/sentinel-s1.conf

daemonize yes
logfile "/data/log-sentinel.log"
sentinel monitor mymaster 172.30.0.10 6379 2

改好一份后,我复制了两份出来,sentinel-s2.conf、sentinel-s3.conf
这样,三个节点都有了配置文件

mymaster -是节点的起的别名,如果是多个集群,可以用集群的名字
6379 -是redis的端口
2 -至少需要2个哨兵节点同意,才能判定主节点故障并进行故障转移
5、启动哨兵节点
# 进入哨兵容器
docker exec -it [container id] bash

# 启动哨兵
redis-sentinel sentinel.conf
redis-server sentinel.conf --sentinel

(二者作用是完全相同的)
6、查看是否配置成功
用 redis-cli 客户端操作哨兵 (26379是哨兵的默认端口)
>> redis-cli -p 26379

查看配置信息
127.0.0.1:26379> info sentinel
(或者使用命令也可以查看:sentinel master mymaster 【mymaster是配置哨兵的别名,自定义的名字】)

# 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=172.30.0.12:6379,slaves=2,sentinels=3

这里可以看到主节点的redis信息,从节点的个数,哨兵个数
7、模拟宕机测试
# 我把 (master)172.30.0.10 这个容器进行stop宕机

# 30s 后去查看了 172.30.0.10 的日志如下

# 发现主(msater)节点 172.30.0.10 转移到了 172.30.0.12
25:X 05 Feb 2021 14:49:50.331 # +sdown slave 172.30.0.10:6379 172.30.0.10 6379 @ mymaster 172.30.0.12 6379

# 去 172.30.0.11 查看了一下,12 变成了主节点
127.0.0.1:6379> info replication
# Replication
role:slave
master_host:172.30.0.12

# 再次启动 172.30.0.10 ,发现它已经变成了从节点
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=172.30.0.11,port=6379,state=online,offset=547584,lag=0
slave1:ip=172.30.0.10,port=6379,state=online,offset=547584,lag=1

搭建报错问题

哨兵启动报错
root@85cbceb66bad:/data# redis-server /etc/sentinel.conf --sentinel
*** FATAL CONFIG FILE ERROR (Redis 6.0.10) ***
Reading the configuration file, at line 336
>>> 'SENTINEL resolve-hostnames no'
Unrecognized sentinel configuration statement.

这个是由于 docker 按照的 redis 版本和 引入数据卷使用的哨兵配置文件,版本不一致导致的

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
29天前
|
NoSQL 安全 测试技术
Redis游戏积分排行榜项目中通义灵码的应用实战
Redis游戏积分排行榜项目中通义灵码的应用实战
52 4
|
2月前
|
NoSQL 关系型数据库 MySQL
MySQL与Redis协同作战:优化百万数据查询的实战经验
【10月更文挑战第13天】 在处理大规模数据集时,传统的关系型数据库如MySQL可能会遇到性能瓶颈。为了提升数据处理的效率,我们可以结合使用MySQL和Redis,利用两者的优势来优化数据查询。本文将分享一次实战经验,探讨如何通过MySQL与Redis的协同工作来优化百万级数据统计。
89 5
|
2月前
|
缓存 NoSQL Java
Spring Boot与Redis:整合与实战
【10月更文挑战第15天】本文介绍了如何在Spring Boot项目中整合Redis,通过一个电商商品推荐系统的案例,详细展示了从添加依赖、配置连接信息到创建配置类的具体步骤。实战部分演示了如何利用Redis缓存提高系统响应速度,减少数据库访问压力,从而提升用户体验。
126 2
|
2月前
|
监控 NoSQL 算法
Redis Sentinel(哨兵)详解
Redis Sentinel(哨兵)详解
142 4
|
3月前
|
存储 NoSQL Redis
SpringCloud基础7——Redis分布式缓存,RDB,AOF持久化+主从+哨兵+分片集群
Redis持久化、RDB和AOF方案、Redis主从集群、哨兵、分片集群、散列插槽、自动手动故障转移
SpringCloud基础7——Redis分布式缓存,RDB,AOF持久化+主从+哨兵+分片集群
|
3月前
|
缓存 NoSQL 应用服务中间件
Redis实战篇
Redis实战篇
|
4月前
|
NoSQL 安全 Java
Redis6入门到实战------ 三、常用五大数据类型(字符串 String)
这篇文章深入探讨了Redis中的String数据类型,包括键操作的命令、String类型的命令使用,以及String在Redis中的内部数据结构实现。
Redis6入门到实战------ 三、常用五大数据类型(字符串 String)
|
4月前
|
NoSQL 关系型数据库 Redis
Redis6入门到实战------ 九、10. Redis_事务_锁机制_秒杀
这篇文章深入探讨了Redis事务的概念、命令使用、错误处理机制以及乐观锁和悲观锁的应用,并通过WATCH/UNWATCH命令展示了事务中的锁机制。
Redis6入门到实战------ 九、10. Redis_事务_锁机制_秒杀
|
4月前
|
运维 监控 NoSQL
【Redis】哨兵(Sentinel)原理与实战全解~炒鸡简单啊
Redis 的哨兵模式(Sentinel)是一种用于实现高可用性的机制。它通过监控主节点和从节点,并在主节点故障时自动进行切换,确保集群持续提供服务。哨兵模式包括主节点、从节点和哨兵实例,具备监控、通知、自动故障转移等功能,能显著提高系统的稳定性和可靠性。本文详细介绍了哨兵模式的组成、功能、工作机制以及其优势和局限性,并提供了单实例的安装和配置步骤,包括系统优化、安装、配置、启停管理和性能监控等。此外,还介绍了如何配置主从复制和哨兵,确保在故障时能够自动切换并恢复服务。
|
4月前
|
消息中间件 存储 NoSQL
redis实战——go-redis的使用与redis基础数据类型的使用场景(一)
本文档介绍了如何使用 Go 语言中的 `go-redis` 库操作 Redis 数据库
233 0
redis实战——go-redis的使用与redis基础数据类型的使用场景(一)
下一篇
DataWorks