Redis主从复制、哨兵、cluster集群原理+实验(好好等,会晚些,但会更好)(二)

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: Redis主从复制、哨兵、cluster集群原理+实验(好好等,会晚些,但会更好)(二)

二、Redis哨兵模式


主从切换技术的方法是:当服务器宕机后,需要手动一台从机切换为主机,这需要人工干预,不仅费时费力而且还会造成一段时间内服务不可用。为了解决主从复制的缺点,就有了哨兵机制。


哨兵的核心功能:在主从复制的基础上,哨兵引入了主节点的自动故障转移。


2.1 哨兵模式的作用

监控:哨兵会不断地检查主节点和从节点是否运作正常。

自动故障转移:当主节点不能正常工作时,哨兵会开始自动故障转移操,它会将失效主节点的其中一个从节点升级为新的主节点,并让其它从节点改为复制新的主节点。

通知(提醒):哨兵可以将故障转移的结果发送给客户端。

2.2 哨兵结构

哨兵节点:哨兵系统由一个或多个哨兵节点组成,哨兵节点是特殊的redis节点,不存储数据。

数据节点:主节点和从节点都是数据节点。

2.3 故障转移机制

1.由哨兵节点定期监控发现主节点是否出现了故障


每个哨兵节点每隔1秒会问主节点、从节点及其它哨兵节点发送一次ping命令做一次心检测。如果主节点在一定时间范围内不回复或者是回复一个错误消息,那么这个哨兵就会认为这个主节点主观下线了(单方面的)。当超过半数哨兵节点认为该主节点主观下线了,这样就客观下线了。


2.当主节点出现故障,此时哨兵节点会通过Raft算法(选举算法)实现选举机制共同选举出一个哨兵节点为leader,来负责处理主节点的故障转移和通知。所以整个运行哨兵的集群的数量不得少于3个节点。


3.由leader哨兵节点执行故障转移,过程如下:


将某一个从节点升级为新的主节点,让其它从节点指向新的主节点;

若原主节点恢复也变成从节点,并指向新的主节点;

通知客户端主节点已经更换。

需要特别注意的是,客观下线是主节点才有的概念;如果从节点和哨兵节点发生故障,被哨兵主观下线后,不会再有后续的客观下线和故障转移操作


2.4 主节点的选举

1.过滤掉不健康的(己下线的),没有回复哨兵ping响应的从节点。


2.选择配置文件中从节点优先级配置最高的。(replica-priority,默认值为100)


3.选择复制偏移量最大,也就是复制最完整的从节点。


哨兵的启动依赖于主从模式,所以须把主从模式安装好的情况下再去做哨兵模式


2.5 搭建Redis哨兵模式


2.5.1 实验环境

主/从/哨兵 虚机 IP地址
master centos7-1 192.168.109.131
slave1 centos7-2 192.168.109.132
slave2 centos7-3 192.168.109.133
Sentinel-1 centos7-4 192.168.109.134
Sentinel-2 centos7-5 192.168.109.135
Sentinel-3 centos7-7 192.168.109.137

生产环境中哨兵节点再使用对应数量节点的服务器作为哨兵节点,实验环境中如果电脑性能不够可以把哨兵搭建在原虚机上


2.5.2 部署主从复制

参照1.3节部署


2.5.3 修改Redis哨兵模式的配置文件(所有哨兵节点操作)

vim /opt/redis-5.0.7/sentinel.conf
......
protected-mode no                #17行,关闭保护模式
port 26379                       #21行,Redis哨兵默认的监听端口
daemonize yes                    #26行,指定sentinel为后台启动
logfile "/var/log/sentinel.log"  #36行,指定日志存放路径
dir "/var/lib/redis/6379"        #65行,指定数据库存放路径
sentinel monitor mymaster 192.168.109.131 6379 2  #84行,修改
#指定该哨兵节点监控192.168.109.131:6379这个主节点,该主节点的名称是mymaster,最后的2的含义与主节点的故障判定有关:至少需要2个哨兵节点同意,才能判定主节点故障并进行故障转移
sentinel down-after-milliseconds mymaster 3000  #113行,判定服务器down掉的时间周期,默认30000毫秒(30秒)
sentinel failover-timeout mymaster 180000  #146行,同一个sentinel对同一个master两次failover之间的间隔时间(180秒)






2.5.3 启动哨兵模式

#启动三台哨兵
cd /opt/redis-5.0.7/
redis-sentinel sentinel.conf &



2.5.4 查看哨兵信息

redis-cli -p 26379 info Sentinel
#在哨兵节点查看
[root@localhost redis-5.0.7]# redis-cli -p 26379 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=192.168.109.131:6379,slaves=2,sentinels=3
[1]+  完成                  redis-sentinel sentinel.conf


2.5.5 模拟故障

