Redis高可用之主从复制、哨兵、cluster集群(中)

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: 一、Redis 高可用1.1 什么是高可用在web服务器中,高可用是指服务器可以正常访问的时间,衡量的标准是在多长时间内可以提供正常服务(99.9%、99.99%、99.999%等等)。


五、搭建Redis哨兵模式


实验环境:

节点 虚机 IP地址
master centos7-1 192.168.121.10
slave1 centos7-2 192.168.121.20
slave2 centos7-3 192.168.121.30
Sentinel-1 centos7-4 192.168.121.40
Sentinel-2 centos7-5 192.168.121.50
Sentinel-3 centos7-6 192.168.121.60


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


实验步骤:

5.1 所有节点安装Redis

参考上文第三节

5.2 master和slave部署Redis主从复制

参考上文第三节

5.3 修改哨兵节点的配置文件sentinel.conf(所有哨兵节点操作)

修改Sentinel-1的配置文件,之后scp传给另外2个哨兵节点。

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.121.10 6379 2  #84行,修改
#指定该哨兵节点监控192.168.121.10: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个哨兵节点
scp /opt/redis-5.0.7/sentinel.conf  192.168.121.50:/opt/redis-5.0.7/
scp /opt/redis-5.0.7/sentinel.conf  192.168.121.60:/opt/redis-5.0.7/
复制代码


修改哨兵的配置文件,vim /opt/redis-5.0.7/sentinel.conf

网络异常,图片无法展示
|


网络异常,图片无法展示
|


网络异常,图片无法展示
|


网络异常,图片无法展示
|


网络异常,图片无法展示
|


网络异常,图片无法展示
|


5.4 启动哨兵模式(所有哨兵节点操作)

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


网络异常,图片无法展示
|


网络异常,图片无法展示
|


网络异常,图片无法展示
|


5.5 查看哨兵信息

#在哨兵节点查看
[root@localhost ~]# 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.121.10:6379,slaves=2,sentinels=3
#可以看到主节点地址,2台从节点,3台哨兵
复制代码


网络异常,图片无法展示
|


5.6 模拟故障

#在Master 上查看redis-server进程号:
[root@localhost ~]# ps -ef | grep redis
root      71245      1  0 6月19 ?       00:00:05 /usr/local/redis/bin/redis-server 0.0.0.0:6379
root      71983  66681  0 00:59 pts/1    00:00:00 grep --color=auto redis
#杀死 Master 节点上redis-server的进程号
[root@localhost ~]# kill -9 71245        #Master节点上redis-server的进程号
[root@localhost ~]# netstat -natp | grep redis
#在哨兵上查看日志,验证master是否切换至从服务器
[root@localhost redis-5.0.7]# tail -f /var/log/sentinel.log
7084:X 20 Jun 2022 00:46:58.869 * +sentinel sentinel ce975c271f86d8f6e0b80162529752b754ecfc69 192.168.121.50 26379 @ mymaster 192.168.121.10 6379
7084:X 20 Jun 2022 00:47:56.595 * +sentinel sentinel d59ba9daf957b704715feeee3c53bd1bf8b3a5d8 192.168.121.60 26379 @ mymaster 192.168.121.10 6379
7084:X 20 Jun 2022 01:01:33.484 # +sdown master mymaster 192.168.121.10 6379
7084:X 20 Jun 2022 01:01:33.561 # +new-epoch 1
7084:X 20 Jun 2022 01:01:33.561 # +vote-for-leader ce975c271f86d8f6e0b80162529752b754ecfc69 1
7084:X 20 Jun 2022 01:01:34.476 # +config-update-from sentinel ce975c271f86d8f6e0b80162529752b754ecfc69 192.168.121.50 26379 @ mymaster 192.168.121.10 6379
7084:X 20 Jun 2022 01:01:34.476 # +switch-master mymaster 192.168.121.10 6379 192.168.121.30 6379
7084:X 20 Jun 2022 01:01:34.477 * +slave slave 192.168.121.20:6379 192.168.121.20 6379 @ mymaster 192.168.121.30 6379
7084:X 20 Jun 2022 01:01:34.477 * +slave slave 192.168.121.10:6379 192.168.121.10 6379 @ mymaster 192.168.121.30 6379
7084:X 20 Jun 2022 01:02:04.493 # +sdown slave 192.168.121.10:6379 192.168.121.10 6379 @ mymaster 192.168.121.30 6379
#在哨兵上查看主节点是否切换成功
[root@localhost ~]# 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.121.30:6379,slaves=2,sentinels=3
复制代码


杀死 Master 节点上redis-server的进程号:

网络异常,图片无法展示
|


在哨兵上查看主节点是否切换成功:

网络异常,图片无法展示
|


