首页 > 数据库 >Redis 哨兵与集群基础:数据冗余与备份的主从舞蹈

Redis 哨兵与集群基础:数据冗余与备份的主从舞蹈

时间:2024-12-16 22:30:13浏览次数:5  
标签:Redis redis 节点 7.2 master 0.0 root 主从 冗余

1、redis主从配置

1.1、简介

像MySQL一样,redis是支持主从同步的,而且也支持一主多从以及多级从结构。 主从结构,一是为了纯粹的冗余备份,二是为了提升读性能,比如很消耗性能的SORT就可以由从服务器来承担。 redis的主从同步是异步进行的,这意味着主从同步不会影响主逻辑,也不会降低redis的处理性能。 主从架构中,可以考虑关闭主服务器的数据持久化功能,只让从服务器进行持久化,这样可以提高主服务器的处理性能

1.2、概念

redis提供的一种高可用机制。允许一个主节点(Master)将所有数据同步到多个从节点(Slave)

主节点(Master):写操作--数据同步至从节点(Slave)

从节点(Slave):读操作--数据来源于Master

1.3、原理

        +-----------+

        |   Master  |

        |  (主节点)  |

        +-----------+

         /      \

        /        \

       /          \

      /            \

+-----------+   +-----------+

|   Slave 1 |   |   Slave 2 |

| (从节点1)  |   | (从节点2)  |

+-----------+   +-----------+

1、从节点发送SYNC命令:当一个从节点启动时,首先会向主节点发送SYNC命令,请求进行数据同步。

2、主节点进行全量复制:主节点收到SYNC命令后,会创建一个RDB快照文件,并将该文件发送给从节点(BGSAVE指令)。同时,在RDB文件生成期间,主节点会记录所有新的写操作,并在RDB传输完成后,将这些增量写操作也一并发送给从节点。从节点接收到RDB文件后,会加载该文件,覆盖本地已有的数据,从而达到全量数据同步的效果。

3、从节点接收增量数据:在全量复制完成后,从节点会继续接收主节点的实时写操作,并将这些写操作应用到自己的数据集中,保持数据的一致性。如果从节点与主节点断开连接,当从节点恢复连接后,主节点会将自从连接断开后的增量数据发送给从节点,以保持数据的同步。

4、在Redis 2.8之后,Redis引入了PSYNC命令来替代原来的SYNC命令,用于支持断点续传。PSYNC命令允许从节点在与主节点断开连接后重新连接时,从上次断开的地方继续同步数据,而不是重新进行全量复制。

1.4扩展:BGSAVE指令执行过程

当执行BGSAVE命令时,Redis会首先检查是否存在正在执行的子进程。如果存在,BGSAVE命令会直接返回,而不会启动新的保存操作。

如果不存在正在执行的子进程,Redis会执行fork操作来创建一个新的子进程。在fork操作期间,父进程(即Redis主进程)会处于阻塞状态,直到子进程被成功创建。

子进程创建成功后,它开始将数据从父进程的内存空间转储到磁盘上。这个过程是异步的,意味着父进程可以在子进程进行磁盘写入的同时,继续处理客户端的请求。

当子进程完成数据保存后,它会退出。此时,父进程会得到通知,并可以使用新的RDB文件替换旧的RDB文件(如果配置了自动替换的话)。

2、redis主从复制实战

2.1、环境准备

10.211.55.52Master
10.211.55.53Slave1
10.211.55.54slave2

三台设备均安装部署redis完毕。详细安装教程见这里

精简版
[root@iycms ~]# wget http://download.redis.io/releases/redis-7.2.6.tar.gz
[root@iycms /]# tar -zxvf /root/redis-7.2.6.tar.gz  -C /usr/
[root@iycms /]# cd /usr/redis-7.2.6/
[root@iycms redis-7.2.6]# make

2.2、主节点redis配置

[root@master redis-7.2.6]# vim redis.conf 
#修改以下内容
#ip设置为0.0.0.0,其他服务器才能连接上
bind 0.0.0.0
#关闭保护模式
protected-mode no
#设置后台启动
daemonize yes
#开启AOF存储
appendonly yes

2.3、从节点1、2redis配置

[root@slave1 redis-7.2.6]# vim redis.conf 
Slave1、Slave2修改以下内容
#ip设置为0.0.0.0,其他服务器才能连接上
bind 0.0.0.0
#关闭保护模式
protected-mode no
# replicaof <masterip> <masterport> 设置为Master地址端口
replicaof 10.211.55.52 6379

2.4、重启服务

执行启动命

/usr/redis-7.2.6/src/redis-server   /usr/redis-7.2.6/redis.conf

启动如果提示:

7724:C 16 Dec 2024 08:56:36.992 # WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition. Being disabled, it can also cause failures without low memory condition, see https://github.com/jemalloc/jemalloc/issues/1328.To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.

执行sysctl vm.overcommit_memory=1

2.5、主从配置信息查看

进入命令端后执行info replication

