首页 > 数据库 >Redis高可用之持久化、主从复制

Redis高可用之持久化、主从复制

时间:2024-07-11 12:09:31浏览次数:14  
标签:主从复制 持久 Redis redis Master Slave

一、Redis高可用

策略概述
持久化 持久化是最简单的高可用方法,主要作用是数据备份,即将数据存储在硬盘,保证数据不会因进程退出而丢失。
主从复制 主从复制是高可用Redis的基础,主要实现了数据的多机备份,以及对于读操作的负载均衡和简单的故障恢复
哨兵 在主从复制的基础上,哨兵实现了自动化的故障恢复。缺陷:写操作无法负载均衡,存储能力受到单机的限制。
集群 通过集群,Redis解决了写操作无法负载均衡,以及存储能力受到单机限制的问题,实现了较为完善的高可用方案。

二、Redis 持久化

1.简介

Redis是内存数据库,数据都是存储在内存中,为了避免服务器断电等原因导致Redis进程异常退出后数据的永久丢失,需要定期将Redis中的数据以某种形式(数据或命令)从内存保存到硬盘;

当下次Redis重启时,利用持久化文件实现数据恢复。

除此之外,为了进行灾难备份,可以将持久化文件拷贝到一个远程位置。

2.Redis 的两种持久化方式

RDB持久化

定时把redis内存中的数据进行快照并压缩保存到硬盘;

RDB持久化保存的文件占用空间小,网络传输快,恢复速度也比AOF快,性能影响比AOF更小;

实时性不如AOF,兼容性较差,持久化期间在fork子进程时会阻塞reids父进程。

AOF持久化

以追加的方式将Redis写操作的命令记录到文件中;

实时性比RDB好,支持秒级持久化,兼容性较好;

持久化保存的文件占用磁盘空间更大,恢复速度更慢,性能影响更大,AOF文件重写期间在fork子进程时会阻塞reids父进程;

两者区别可通过 *工作方式、实时性、磁盘占用、恢复速度、兼容性、IO性能影响等方面进行阐述。

三、Redis主从复制

1.主从复制工作原理

Redis主从之间的复制分为两部分:全量复制和增量复制。

全量复制

Redis在第一次实现主从关系时会进行全量复制。

1)Slave 通过 psync命令同步数据与Master建立socket长连接;

2)Master 收到psync命令,执行bgsave语句生成RDB快照;

3)Master发送RDB数据;

4)Slave清空数据并加载Master发来的RDB数据;

5)Master将生成RDB文件过程中,修改的数据,从repl buffer发送给Slave;

6)Slave执行接收到的修改命令;

7)Master通过socket长连接持续把写命令发送给从接单,保证数据一致性。

增量复制

如果由于网络原因造成原因造成主从断开,期间有数据写入master,再次形成主从时,会形成增量复制。

1)Slave连接断开;

2)Master最近数据的修改命令的缓存;

3)Slave重新建立Socket长连接到master;

4)Slave psync命令同步数据: offset偏移量控制;

5)Master判断 Slave的offset。如果在repl backlog buffer中,Master会将缓存中从salve的offset之后数据一次性同步给salve节点,否则会全量同步;

6)Master通过socket长连接持续把写命令发送给从节点,保证主从一致性。

2.Redis主从同步策略

主从刚刚连接的时候,进行全量同步;全同步结束后,进行增量同步。

当然,如果有需要,slave 在任何时候都可以发起全量同步。

redis 策略是,无论如何,首先会尝试进行增量同步,如不成功,要求从机进行全量同步

四、搭建Redis主从复制

节点服务器IP地址
Master 192.168.100.146
Slave 192.168.100.155

Step1 Master节点修改 Redis 配置文件

vim /apps/redis/etc/redis.conf

bind 0.0.0.0                                #修改监听地址为0.0.0.0
protected-mode no                           #将本机访问保护模式设置no
port 6379                                   #Redis默认的监听6379端口
daemonize yes                              #设置为守护进程,后台启动
pidfile /apps/redis/run/redis_6379.pid       #指定 PID 文件
logfile /apps/redis/log/redis_6379.log      #指定日志文件
dir /usr/local/redis/data                     #指定持久化文件所在目录
#requirepass abc123                         #可选,设置redis密码
appendonly yes                              #开启AOF
systemctl restart redis-server.service

Step2 Slave节点修改 Redis 配置文件

vim /apps/redis/etc/redis.conf