网络异常,图片无法展示
|


六、Redis 集群模式


集群,即Redis Cluster,是Redis3.0开始引入的分布式存储方案。

集群由多个节点(Node)组成,Redis的数据分布在这些节点中。集群中的节点分为主节点和从节点:只有主节点负责读写请求和集群信息的维护;从节点只进行主节点数据和状态信息的复制。

6.1 集群的作用

(1)数据分区: 数据分区(或称数据分片)是集群最核心的功能。

  • 集群将数据分散到多个节点,一方面突破了Redis单机内存大小的限制,存储容量大大增加;另一方面每个主节点都可以对外提供读服务和写服务,大大提高了集群的响应能力。
  • Redis单机内存大小受限问题,在介绍持久化和主从复制时都有提及;例如,如果单机内存太大,bgsave和bgrewriteaof的fork操作可能导致主进程阻塞,主从环境下主机切换时可能导致从节点长时间无法提供服务,全量复制阶段主节点的复制缓冲区可能溢出。

(2)高可用: 集群支持主从复制和主节点的自动故障转移(与哨兵类似);当任一节点发生故障时,集群仍然可以对外提供服务。

通过集群,Redis解决了写操作无法负载均衡,以及存储能力受到单机限制的问题,实现了较为完善的高可用方案。

6.2 Redis集群的数据分片

Redis集群引入了哈希槽的概念。

Redis集群有16384个哈希槽(编号0-16383)。

集群的每个节点负责一部分哈希槽。

每个Key通过CRC16校验后对16384取余来决定放置哪个哈希槽,通过这个值,去找到对应的插槽所对应的节点,然后直接自动跳转到这个对应的节点上进行存取操作。

以3个节点组成的集群为例:

  • 节点A包含0到5460号哈希槽
  • 节点B包含5461到10922号哈希槽
  • 节点c包含10923到16383号哈希槽

网络异常,图片无法展示
|


6.3 集群模式的主从复制模型

  • 集群中具有A、B、C三个节点,如果节点B失败了,整个集群就会因缺少5461-10922这个范围的槽而不可以用。
  • 为每个节点添加一个从节点A1、B1、C1整个集群便有三个Master节点和三个slave节点组成,在节点B失败后,集群选举B1位为主节点继续服务。当B和B1都失败后,集群将不可用。

七、搭建 Redis 集群


实验环境:

6台服务器,3主3从。

节点 IP 安装redis
master1 192.168.121.10 redis-5.0.7.tar.gz
slave1 192.168.121.50 redis-5.0.7.tar.gz
master2 192.168.121.20 redis-5.0.7.tar.gz
slave2 192.168.121.60 redis-5.0.7.tar.gz
master3 192.168.121.30 redis-5.0.7.tar.gz
slave3 192.168.121.40 redis-5.0.7.tar.gz
相关实践学习
基于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的高可用性。
78 4
【怒怼大厂面试官】听说你精通Redis?说说Redis哨兵
|
1天前
|
存储 缓存 运维
软件体系结构 - 缓存技术(5)Redis Cluster
【4月更文挑战第20天】软件体系结构 - 缓存技术(5)Redis Cluster
58 10
|
13天前
|
运维 NoSQL 算法
Java开发-深入理解Redis Cluster的工作原理
综上所述,Redis Cluster通过数据分片、节点发现、主从复制、数据迁移、故障检测和客户端路由等机制,实现了一个分布式的、高可用的Redis解决方案。它允许数据分布在多个节点上,提供了自动故障转移和读写分离的功能,适用于需要大规模、高性能、高可用性的应用场景。
16 0
|
16天前
|
监控 NoSQL Redis
redis主从复制
redis主从复制
|
1月前
|
存储 监控 NoSQL
Redis 架构深入:主从复制、哨兵到集群
大家好,我是小康,今天我们来聊下 Redis 的几种架构模式,包括主从复制、哨兵和集群模式。
Redis 架构深入:主从复制、哨兵到集群
|
1月前
|
负载均衡 NoSQL 容灾
|
2月前
|
存储 NoSQL Java
面试官:Redis如何保证高可用?
面试官:Redis如何保证高可用?
76 2
面试官:Redis如何保证高可用?
|
2月前
|
NoSQL Redis Docker
关于redis的一主三从三哨兵的实现
关于redis的一主三从三哨兵的实现
27 0
|
3月前
|
机器学习/深度学习 NoSQL Redis
Redis高可用之集群架构(第三部分)
Redis高可用之集群架构(第三部分)
|
6月前
|
Kubernetes NoSQL Redis
教你在 Kubernetes 上部署 Redis 高可用集群?
教你在 Kubernetes 上部署 Redis 高可用集群?
98 0