Redis三种模式——主从复制,哨兵模式,集群

目录

一、主从复制

 1.1主从复制的概念

  1.2Redis主从复制作用

 1.2.1数据冗余

 1.2.2故障恢复

  1.2.3负载均衡

 1.2.4高可用基石

 1.3Redis主从复制流程

   1.4部署Redis 主从复制

1.4.1.环境部署

 1.4.2.所有服务器都先关闭防火墙

 1.4.3.所有服务器都安装Redis

 1.4.4修改Master主节点Redis的配置文件

  1.6验证主从效果(192.168.40.17)

   1.6.1在Master节点上面验证从节点

二.Redis 哨兵模式 

 2.1哨兵模式的原理 

 2.2哨兵模式的作用

 2.3哨兵模式的结构

  2.4故障转移机制

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

  2.4.2当主节点出现故障

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

  2.5主节点的选举

  2.7环境准备

2.8修改Redis配置文件(所有节点操作)

 2.9启动哨兵模式​并查看信息

  2.10故障模拟

​编辑  三.Redis集群模式 

 3.1redis群集的概念

  3.2集群的作用

 3.2.1数据分区

 3.2.2高可用

  3.3集群模式的数据分片

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

 3.5Redis集群部署

 3.5.1环境准备

3.6准备操作

  3.7开启群集功能​

  3.8启动redis节点

 3.9启动集群

  3.10测试群集

  四.总结

一、主从复制

 1.1主从复制的概念

        主从复制,是指将一台 Redis 服务器的数据,复制到其他的 Redis 服务器。前者称为主节点(Master),后者称为从节点(Slave);数据的复制是单向的,只能由主节点到从节点

        默认情况下,每台Redis服务器都是主节点;且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点。

 

  1.2Redis主从复制作用

 1.2.1数据冗余

  • 主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。

 1.2.2故障恢复

  • 当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余。

  1.2.3负载均衡

  • 在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务 (即写 Redis 数据时应用连接主节点,读 Redis 数据时应用连接从节点),分担服务器负载;尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高Redis服务器的并发量。

 1.2.4高可用基石

  • 除了上述作用以外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是Redis高可用的基础。

 1.3Redis主从复制流程

  • 若启动一个Slave机器进程,则它会向Master机器发送一个“sync command”命令,请求同步连接。
  • 无论是第一次连接还是重新连接,Master机器都会启动一个后台进程,将数据快照保存到数据文件中(执行rdb操作) ,同时 Master 还会记录修改数据的所有命令并缓存在数据文件中。
  • 后台进程完成缓存操作之后,Master 机器就会向 Slave 机器发送数据文件,Slave 端机器将数据文件保存到硬盘上,然后将其加载到内存中,接着 Master 机器就会将修改数据的所有操作一并发送给 Slave 端机器。若 Slave 出现故障导致宕机,则恢复正常后会自动重新连接。
  • Master机器收到 Slave 端机器的连接后,将其完整的数据文件发送给 Slave 端机器,如果 Mater 同时收到多个 Slave 发来的同步请求,则 Master 会在后台启动一个进程以保存数据文件,然后将其发送给所有的 Slave 端机器,确保所有的 Slave 端机器都正常。

 

   1.4部署Redis 主从复制

1.4.1.环境部署

Master节点 192.168.40.172   redis-5.0.7.tar.gz
Slave1节点 192.168.40.170   redis-5.0.7.tar.gz
Slave2节点 192.168.40.17   redis-5.0.7.tar.gz

 1.4.2.所有服务器都先关闭防火墙

systemctl stop firewalld
setenforce 0
systemctl disable firewalld

 1.4.3.所有服务器都安装Redis

systemctl stop firewalld
setenforce 0
 
yum install -y gcc gcc-c++ make
 
tar zxvf redis-5.0.7.tar.gz -C /opt/
 
cd /opt/redis-5.0.7/
make
make PREFIX=/usr/local/redis install
 
cd /opt/redis-5.0.7/utils
./install_server.sh
 
回车四次,下一步需要手动输入
 