#在Master 上查看redis-server进程号:
[root@localhost ~]# ps -ef | grep redis
root      56591      1  0 09:19 ?        00:00:29 /usr/local/redis/bin/redis-server 0.0.0.0:6379
root      60440  13098  0 16:11 pts/1    00:00:00 grep --color=auto redis
#杀死 Master 节点上redis-server的进程号
[root@localhost ~]# kill -9 56591   #Master节点上redis-server的进程号
[root@localhost ~]# netstat -natp | grep redis
#在哨兵上验证master是转换至从服务器
tail -f /var/log/sentinel.log
[root@localhost redis-5.0.7]# tail -f /var/log/sentinel.log
20000:X 10 Jun 2022 16:12:49.635 # +failover-state-reconf-slaves master mymaster 192.168.109.131 6379
20000:X 10 Jun 2022 16:12:49.709 * +slave-reconf-sent slave 192.168.109.133:6379 192.168.109.133 6379 @ mymaster 192.168.109.131 6379
20000:X 10 Jun 2022 16:12:50.193 # -odown master mymaster 192.168.109.131 6379
20000:X 10 Jun 2022 16:12:50.665 * +slave-reconf-inprog slave 192.168.109.133:6379 192.168.109.133 6379 @ mymaster 192.168.109.131 6379
20000:X 10 Jun 2022 16:12:50.665 * +slave-reconf-done slave 192.168.109.133:6379 192.168.109.133 6379 @ mymaster 192.168.109.131 6379
20000:X 10 Jun 2022 16:12:50.741 # +failover-end master mymaster 192.168.109.131 6379
20000:X 10 Jun 2022 16:12:50.741 # +switch-master mymaster 192.168.109.131 6379 192.168.109.132 6379
20000:X 10 Jun 2022 16:12:50.742 * +slave slave 192.168.109.133:6379 192.168.109.133 6379 @ mymaster 192.168.109.132 6379
20000:X 10 Jun 2022 16:12:50.742 * +slave slave 192.168.109.131:6379 192.168.109.131 6379 @ mymaster 192.168.109.132 6379
20000:X 10 Jun 2022 16:13:20.781 # +sdown slave 192.168.109.131:6379 192.168.109.131 6379 @ mymaster 192.168.109.132 6379
#在哨兵上查看是否转换成功
[root@localhost redis-5.0.7]# redis-cli -p 26379 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=192.168.109.132:6379,slaves=2,sentinels=3



相关实践学习
基于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
目录
相关文章
|
1月前
|
NoSQL Redis Sentinel
【怒怼大厂面试官】听说你精通Redis?说说Redis哨兵
面试官:Redis哨兵知道吧?知道的,Sentinel哨兵本质是一个运行在特殊模式下的Redis服务器。面试官:嗯然后呢?它的主要作用是通过检测Redis主从服务器的下线状态,选举出新Redis主服务器,也就是故障转移,来保证Redis的高可用性。
77 4
【怒怼大厂面试官】听说你精通Redis?说说Redis哨兵
|
1月前
|
存储 缓存 Java
【Spring原理高级进阶】有Redis为啥不用?深入剖析 Spring Cache:缓存的工作原理、缓存注解的使用方法与最佳实践
【Spring原理高级进阶】有Redis为啥不用?深入剖析 Spring Cache:缓存的工作原理、缓存注解的使用方法与最佳实践
|
12天前
|
运维 NoSQL 算法
Java开发-深入理解Redis Cluster的工作原理
综上所述,Redis Cluster通过数据分片、节点发现、主从复制、数据迁移、故障检测和客户端路由等机制,实现了一个分布式的、高可用的Redis解决方案。它允许数据分布在多个节点上,提供了自动故障转移和读写分离的功能,适用于需要大规模、高性能、高可用性的应用场景。
16 0
|
24天前
|
存储 NoSQL Redis
作者推荐 |【Redis技术进阶之路】「原理系列开篇」揭秘高效存储模型与数据结构底层实现(SDS)(三)
作者推荐 |【Redis技术进阶之路】「原理系列开篇」揭秘高效存储模型与数据结构底层实现(SDS)
21 0
|
27天前
|
NoSQL 关系型数据库 MySQL
LAMP+Redis详解(一)——基本原理
LAMP+Redis详解(一)——基本原理
13 1
|
1月前
|
NoSQL Redis
[Redis]——主从同步原理(全量同步、增量同步)
[Redis]——主从同步原理(全量同步、增量同步)
|
1月前
|
存储 监控 NoSQL
Redis 架构深入:主从复制、哨兵到集群
大家好,我是小康,今天我们来聊下 Redis 的几种架构模式,包括主从复制、哨兵和集群模式。
Redis 架构深入:主从复制、哨兵到集群
|
1月前
|
消息中间件 存储 缓存
【Redis实战】有MQ为啥不用?用Redis作消息队列!?Redis作消息队列使用方法及底层原理高级进阶
【Redis实战】有MQ为啥不用?用Redis作消息队列!?Redis作消息队列使用方法及底层原理高级进阶
|
1月前
|
负载均衡 NoSQL 容灾
|
3月前
|
机器学习/深度学习 NoSQL Redis
Redis高可用之集群架构(第三部分)
Redis高可用之集群架构(第三部分)

热门文章

最新文章