配置文件详解、RDB 及 AOF 备份机制(一)|学习笔记

简介: 快速学习配置文件详解、RDB 及 AOF 备份机制(一)

开发者学堂课程【Redis 入门实战演练 配置文件详解、RDB 及 AOF 备份机制(一)】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/653/detail/10835


配置文件详解、RDB 及 AOF 备份机制(一)

 

内容介绍

一、Redis 配置文件

二、Redis 持久化

三、选择与使用

 

一、Redis 配置文件

讲解 appendonly no#简称是 AOF。

appendonly no#是否开启 AOF 日志记录,默认 redis 使用的是 rdb 方式持久化,这种方式在许多应用中已经足够用了,但是redis如果中途宕机,会导致可能有几分钟的数据丢失(取决于dumpd 教据的间隔时间),根据save来策略进行持久化,Append Only File 是另一种持久化方式,可以提供更好的持久化特性,Redis 会把每次写入的数据在接收后都写入 appendonly.aof 文件,每次启动时 Redis 都会先把这个文件的数据读入内存里,先忽略 RDB 文件。

1、appendfsync everysec

打开 appendonly no#文件多久保存一次是appendfsync everysec #aof 这个参数来控制的appendfsync everysec #aof 持久化策略的配置有三个选项可以设置appendfsync everysec #aof一个是 always,一个是 everysec,一个是 no,个选项各有代表的含义,no 表示不执行 fsync,由操作系统保证数据向步到磁盘always 表示每次写入都执行 fsync,以保证数据同步到磁盘everysec 表示每秒执行一次 fsync,把文件保存到磁盘上,但是每秒的保存方式可能会导致这1s的丢失一秒钟执行一次 fsync,把文件保存到磁盘上,向磁盘刷新数据,就可能导致一秒数据的丢失,我们知道一秒钟有1000毫秒,假设在一个时间点一次 appendfsync,下一个时间点就是1秒钟之后,把数据向磁盘刷新一次假如过了800毫秒或是900毫秒还没有达到一秒钟的时候突然断电这只是一种极端情况,这时候有一部分内容还没写入磁盘这可能就会导致内容的丢失。一秒钟往磁盘写一次间隔时间很短,所以我们通常都使用默认参数 everysec,这个参数就是一秒钟往磁盘写入一次。如果认为这个时间比较长,可以更改为 alwaysalways 是一旦往里面写数据,就把它直接写入到磁盘上的AOF文件里,这种的数据一致性写入效果最好,但是每一个 key 都写入一次会消耗磁盘。因此最好选择每秒钟一次的写入方式,即 everysec,这一秒钟无论发生多少key,10个、100个或是1000个都只在一秒钟写入一次。

2、no-appendfsync-on-rewrite

(1) 是否重写

no-appendfsync-on-rewriteaof rewrite 期间,会涉及到 aof-rewrite 机制,通过参数设置 aof-rewrite 的大小。auto-aof-rewrite-min-size 64mb触发 aof rewrite 的最小文件大小最小文件的大小可以更改,不仅仅是64mb,也可以是128mb等。如果达到了最小文件的大小,会进行重写,达到减小 aof 文件的效果,这是因为aof文件的特性就是从上到下顺序记录,会把创建在 del 之后的数据清空掉,从而降低日志内容。auto-aof-rewrite-percentage 100则表示当 Aof log 增长超过指定百分比例时,例如当最小文件大小设置为64mb 时,它的百分比例就是128mb,同理最小文件大小为1228mb 时,百分比例为256mb.也会重写一次 AOF 文件,设置为0表示不自动重写 Aof 日志当然重写依据实际数量的大小来进行更改,如果数据量很少就没有必要进行重写,而数据量很大的时候,也要对最小文件大小进行更改,不一定非要是64mb。重写与否不会影响后续的使用,重写是为了使 aof 体积保持最小,但同时还可以确保保存最完整的数据并且可以时 redis 在后期更快的恢复数据。如果日志文件不进行重写,创建出来之后占用了磁盘空间,并消耗了磁盘性能。

(2) 是否延迟

是否对 aof 新记录的 append 暂缓使用文件同步策略(前文所讲 always、everysec、no),主要考虑磁盘 IO 开支和请求阻塞时间。默认为 no,表示"不暂缓"表示新的 aof 记录仍然会被立即同步到日志文件里。Linux 的默认 fsync 策略是30秒,如果为 yes表示暂缓一段时间再将日志同步到 aof 文件里,这可能会导致30秒数据的丢失,但由于 yes 性能较好而且会避兔出现阻塞因此比较推荐。当然,如果磁盘性能较好,可以设置为 no,不暂缓使用文件同步策略,进行实时的数据同步。

