高并发核心技术Redis系列(六)--------主从复制、集群(上)

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

一、Redis主从复制

1 Redis主从复制简介

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

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

Master以写为主,Slave以读为主。

2345_image_file_copy_177.jpg

主从复制的作用:

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

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

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

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

Redis高可用的基础。

一般来说,要将Redis运用于工程项目中,只是用一台Redis是万万不能的,原因如下:

1. 从结构上,单个redis服务器会发生单点故障,并且一台服务器需要处理所有的请求负载,压力较大;

2. 从容量上,单个redis服务器内存容量有限,就算一台Redis服务器内容容量为256G,也不能将所有内存用做Redis存储内存,一般来说,单台Redis最大使用内存不应该超过20G。

2 Redis主从复制-一主多从

搭建一主二从的Redis服务器

环境搭建

1. 在同一台虚拟机上配置一主二从Redis服务器,由于单台机器,同一个端口只允许一个进程占用,所以需要修改其他两台Redis的端口。

2. 在/usr/local/myredis文件夹下,新创建三个redis的配置文件,分别为redis6379.conf、

redis6380.conf、redis6381.conf,由文件名可知,redis的端口号分别为6379、6380、6381。

2345_image_file_copy_179.jpg

创建出3个空文件,redis.conf是原有的配置文件。

3. 在三个配置文件写入内容

   可以通过include /usr/local/myredis/redis.conf将公共基础配置直接引入文件。

    将include /usr/local/myredis/redis.conf统一添加到这三个文件中

    在各个文件中,添加对应的pidfile、port、dbfilename

如:

redis6379.conf中添加
pidfile /var/run/redis_6379.pid
port 6379
dbfilename dump6379.rdb

2345_image_file_copy_180.jpg

 redis6380.conf中添加
pidfile /var/run/redis_6380.pid
port 6380
dbfilename dump6380.rdb

2345_image_file_copy_181.jpg

 redis6381.conf中添加
pidfile /var/run/redis_6381.pid
port 6381
dbfilename dump6381.rdb

2345_image_file_copy_182.jpg 

4. 通过不同的redis.conf文件,分别启动3个redis服务

./redis-server /usr/local/myredis/redis6379.conf
./redis-server /usr/local/myredis/redis6380.conf
./redis-server /usr/local/myredis/redis6381.conf

2345_image_file_copy_183.jpg

通过ps -ef | grep redis命令查看redis服务,3个服务均已启动

2345_image_file_copy_184.jpg

5. 在redis客户端中,通过info replication命令可以查看Redis服务器当前状态

可以给redis-cli命令添加-p参数,来指定链接哪个服务器

./redis-cli -p 6379
./redis-cli -p 6380
./redis-cli -p 6381

2345_image_file_copy_185.jpg

所有的服务器目前都是master

6. 配从(6380、6381)不配主(6379)

slaveof ip port成为某个实例的从服务器。

在从机6380和6381上执行:slaveof 127.0.0.1 6379
在主库(6379)中再次执行info replication

2345_image_file_copy_186.jpg

有两个从库,分别为6380和6381。

7. 在主库(6379)中写数据,可以在从库(6380、6381)中读取到。

注意:

在从库中进行写操作,会报错。

由于该主从复制在同一台虚拟机上搭建,所以需要修改端口号,如果在多台服务器上搭建主从复制,则需要修改相对应的ip。

如果在多台服务器上搭建主从复制,一定要开放远程链接。

3 Redis主从复制-复制原理

3.1 主从复制的一些问题

1. 如果Master断开(宕机),Slave依然连接着Master,可以正常使用读操作,但是没有写操作。如果Master恢复正常,Slave依旧可以直接获取Master写的信息。

2. 如果Slave断开(宕机),当该Slave重启成功,则会变为Master,需要通过slaveof 恢复成Slave,只要变为Slave,立刻可以从Master同步所有数据。

3.2 复制原理

  • Slave启动成功连接到Master后会主动发送一个同步(sync)命令。
  • Master接到Slave的命令,把Master数据进行持久化,把rdb文件发送给Slave,Slave拿到rdb进行读取。
  • 每次Master进行写操作之后,会和Slave进行数据同步。

2345_image_file_copy_187.jpg

  • 全量复制:一般发生在Slave初始化阶段,这时Slave需要将Master上的所有数据都复制一份。
  • 增量复制:指Slave初始化后开始正常工作时主服务器发生的写操作同步到从服务器的过程。

3.3 薪火相传

上一个Slave(从机)是下一个Slave(从机)的Master(主机)。

2345_image_file_copy_188.jpg

