Redis实战 | 持久化、主从复制特性和故障处理思路

前言

前面两篇我们了解了Redis的安装、Redis最常用的5种数据类型。本篇总结下Redis的持久化、主从复制特性,以及Redis服务挂了之后的一些处理思路。

前期回顾传送门:

Linux下安装Redis简易教程
Redis实战 | 5种Redis数据类型详解

Redis的两种持久化方式

经常有面试官会问:Redis数据存储在内存中,万一断电了怎么办呢?

不要慌,这个其实就是在问Redis的持久化策略啦。我们知道,保存在内存中的数据,在服务重启或者是机器挂掉之后是会丢失的。而硬盘中的数据是不会丢失的,因此只有将数据保存在硬盘上才相对安全些。

Redis为了追求高性能而将数据存在内存中,同时也提供了持久化的选项保证数据的安全性。这两种方式是:

  • RDB快照持久化,就是将某一时刻的数据写入硬盘中
  • AOF只追加文件的方式,就是将被执行的写命令追加到文件,并保存到硬盘里

1、RDB持久化方式

什么是RDB持久化呢?

也叫快照持久化,就是将当前Redis数据库中的数据快照保存一份到磁盘文件中(一般叫dump.rdb)。好了,这个时候如果断电了,没事啊,重启后,Redis通过加载rdb文件可以将数据库状态恢复。基本上算是,满血复活了(因为存在数据丢失问题,血不是很满!)

RDB 功能最核心的是 rdbSave 和 rdbLoad 两个函数, 前者用于生成 RDB 文件到磁盘, 而后者则用于将 RDB 文件中的数据重新载入到内存中

看图说话:

在这里插入图片描述

怎么实现RDB的持久化呢?

SAVE 和 BGSAVE两个命令来实现RDB持久化,这两个命令都会调用 rdbSave 函数,将数据保存在rdb文件中。但是有所区别:

  • SAVE命令会直接调用rdbSave函数,阻塞Redis主进程,在保存完成之前,Redis不再响应其他任何客户端命令。
  • BGSAVE命令fork出一个子进程,子进程调用rdbSave函数,这样Redis主进程可以继续处理客户端请求。

一般我们怎么配置RDB持久化呢?

这里我们可以通过修改redis.conf配置文件中关于RDB持久化的选项让Redis自动去执行持久化。比如下面这些选项:

# 900s之内有1次写入save 900 1# 300s内有10次写入save 300 10# 60s内有10000次写入save 60 10000#执行bgsave失败时是否继续执行写命令,默认是yesstop-writes-on-bgsave-error yes#是否对快照文件进行压缩,模式是yesrdbcompression yes#快照文件的名称,默认是dump.rdbdbfilename dump.rdb

当配置了多个save选项时,当任意一个save配置项条件被满足时,Redis就会触发一次BGSAVE命令。

除了在redis.conf配置文件中配置rdb持久化之外,还有一些方式,可以创建快照:

  • 通过直接在redis客户端敲save或bgsave命令的方式触发一次快照持久化
  • 通过shutdown命令关闭服务器时,会执行一个SAVE命令,阻塞所有客户端,并在SAVE命令执行完毕之后关闭服务器

前面说到,RDB丢失数据的问题,其实就是在两次同步数据之间,如果服务器发生崩溃,便会丢失掉这之间的数据。

2、AOF持久化方式

什么是AOF,就是appendonly file的缩写啦!

简单来说,AOF持久化就是将被执行的写命令追加到AOF文件的末尾,以此来记录数据发生的变化。在恢复数据时,只需要从头到尾重新执行一遍AOF文件所包含的所有命令即可。

那么,AOF持久化有哪些配置项呢?

# 是否使用appendonly模式,默认是noappendonly no# appendfilename文件名appendfilename "appendonly.aof"

# appendfsync always //每个命令都同步appendfsync everysec //没秒执行一次同步,默认是这个# appendfsync no //操作系统决定何时进行同步

# 在对aof文件进行压缩的时候能否执行同步no-appendfsync-on-rewrite no

AOF方式的持久化有个缺点,就是文件的体积比较大。