3、aof-load-truncated yes

是否加载由于其他原因导致的末尾异常的 AOF 文件,异常通常是主进程被ki/断电等强制撤掉,导致 redis 没有正常退出,进而导致尾部的异常。yes 表示正常加载异常文件。

4、aof-use-rdb-preamble no

redis4.0 新增的 RDB-AOF 混合持久化格式,在开启了这个功能之后,AOF 重写产生的文件将同时包含RDB格式的内容和 AOF 格式的内容,其中 RDB 格式的内容用于记录已有的数据,而 AOF 格式的内存则用于记录最近发生了变化的数据,这样Redis就可以同时兼有 RDB 持久化和 AOF 持久化的优点,既能够快速地生成重写文件,也能够在出现问题时,快速地载入数据以及发生变化的数据,数据的一致性比 RDB 好。默认以 no 打开,因为这是 redis4.0新增的一种模式,技术还不够成熟,不确定是否能将数据的一致性完整地保留下来,因此我们再次不加以使用了。而 RDB 和 AOF 已经在多个版本加以使用了,技术相对成熟了,因此对这两个技术我们使用的更多一些。

RDB 和 AOF 主要用于备份数据,不考虑数据丢失,也可以不使用重写。为了安全考虑,最好将 rdb 开启。

5、LUA 脚本

一般情况下我们 对 LUA 脚本的执行也是很少的,如果想要执行,可以进行配置,lua time limit5000表示限制的执行时间为5000毫秒,即5秒。lua 脚本的最大执行时间单位为毫秒。

6、REDIS CLUSTER

cluster-enabled yes 是否开启集群模式,默认情况下不开启集群模式。而如果要创建Redis Cluster则必须要开启集群模式,否则是无法完成创建的。

cluster-config-file nodes-6379.conf,表示 Redis Cluster 的配置文件,只需要指定名称就可以了。这个文件会由 node 集群节点自动生成,即不需要进行手动支配。

cluster-node-timeout 15000,表示 Redis 集群中 node 节点连接超时时间,即确定经过多长时间后节点还没有完成配置就可以认为连接超时。单位也是毫秒,15000毫秒就是15秒,即15秒之后 Redis Cluster 的节点还没有完成连接成功,就认为连接超时了。

cluster-replica-validity-factor 10,在执行故障转移的时候可能有些节点和master断开一段时间,数据比较旧。这些节点就不适用于选举为master,超过这个时间(即10秒)的节点就不会被进行故障转移。例如三个 monster,六个节点,表示一主两从,每一个 monster 和两个节点各有关系,当一个 monster 所对应的节点表示12秒之前的内容,另一个节点表示8秒之前的内容,很明显12秒的节点就比较旧,故12秒的节点就不会进行故障转移了。此处的单位是秒,10秒的时间已经足够长了,因此我们选用默认值10即可。

cluster-migration-barrier 1表示集群迁移屏障,1指的是个数,表示一个主节点(monster)拥有的至少可以正常工作的从节点个数,即如果主节点的 slave 节点故隙后会将多余的从节点分配到当前主节点成为其新的从节点,当 monster 没有出现故障但 slave 出现故障时,这种情况也是有可能出现的,这时候会将故障节点移除,从其他地方移入可以正常工作的节点作为当前 monster slave,从而保证monster 有一个可以正常使用的从节点。monster 出现故障后,从节点就会接替它的工作,进行数据的传递,从节点的接替工作是自动的,相对于 MYSQl 来说更加的智能,不需要人为的操作。

cluster-require-ful-coverage no ,表示集群请求槽位全部覆盖,这是redis集群的一个特性,redis集群实现的机制是分片,整个 redis 共用16384个槽位,可以理解成有16384个槽位去存储数据。这16384个槽位会平均分配给 monster,即槽位只在 monster 中产生,slave是没有槽位的,只对 monster 的数据进行继承。只有当 monster 出现故障被剔除之后,slave 才会结果 monster 的职能,从而也就继承了 monster 的槽位。如果一个主库宕机且没有备库就会出现集群槽位不全,此时yes情况下redis集群槽位验证不全,就不会再对外提供服务,这是因为yes情况要求整个集群的槽位必须是16384个,一旦少了一个,经校验后,读取数据时都会报错,无法进行数据的读取;而no情况下则可以继续使用但是会出现查询数据查不到或是写入不成功的情况,这是因为有数据的丢失。后续我们会学到一种算法(取模法)去决定读取的数据位于哪一个主机,应用程序在写入数据时,会把数据进行16384取模校验,因此取完模之后数据一定在16384以内(小于等于16384)取完模之后在1-5000的数据就会在第一个主机,5001-10000的数据就在第二个主机里,其余的数据全部存储在第三主机里。假设第一个 monster 中有5000个槽位,第二个 monster 中也有5000个槽位,最后一个 monster 具有6384个槽位,如果最后一组 redis 服务器全部出现了故障,那么最后一个 monster 槽位的数据也会全部丢失,出发具有跨主机的备份文件,否则这些数据就是彻底的丢失,此时整个机位的可用数据就只剩下10000个,这种情况就称为 redis 机位的不全。