优点:Slave同样可以接收其他Slave的连接和同步请求,那么该Slave作为了链条中下一个的Master, 可以有效减轻Master的压力,去中心化降低风险。

缺点:一旦某个Slave宕机,后面的Slave都无法备份。

注意:

  • 也是通过slaveof ip port命令修改Master。
  • 中途变更转向:会清除之前的数据,重新建立拷贝最新的。
  • Slave6380本质上仍然是从库,只能读、不能写。

3.4 反客为主

当一个Master宕机后,后面的Slave可以立刻升为Master,其后面的Slave不用做任何修改。

2345_image_file_copy_189.jpg

通过slaveof no one 将Slave变为Master。

4 Redis主从复制-哨兵模式(Sentinel)

反客为主的自动版,能够后台监控Master是否故障,如果故障了,根据投票数自动将Slave转换为

Master。

哨兵模式是一种特殊的模式,首先Redis提供了哨兵的命令,哨兵是一个独立的进程,作为进程,它会独立运行。其原理是哨兵通过发送命令,等待Redis服务器响应,从而监控运行的多个Redis实例。

2345_image_file_copy_190.jpg

目录
相关文章
|
5月前
|
存储 负载均衡 NoSQL
【赵渝强老师】Redis Cluster分布式集群
Redis Cluster是Redis的分布式存储解决方案,通过哈希槽(slot)实现数据分片,支持水平扩展,具备高可用性和负载均衡能力,适用于大规模数据场景。
422 2
|
3月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
576 5
|
4月前
|
存储 监控 NoSQL
Redis高可用架构全解析:从主从复制到集群方案
Redis高可用确保服务持续稳定,避免单点故障导致数据丢失或业务中断。通过主从复制实现数据冗余,哨兵模式支持自动故障转移,Cluster集群则提供分布式数据分片与水平扩展,三者层层递进,保障读写分离、容灾切换与大规模数据存储,构建高性能、高可靠的Redis架构体系。
|
4月前
|
存储 负载均衡 NoSQL
Redis主从复制
在分布式系统中,为解决单点故障和提升性能,常采用Redis主从复制架构。通过将数据复制到多个从节点,实现读写分离、负载均衡及高可用性,同时支持多种拓扑结构以适应不同场景需求。
|
6月前
|
缓存 关系型数据库 MySQL
在MySQL中处理高并发和负载峰值的关键技术与策略
采用上述策略和技术时,每个环节都要进行细致的规划和测试,确保数据库系统既能满足高并发的要求,又要保持足够的灵活性来应对各种突发的流量峰值。实施时,合理评估和测试改动对系统性能的影响,避免单一措施可能引起的连锁反应。持续的系统监控和分析将对维护系统稳定性和进行未来规划提供重要信息。
337 15
|
6月前
|
负载均衡 NoSQL Redis
【赵渝强老师】Redis的主从复制集群
Redis主从复制是指将一台Redis服务器的数据复制到其他Redis服务器,实现数据热备份、故障恢复、负载均衡及高可用架构的基础。主节点负责写操作,从节点同步数据并可提供读服务,提升并发处理能力。
189 5
|
5月前
|
存储 NoSQL 算法
Redis的集群架构与使用经验
本文介绍了Redis的集群架构与使用经验,包括主从复制、哨兵集群及Cluster分片集群的应用场景与实现原理。内容涵盖Redis主从同步机制、数据分片存储方式、事务支持及与Memcached的区别,并讨论了Redis内存用尽时的处理策略。适用于了解Redis高可用与性能优化方案。
|
6月前
|
缓存 NoSQL Java
Java 项目实操高并发电商系统核心模块实现从基础到进阶的长尾技术要点详解 Java 项目实操
本项目实战实现高并发电商系统核心模块,涵盖商品、订单与库存服务。采用Spring Boot 3、Redis 7、RabbitMQ等最新技术栈,通过秒杀场景解决库存超卖、限流熔断及分布式事务难题。结合多级缓存优化查询性能,提升系统稳定性与吞吐能力,适用于Java微服务开发进阶学习。
243 0
|
4月前
|
数据采集 存储 弹性计算
高并发Java爬虫的瓶颈分析与动态线程优化方案
高并发Java爬虫的瓶颈分析与动态线程优化方案
|
存储 NoSQL Java
探索Java分布式锁:在高并发环境下的同步访问实现与优化
【6月更文挑战第30天】Java分布式锁在高并发下确保数据一致性,通过Redis的SETNX、ZooKeeper的临时节点、数据库操作等方式实现。优化策略包括锁超时重试、续期、公平性及性能提升,关键在于平衡同步与效率,适应大规模分布式系统的需求。
494 1