Redis为了缓解这个问题,给我们提供了BGREWRITEAOF的命令,这个命令会通过移除AOF文件中的一些冗余命令来重写AOF文件,使得AOF文件的体积尽可能地缩小。类比BGSAVE命令,这里的BGREWRITEAOF命令也是fork出一个子进程进行AOF文件的压缩(也就是重写)工作。

同样地,我们可以在redis.conf配置文件中配置AOF文件的重写选项,让Redis自动执行BGREWRITEAOF

auto-aof-rewrite-percentage 100auto-aof-rewrite-min-size 64mb

这两个配置的意思就是,当AOF文件的体积大于64MB,并且AOF文件的体积比上一次重写之后的体积大了至少一倍(100%)时,Redis将执行AOF文件的重写命令。

Redis的主从复制

单机版Redis实例存在的问题

  • 首先是数据安全性问题,毕竟所有数据在一台机器上,万一这台机器被炸毁了,岂不是没救了。因此,需要多机器备份数据出来,Redis主从复制特性帮助我们实现数据的热备份。
  • 第二个就是性能问题了,尤其是在处理一些较复杂命令和较大数据集合的操作时,每秒处理的请求数会下降不少。

什么是主从复制

就是将一台Redis服务器的数据,复制到另外一台或几台Redis服务器上。前者就是主服务器,后者就是从服务器。主服务器负责处理客户端的读写请求,而从服务器可以分担一部分读请求或者负责所有的读请求。

客户端每次向主服务器写入的命令,从服务器都能得到实时的更新。默认情况下,每台Redis服务器都是主节点;且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点。

在这里插入图片描述

如何配置主从复制

配置主从复制其实很简单,就一条命令 slaveof。配置主从复制,其实就是配置Redis的从服务器从哪台主服务器复制数据。主服务器不需要动的。

因此,我们可以修改从服务器的 redis.conf 文件,增加如下一行配置就行:

slaveof masterip port

除了配置文件的方式外,还可以在启动redis实例的时候 加入 --slaveof masterip port ,这样就会告诉redis实例从哪台机器和端口处复制数据。

也可以直接在redis客户端执行命令 slaveof masterip port,让服务器开始复制一个主服务器。

另外,如果要断开同主服务器的复制,可以使用下面命令:

slaveof no one

Redis主从复制的具体过程是怎样的

当从服务器连接主服务器时,主从服务器执行的大概操作如下图所示:

在这里插入图片描述

需要注意的是,从服务器在进行同步时,会清空自己的所有数据。

故障处理

服务器宕机之后,可能需要恢复数据,这时候会用到之前说的持久化到硬盘上的aof或是dump快照文件。Redis给我们提供了两个命令行工具,在系统故障之后,用来检查aof文件和快照文件的状态,并且在还有修复功能。
下面是这两个命令行程序:

redis-check-aofredis-check-dump

下面举例一种故障的场景:

A是redis主服务器,B是从服务器。A机器故障暂无法修复。现将C机器上的redis服务作为主服务器替换上去。

具体的替换计划是这样的:

  1. 首先向B发送一个SAVE命令,让它创建一个最新的快照文件
  2. 接着将这个快照文件发送给机器C,并在机器C上面启动Redis
  3. 在机器B上执行slaveof 命令,让它将C机器作为主服务器

作者Info:
公众号:二营长的笔记

原文地址:https://www.cnblogs.com/happyone/p/12164290.html

时间: 2024-07-30 20:26:53

Redis实战 | 持久化、主从复制特性和故障处理思路的相关文章

redis实战_04_yucong_主从复制

redis主从复制的配置实战 实战操作之后,发现redis的主从配置的确非常简单: 只需要在从服务器的redis.conf中写以下两行代码就搞定(示例): slaveof 192.168.1.253 6379 masterauth 123456 已经搞定了,为了查看服务器主从关系,只需要在登陆redis客户端后,输入info查看即可,截个图加深印象.

redis实战笔记(1)

第1章 初识Redis 本章主要内容 1.Redis与其他软件的相同之处和不同之处 2.Redis的用法 3.使用Python示例代码与Redis进行简单的互动 4.使用Redis解决实际问题 Redis是一个远程内存数据库, 它不仅性能强劲, 而且还具有复制特性以及为解决问题而生的独一无二的数据模型. Redis提供了 5种不同类型的数据结构, 各式各样的问题都可以很自 然地映射到这些数据结构上: Redis的数据结构致力于帮助用户解决问题, 而不会像其他数据库那样, 要求用户扭曲问题来适应数