Please select the redis executable path [] /usr/local/redis/bin/redis-server    
 
ln -s /usr/local/redis/bin/* /usr/local/bin/

 1.4.4修改Master主节点Redis的配置文件

vim /etc/redis/6379.conf
#70行,修改bind 项,0.0.0.0监听所有网段
bind 0.0.0.0
#137行,开启守护进程
daemonize yes
#172行,指定日志文件目录
logfile /var/log/redis_6379.log
#264行,指定工作目录
dir /var/lib/redis/6379
#700行,开启AOF持久化功能
appendonly yes
 
/etc/init.d/redis_6379 restart
netstat -natp | grep redis

  1.6验证主从效果(192.168.40.17)

首先在Master上节点上查看日志
 
tail -f /var/log/redis_6379.log

   1.6.1在Master节点上面验证从节点

redis-cli info replication

 

 

二.Redis 哨兵模式 

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

 2.1哨兵模式的原理 

  • ​哨兵(sentinel):是一个分布式系统,用于对主从结构中的每台服务器进行监控,当出现故障时通过投票机制选择新的Master,并将所有Slave 连接到新的Master。所以整个运行哨兵的集群的数量不得少于3个节点。

 2.2哨兵模式的作用

  • 监控:哨兵会不断地检查主节点和从节点是否运作正常
  • 自动故障转移:当主节点不能正常工作时,哨兵会开始自动故障转移操作,它会将失效主节点的其中一个从节点升级为新的主节点,并让其他从节点改为复制新的主节点。​​
  • 通知(提醒):哨兵可以将故障转移的结果发送给客户端。

 2.3哨兵模式的结构

​​​哨兵结构由两部分组成,哨兵节点​和​数据节点:​​​

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

 哨兵的启动依赖于主从模式,所以须把主从模式安装好的情况下再去做哨兵模式,所有节点上都需要部署哨兵模式,哨兵模式会监控所有的Redis 工作节点是否正常,当Master 出现问题的时候,因为其他节点与主节点失去联系,因此会投票,投票过半就认为这个 Master 的确出现问题,然后会通知哨兵间,然后从Slaves中选取一个作为新的 Master。

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

  2.4故障转移机制

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

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

  2.4.2当主节点出现故障

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

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

  • 某一个从节点升级为新的主节点,让其它从节点指向新的主节点;
  • 若原主节点恢复也变成从节点,并指向新的主节点;
  • 通知客户端主节点己经更换。

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

  2.5主节点的选举

  • 过滤掉不健康的(已下线的),没有回复哨兵 ping 响应的从节点。
  • 选择配置文件中从节点优先级配置最高的。(replica-priority,默认值为100)
  • 选择复制偏移量最大,也就是复制最完整的从节点。

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

  2.7环境准备

​​​Master:192.168.40.17
​​Slave1:​192.168.40.170
​​Slave2:​192.168.40.172

2.8修改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.40.17 6379 2        #84行, 修改
指定该哨兵节点监控192.168.40.17:6379这个主节点,该主节点的名称是mymaster,最后的2的含义与主节点的故障判定有关:至少需要2个哨兵节点同意,才能判定主节点故障并进行故障转移
sentinel down-after-milliseconds mymaster 30000   #113行,判定服务器down掉的时间周期,默认30000毫秒(30秒)
sentinel failover-timeout mymaster 180000        #146行,故障节点的最大超时时间为180000 (180秒 )

 2.9启动哨兵模式​并查看信息

cd /opt/redis-5.0.7/
redis-sentinel sentinel.conf &
注意!先启动主服务器,再启动从服务器
redis-cli -p 26379 info Sentinel

  2.10故障模拟

#在Master 上查看redis-server进程号:
ps -elf | grep redis
 
#杀死 Master 节点上redis-server的进程号
kill -9  redis进程号     #Master节点上redis-server的进程号
 
#验证master是转换至从服务器
tail -f /var/log/sentinel.log
 
#在Slave上查看是否转换成功
redis-cli -p 26379 INFO Sentinel


  三.Redis集群模式 

 3.1redis群集的概念

  • 集群,即 Redis Cluster, 是Redis 3. 0开始引入的分布式存储方案。
  • 集群多个节点(Node) 组成,Redis 的数据分布在这些节点中。
  • 集群中的节点分为主节点和从节点;只有主节点负责读写请求和集群信息的维护;从节点只进行主节点数据和状态信息的复制。

  3.2集群的作用

 3.2.1数据分区

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

 3.2.2高可用

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

  3.3集群模式的数据分片

  • Redis集群引入了哈希槽的概念​​
  • Redis集群有​​​16384个哈希槽​​​(编号0-16383)
  • 集群的每个节点负责一部分哈希槽​​
  • 每个Key通过​​​CRC16​​​校验后对16384取余来决定放置哪个哈希槽,通过这个值,去找到对应的插槽所对应的节点,然后直接自动跳转到这个对应的节点上进行存取操作

 <- - -以3个节点组成的集群为例- - ->
节点A 包含0到5460号哈希槽
节点B 包含5461到10922号哈希槽
节点C 包含10923到16383号哈希槽

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

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

 3.5Redis集群部署

 3.5.1环境准备

  • redis的集群一般需要**6个节点,3主3从**。 方便起见, 这里所有节点在3台服务器上模拟,每台主机上设置一主一备,以IP地址和端口进行区分:
  • 三个主节点端口号:6001,6002,6003
  • 对应的的从节点端口号:7001,7002,7003
192.168.40.16 master
 
这里为了方便所有的节点都在同一台服务器上模拟

3.6准备操作

cd /etc/redis
mkdir -p redis-cluster/redis600{1..6}
 
for i in {1..6}
do
cp /opt/redis-5.0.7/redis.conf /etc/redis/redis-cluster/redis600$i
cp /opt/redis-5.0.7/src/redis-cli /opt/redis-5.0.7/src/redis-server /etc/redis/redis-cluster/redis600$i
done

  3.7开启群集功能​

  • ​​其他5个文件夹的配置文件以此类推修改,注意6个端口要不一样
cd /etc/redis/redis-cluster/redis6001
 
vim redis.conf
#bind 127.0.0.1                      #69行,注释掉bind项,默认监听所有网卡
protected-mode no                      #88行,修改,关闭保护模式
port 6001                              #92行,修改,redis监听端口,
daemonize yes                          #136行,开启守护进程,以独立进程启动
cluster-enabled yes                    #832行,取消注释,开启群集功能
cluster-config-file nodes-6001.conf    #840行,取消注释,群集名称文件设置
cluster-node-timeout 15000             #846行,取消注释群集超时时间设置
appendonly yes                         #700行,修改,开启AOF持久化

  3.8启动redis节点

分别进入那六个文件夹,执行命令: redis-server redis.conf ,来启动redis节点
cd /etc/redis/redis-cluster/redis6001
redis-server redis.conf
 
for i in {1..6}
do
cd /etc/redis/redis-cluster/redis600$i
redis-server redis.conf
done
 
ps -ef | grep redis

 3.9启动集群

redis-cli --cluster create 127.0.0.1:6001 127.0.0.1:6002 127.0.0.1:6003 127.0.0.1:6004 127.0.0.1:6005 127.0.0.1:6006 --cluster-replicas 1
 
yes

  3.10测试群集

redis-cli -p 6001 -c   #加-c参数,节点之间就可以互相跳转 
cluster slots     #查看节点的哈希槽编号范围
 
set test lisi
cluster keyslot test  #查看name键的槽编号

 

  四.总结

1.主从复制适用于数据的多机备份,以及对于读操作的负载均衡和简单的故障恢复。


2.哨兵模式基于主从复制,部署哨兵模式必须先部署主从复制,其在主从复制基础上提供了自动化的故障恢复。但是其写操作无法负载均衡,存储能力受到单机的限制。


3.Redis集群提供了分布式存储方案解决了写操作无法负载均衡,以及存储能力受到单机限制的问题,实现了较为完善的高可用方案,其集群最低需要6个节点,三主三从,实现Redis高可用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/48540.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【C#】微软的Roslyn 是个啥?

一、说明 Roslyn 是微软重写的C#编译器并开源。 Roslyn 是 C# 和 Visual Basic.NET 开源编译器的代号。以下是它如何在过去十年企业Microsoft的最黑暗中开始&#xff0c;并成为所有C#&#xff08;和VB&#xff09;的开源&#xff0c;跨平台&#xff0c;公共语言引擎&#xff0c…

el-upload上传图片和视频,支持预览和删除

话不多说&#xff0c; 直接上代码&#xff1a; 视图层&#xff1a; <div class"contentDetail"><div class"contentItem"><div style"margin-top:5px;" class"label csAttachment">客服上传图片:</div><el…

教育新花样?看智慧教育如何出“花样”

智慧教育是物联化、智能化、感知化、泛在化的新型教育形态和教育模式。数字孪生可视化作为智慧教育的应用之一&#xff0c;优化了教育发展形态。本文以智慧教育浙江大学项目为例&#xff0c;介绍智慧教育的具体应用场景。 一、项目背景 &#xff08;一&#xff09;政策背景 …

springboot自动装配

SPI spi &#xff1a; service provider interface &#xff1a; 是java的一种服务提供机制&#xff0c;spi 允许开发者在不修改代码的情况下&#xff0c;为某个接口提供实现类&#xff0c;来扩展应用程序 将实现类独立到配置文件中&#xff0c;通过配置文件控制导入&#xff…

基于Ko-time的Springboot单体化调用链追踪实践

目录 前言 一、关于Ko-Time 1、是什么&#xff1f; 2、ko-time更新时间线 二、Ko-time怎么用&#xff1f; 1、依赖引入 2、配置集成 3、权限放行 三、链路追踪 1、系统运行 2、链路追踪 3、长时间调用模拟 总结 前言 熟悉微服务的老司机一定了解&#xff0c;在微服务模…

【C++】特殊类的设计 | 类型转换

文章目录 1. 特殊类的设计单例模式饿汉模式具体代码 懒汉模式具体代码 懒汉模式和饿汉模式的优缺点 2. C的类型转换C语言的类型转换C的类型转换static_castreinterpret_castconst_castdynamic_cast 1. 特殊类的设计 单例模式 设计模式是 被反复使用 多数人知晓 经过分类的、代…

React之生命周期

React之生命周期 旧版本&#xff0c;函数组件是没有生命周期的。新版本中通过useEffect触发函数的生命周期 一、基于类组件的生命周期 React的组件生命周期分为挂载阶段、更新阶段和销毁阶段。因为React的state不具有Vue的响应式&#xff0c;所以并没有create阶段 1、挂载阶段&…

第八章:list类

系列文章目录 文章目录 系列文章目录前言list的介绍及使用list的介绍list的使用list的构造函数list的迭代器list的容量list的成员访问list的增删改查 list与vector的对比总结 前言 list是STL的一种链表类&#xff0c;可以在常数范围内在任意位置进行插入和删除的序列式容器。 …

专访伊士曼中国区高管赵志伟:以创新应对新能源汽车后市场变化

受访人&#xff1a;伊士曼高性能膜事业部中国区商务总监赵志伟 新能源汽车发展至规模化阶段&#xff0c;以贴膜、保养维修为主的后市场产业迎来快速崛起&#xff0c;新能源消费者在汽车贴膜、改装和养护领域也表现出比燃油车更高频的需求度。 作为一家全球特种材料公司&#x…

MySQL~DQL查询语句

一、DQL:查询语句 1、排序查询 语法&#xff1a; order by 子句 ​ order by 排序字段1 排序方式1 &#xff0c;排序字段2 排序方2... 排序方式&#xff1a; ASC&#xff1a;升序[默认] DESC&#xff1a;降序 在SQL语句中永远排序最后 注&#xff1a; 如果有多个排序条…

立创EDA学习

学习树莓派3B的板子发现有个扩展板比较好&#xff0c;自己最好画一个&#xff0c;反正免费。 学习视频&#xff1a;立创EDA&#xff08;专业版&#xff09;电路设计与制作快速入门。 下载专业版&#xff0c;并激活。【分专业版和标准版&#xff0c;专业版也是免费的】 手机…

学习自动化测试该怎么学?6个步骤轻松拿捏

自动化测试作为脱离手工测试的基本核心内容&#xff0c;其重要性不言而喻了&#xff0c;而且我们来看近期大厂的一些招聘信息显示&#xff0c;基本上自动化测试是必备前提&#xff0c;没有这个基本就不用谈后面的问题了&#xff0c;下面我们通过联想集团的一个软件测试工程师的…

购物车功能实现(小兔鲜儿)【Vue3】

购物车 流程梳理和本地加入购物车实现 购物车业务逻辑梳理拆解 整个购物车的实现分为两个大分支, 本地购物车操作和接口购物车操作由于购物车数据的特殊性,采取Pinia管理购物车列表数据并添加持久化缓存 本地购物车 - 加入购物车实现 添加购物车 基础思想&#xff1a;如果…

Ceph社区上游正式合入openEuler原生支持,并通过CI持续验证

作为覆盖全场景应用、支持多样性算力的面向数字基础设施的开源操作系统&#xff0c;openEuler始终遵循“上游优先”的策略&#xff0c;帮助上游开源软件原生支持openEuler&#xff0c;让openEuler系操作系统的用户可以在开发、集成、使用这些开源软件或基于这些开源软件的产品和…

市面上的ipad国产触控笔怎么样?精选的性价比电容笔

要知道&#xff0c;真正的苹果品牌的那款原装电容笔&#xff0c;光是一支电容笔就价格近千元。实际上&#xff0c;平替电容笔对没有太多预算的用户是个不错的选择。一支苹果品牌的电容笔&#xff0c;价格是平替品牌的四倍&#xff0c;但电容笔的书写效果&#xff0c;却丝毫不逊…

idea如何解决导入的项目不是Maven工程(文件下面没有蓝色的方格)二

简介&#xff1a; Maven项目导入&#xff0c;idea不识别项目 解决方法&#xff1a; 选中pom.xml -- 右键 -- Add as Maven Project

技术实力加速企业上云,联想混合云获评专有云优秀案例入选混合云全景图四大方向

7月25-26日&#xff0c;由中国信息通信研究院、中国通信标准化协会联合主办的第十届可信云大会在京顺利召开。大会重磅发布了云计算白皮书&#xff08;2023年&#xff09;、《混合云产业全景图&#xff08;2023&#xff09;》、中国算力服务研究报告、中国云计算发展指数报告等…

Golang速成

目录 Golang 语言特性Golang的优势Golang 的应用场景Golang 的不足 基础语法变量的声明常量与 iotastring字符串遍历strings 包bytes 包strconv 包unicode 包 循环语句range 函数多返回值init 函数闭包import 导包匿名函数 指针defer切片 slice数组sliceslice 操作… mapmap 的…

MySQL InnoDB死锁原因及改善建议(InnoDB Deadlocks)

死锁是事务型数据库中一种现象&#xff0c;为了在高并发环境下不出错&#xff0c;数据库引入了"锁"这一数据结构来控制资源的并发访问&#xff0c;但也会导致死锁。 目录 一、死锁概念 1.1 死锁的原因 1.2 死锁监测 二、死锁演示 2.1 死锁生成过程 2.2 死锁信息查看 …

EtherNet/IP转Modbus网关以连接AB PLC

本案例为西门子S7-1200 PLC通过捷米特Modbus转EtherNet/IP网关捷米特JM-EIP-RTU连接AB PLC的配置案例。 网关分别从ETHERNET/IP一侧和MODBUS一侧读写数据&#xff0c;存入各自的缓冲区&#xff0c;网关内部将缓冲区的数据进行交换&#xff0c;从而实现两边数据的传输。 网关做为…