bind 0.0.0.0                            #修改监听地址为0.0.0.0
protected-mode no                        #将本机访问保护模式设置no
port 6379                                #Redis默认的监听6379端口
daemonize yes                            #设置为守护进程,后台启动
pidfile /apps/redis/run/redis_6379.pid        #指定 PID 文件
logfile /apps/redis/log/redis_6379.log     #指定日志文件
dir /apps/redis/data                #指定持久化文件所在目录
replicaof 192.168.100.146 6379            #指定要同步的Master节点IP和端口
masterauth 123                           #可选,指定Master节点的密码,仅在Master节点设置了requirepass
requirepass abc123                        #可选,设置redis密码
appendonly yes                            #开启AOF

Step3 主从效果验证

#在Master节点上看日志:
tail -f /apps/redis/log/redis.log 

#从服务器查看主从复制状态
info Persistence

 

标签:主从复制,持久,Redis,redis,Master,Slave
From: https://www.cnblogs.com/hxqwe/p/18294927

相关文章

  • NoSQL之Redis配置与优化
    目录NoSQL之Redis配置与优化一、关系数据库和非关系数据库1.关系型数据库2.非关系型数据库3.非关系型数据库产生背景4.关系型数据库和非关系型数据库的区别4.1数据存储方式不同4.2扩展方式不同4.3对事务性的支持不同5.总结二、Redis的基础概念1.Redis简介2.Red......
  • redis
    一、redis概述(一)什么是redis?        Redis(RemoteDictionaryServer)是一个开源的、基于内存的、可选持久化的日志型Key-Value数据库编写,支持网络操作,并提供多种语言的API。Redis支持多种数据结构,包括字符串(string)、列表(list)、集合(set)、有序集合(zset)和哈希(hash),并且这......
  • Redis实现延迟任务
    @DatapublicclassTaskimplementsSerializable{/***任务id*/privateLongtaskId;/***类型*/privateIntegertaskType;/***优先级*/privateIntegerpriority;/***执行id*/......
  • Redis中设置增量缓存,减少对数据库的交互查询;启动@Async;异步线程
    //当属于这个分支的报文传入调用processMessage方法if((newJSONObject(dataMessage).optString("documentStatus")).equals("carWeizi_redis_service")){processMessage(dataMessage);}//processMessage中先把增量数据插入数据库,同时缓存redispublic......
  • eBPF 容器持久化map到宿主机上
    问题现象k8s上启动pod后,使用主机网络的容器,加载eBPF程序到网口上,持久化map只能保存在容器文件系统/sys/fs/bpf中。容器复位后,新容器与原来eBPF程序使用的不是同一个map。问题分析新容器使用新的文件系统,无法找回原来的/sys/fs/bpf挂载点,需要持久化到宿主机上。k8s挂载传播,实现......
  • RedisTemplate 中序列化方式辨析
    在SpringDataRedis中,RedisTemplate是操作Redis的核心类,它提供了丰富的API来与Redis进行交互。由于Redis是一个键值存储系统,它存储的是字节序列,因此在使用RedisTemplate时,需要指定键(Key)和值(Value)的序列化方式。不同的序列化方式适用于不同的场景。下面将详细介绍几种序列......
  • redis 5 安装配置以及脚本
     redis6.2安装配置以及脚本(147)  wgethttp://download.redis.io/releases/redis-6.2.14.tar.gz tar-xfredis-5.0.10.tar.gz-C/usr/local/ cd/usr/local/redis-5.0.10&&make ...... vimredis.conf daemonizeyesbind127.0.0.1192.168.1.252 ......
  • 实战篇——SSRF漏洞Redis反弹shell实战
    实战篇——SSRF漏洞Redis反弹shell实战SSRF之Redis实战上一章中利用file伪协议实现了内网的主机探测,发现存在192.168.118.151,对其进行端口探测:可见开放了6379端口,结合响应判断为Redis服务。而Redis存在未授权访问漏洞,可以利用该漏洞实现信息泄露、数据删除以及反弹shell,下面......
  • redis-benchmark压力测试
    01测试-redis-benchmark压力测试redis自带有redis-benchmark工具做压力测试,经常用来测试新版本,新特性对基准测试性能的影响。参数场景变化下的性能状况。主要参数: -h<hostname>   服务器地址(default127.0.0.1) -p<port>     端口(default6379) -s<so......
  • 手写持久层框架------无需写sql语句即可完成对单表的CRUD操作。
    目的:巩固知识点技术栈:java+mysql+反射+自定义注解+泛型+jdbc持久层框架:与数据库交互的一层成为持久层。完成orm操作o(Object对象) r:(relative关系)  m:(mapping映射)。实体类---数据库表  属性---表的字段  实体类对象----一条记录  集合----表中多条记录手......