[root@master redis-7.2.6]# ./src/redis-cli 
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=10.211.55.53,port=6379,state=online,offset=434,lag=1
slave1:ip=10.211.55.54,port=6379,state=online,offset=434,lag=1
master_failover_state:no-failover
master_replid:ac24ee2a81b58f75706fa750b6b89ccfc94f1e97
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:434
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:434

2.6、验证

Master设置一个键值

[root@master redis-7.2.6]# ./src/redis-cli 
127.0.0.1:6379> set name zhangjp
OK
127.0.0.1:6379> get name
"zhangjp"
127.0.0.1:6379> 

Slave1、Slave2查看

因为Slave1、Slave2没有设置后台模式,所以我们新建窗口验证效果

至此,主从复制就结束了,接下来是哨兵模式,哨兵模式顾名思义就是站哨的啦。

大概就是监视几个节点的状态,当主节点Master出现故障时,选举出新的Master,详解见下一章啦

标签:Redis,redis,节点,7.2,master,0.0,root,主从,冗余
From: https://blog.csdn.net/weixin_45065854/article/details/144518403

相关文章

  • Redis应用—4.在库存里的应用
    大纲1.库存模块设计2.库存缓存分片和渐进式同步方案3.基于缓存分片的下单库存扣减方案4.商品库存设置流程与异步落库的实现6.库存入库时"缓存分片写入+渐进式写入+写入失败进行MQ补偿"的实现7.库存扣减时"基于库存分片依次扣减+合并扣减+扣不了返还+异步落库"的实......
  • Docker安装Redis和Elasticsearch
    本章将和大家分享在Docker中如何安装Redis和Elasticsearch。废话不多说,下面我们直接进入主题。一、Docker安装Redis1、拉取最新版的redis镜像dockerpullredis2、查看本地镜像dockerimages3、从官网获取redis.conf配置文件创建并进入指定目录(可自定义)://进入......
  • Redis:从安装到“数据不见了,快来救我!”史上最全讲解之安装配置启动
    本着上班找工作为目的,从0开始学redis,从安装部署开始。centos9作为实验机目录1、redis下载安装2、redis配置并启动3、Redis命令3.1、设置值(key)3.2、获取值3.3、EX选项3.4、PX选项3.5、TTL获取剩余生存时间(秒)3.6、NX选项3.7、XX选项3.8、del删除键4、redis工具......
  • Redis与关系型数据库:在不同场景下的数据库选择与优化策略
    在现代应用开发中,数据库作为核心组件之一,承载着数据存储、检索和管理的重要任务。根据不同的应用需求,开发人员通常需要在关系型数据库(如MySQL)和NoSQL数据库(如Redis)之间做出选择。每种数据库都有其独特的优势和适用场景,合理的数据库选择和优化策略能够显著提高系统的性能和可扩......
  • 9.主从复制
    主从复制​ mysql允许将主实例(master)上的数据同步到一个或者多个从实例(slave)上,默认情况下复制时异步进行的,从库不需要一直连接到主库来同步数据​ MySQL复制的数据粒度可以是主实例上所有的数据库,也可以是指定的一个或多个数据库,也可以是一个数据库里的指定的表MySQL复制所......
  • Redis 哨兵 Sentinel 介绍
    RedisSentinel说明RedisSentinel为非集群Redis提供高可用解决方案。它能够在主节点发生故障时,自动切换主从角色,实现系统的高可用性。RedisSentinel还提供其他附带任务,例如监控、通知,并充当客户端的配置提供程序。RedisSentinel功能1.监控(Monitoring)分布式......
  • 学习下Redis内存模型
    作者:京东零售吴佳前言redis,对于一个java开发工程师来讲,其实算不得什么复杂新奇的技术,但可能也很少人去深入了解学习它的底层的一些东西。下面将通过对内存统计、内存划分、存储细节、对象类型&内部编码这四个模块来学习学习redis的内存模型,手字笔录,潜心修行。一、redis的内存......
  • Redis应用—3.在购物车里的应用
    大纲1.社区电商购物车的读多写多场景分析2.购物车的复杂缓存与异步落库(SortedSet+Hash->hPut+zadd)3.购物车异步落库与完整加入流程(缓存雪崩+MQ异步出现问题)4.购物车的阈值检查与重复加入逻辑(hGet+hLen+hFieldExists)5.购物车加入商品多线程并发问题解决(分......
  • 如何处理 MySQL 的主从同步延迟?
    如何处理MySQL的主从同步延迟?MySQL的主从同步延迟通常是由主库与从库之间的网络延迟、从库的处理能力、主库的写操作量等因素导致的。长时间的同步延迟可能会影响系统的稳定性和数据一致性。以下是几种处理和减少MySQL主从同步延迟的方法。1.优化主库性能确保主库的写操......
  • redis 数据查看
    1.打开命令行终端。2.输入以下命令连接到Redis服务器:redis-cli-hhost-pport其中host是Redis服务器的IP地址,port是Redis服务器的监听端口号。4.当服务器要求输入密码时,在命令行中输入以下命令进行身份验证:AUTHpassword其中password是你设置的密码。5.......