7、Slow log

Slow log 是 Redis 用来记录查询执行时间的日志系统,slow log 保存在内存里面,读写速度非常快,因此你可以放心地使用它,不必担心因为开启 slow log 而损害Redis 的速度。

设置慢日志:设置慢日志时要开启两个参数,一个是slowlog-log-slower-than 10000,超过设定时间就记录为慢日志,设置时以微秒为单位进行记录慢日志;slowlog-max-len 128表示记录多少条慢日志保存在队列,超出后会删除最早的慢日志,是以轮询的方式写入慢日志的。相当于一个数据环,从数据环中的一侧开始写入慢数据,直到写满规定的条数,写满之后会把最初写入的慢数据覆盖掉,覆盖成新的慢日志,以此在该数据环上滚动删除。

进入 redis 的命令行窗口,使用slowlog len查看是否具有数据,可以看到在10毫秒内没有数据,将slowlog-log-slower-than 10000更改为1毫秒时,就具有了数据,使用slowlog get 就可以将所有数据返回出来,这样就可以查询出 redis 中操作较慢的地方,并把这些地方调出来发给开发商让他们进行修改提升。使用slowlog reset可以将日志清空。

 

相关文章
|
安全 关系型数据库 Java
SonarQube实战:部署(一)
基于Docker部署SonarQube及中文汉化。
829 0
|
运维 监控 应用服务中间件
LNMP详解(十五)——Nginx日志分析实战
LNMP详解(十五)——Nginx日志分析实战
269 0
|
网络安全 开发工具 数据安全/隐私保护
解决 Enter passphrase for key ‘/Users/dzm/.ssh/id_rsa‘:
解决 Enter passphrase for key ‘/Users/dzm/.ssh/id_rsa‘:
4130 0
|
Web App开发 缓存 监控
前端性能优化实战:从代码到部署的全面策略
前端性能优化实战:从代码到部署的全面策略
290 1
|
应用服务中间件 Linux nginx
在Linux中,如何统计ip访问情况?分析 nginx 访问日志?如何找出访问页面数量在前十位的ip?
在Linux中,如何统计ip访问情况?分析 nginx 访问日志?如何找出访问页面数量在前十位的ip?
|
监控 NoSQL Redis
Asynchronous AOF fsync is taking too long (disk is busy?). Writing the AOF buffer without waiting for fsync to complete, this may slow down Redis.
Asynchronous AOF fsync is taking too long (disk is busy?). Writing the AOF buffer without waiting for fsync to complete, this may slow down Redis.
|
运维 安全 物联网
等保2.0丨万方告诉你必须了解的40个问题
为了让有过保需求的客户能够更全面地了解当前的等保测评机制、以及针对性进行2021年等保合规建设,梳理了等级保护常见的40个问题,以供参考。
|
机器学习/深度学习 人工智能 安全
【Python专栏】Python的历史及背景介绍
【Python专栏】Python的历史及背景介绍
1620 6
|
数据采集 安全 API
DataphinV4.1大升级: 支持Lindorm开启高性价比数据治理,迎来“公共云半托管”云上自助新模式
Dataphin 是阿里巴巴旗下的一个智能数据建设与治理平台,旨在帮助企业构建高效、可靠、安全的数据资产。在V4.1版本升级中,Dataphin 引入了Lindorm等多项新功能,并开启公共云半托管模式,优化代码搜索,为用户提供更加高效、灵活、安全的数据管理和运营环境,提升用户体验,促进企业数据资产的建设和价值挖掘。
2062 3
DataphinV4.1大升级: 支持Lindorm开启高性价比数据治理,迎来“公共云半托管”云上自助新模式
|
SQL 测试技术 数据库
【Python】已解决:pymssql引发的MSSQLDatabaseException错误
【Python】已解决:pymssql引发的MSSQLDatabaseException错误
604 0