Redis实战总结-配置、持久化、复制

Redis的配置主要放置在redis.conf,可以通过修改配置文件实现Redis许多特性,比如复制,持久化,集群等. redis.conf部分配置详解 # 启动redis,显示加载配置redis.conf # ./redis-server /path/to/redis.conf # 停止redis # redis-cli -h IP -p PORT shutdown # 可以包含一个或多个其他配置文件,如果多个redis服务器存在标准配置模板,但是每隔redis服务器可能有个性化的配置 # i

Redis实战(八)Redis的持久化

Redis相比Memcached的很大一个优势是支持数据的持久化, 通常持久化的场景一个是做数据库使用,另一个是Redis在做缓存服务器时,防止缓存失效. Redis的持久化主要有快照Snapshotting和AOF日志文件两种方式. 前者会根据配置的规则定时将内存中的数据持久化到硬盘上, 后者则是在每次执行写命令之后将命令记录下来. >>RDB方式 Redis是会以快照的形式将数据持久化到磁盘上. 默认会将快照文件存储在Redis当前进程的工作目录的dump.rdb文件中, 可以通过配置文件

java架构师课程、性能调优、高并发、tomcat负载均衡、大型电商项目实战、高可用、高可扩展、数据库架构设计、Solr集群与应用、分布式实战、主从复制、高可用集群、大数据

15套Java架构师详情 * { font-family: "Microsoft YaHei" !important } h1 { background-color: #006; color: #FF0 } 15套java架构师.集群.高可用.高可扩展.高性能.高并发.性能优化.Spring boot.Redis.ActiveMQ.Nginx.Mycat.Netty.Jvm大型分布式项目实战视频教程 视频课程包含: 高级Java架构师包含:Spring boot.Spring  clo

redis使用基础(五) ——Redis数据持久化

redis使用基础(五) --Redis数据持久化 (转载请附上本文链接--linhxx) 当服务器突然发生问题,或者redis重启,如果希望将数据持久化在硬盘中,下次开启redis还有数据时,redis提供了两种方案,一个叫做RDB(通过内存快照(Snapshotting)实现),另一个叫做AOF(日志追加(Append-only file)).通常结合两种方式来实现redis的持久化. 1.RDB RDB通过内存快照实现,会将redis当前的全部数据以快照的方式写入二进制文件中.实现快照有以

02 : redis 数据持久化

Redis数据持久化 什么是持久化: 通俗点:就是把redis缓存在内存中的数据保存到磁盘文件里面. Redis持久化分2种: RDB 持久化 可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot). 优点:速度快,适合于用做备份,主从复制也是基于RDB持久化功能实现的. 缺点:会有数据丢失 AOF 持久化 记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集. AOF 文件中的命令全部以 Redis 协议的格式来保存,新命令会

【redis】-- redis的持久化(作为数据库)

目录 1.RDB rdb持久化的方式 rdb方式的优点: aof的优点 3.持久化的其他特性 日志重写 工作原理 rdb和aof混合使用 redis是一个基于内存的数据库,故在redis正在运行的数据都在内存中,而内存掉电,内存上所以数据都会消失.故把redis当成数据库使用时就需要对redis进行持久化. 在说redis持久化的时候,我们先来聊聊其他的知识.linux的父子进程.在Linux中使用fork()函数会给当前正在运行的进程创建一个子进程.那么现在问题就来了,fork时父子进程中的数

redis实战 pdf 完整版 PDF高清下载

<redis实战>深入浅出地介绍了Redis的5种数据类型,并通过多个实用示例展示了Redis的用法. 除此之外,书中还讲述了Redis的优化方法以及扩展方法,是一本对于学习和使用 Redis 来说不可多得的参考书籍.<redis实战>一共由三个部分组成. 部分对Redis进行了介绍,说明了Redis的基本使用方法.它拥有的5种数据结构以及操作这5种数据结构的命令,并讲解了如何使用Redis去构建文章展示网站.cookie.购物车.网页缓存.数据库行缓存等一系列程序. 第二部分对R