• Redis的管理


    一、redis持久化

    redis是内存数据库,一切的数据都是存储到内存中的,我们知道,当服务器意外关机,那么在内存中的数据都将丢失,但是redis为我们提供持久化功能,这样就能把数据保存到硬盘上。redis提供两种持久化方式,分别是RDB和AOF方式,各有特点。下面进行介绍这两种方式。

    1、RDB方式

    默认情况下,redis是开启RDB方式进行持久化的,主要由配置文件中几个参数指定:

    save 900 1                      # after 900 sec (15 min) if at least 1 key changed
    save 300 10                     # after 300 sec (5 min) if at least 10 keys changed
    save 60 10000                   # after 60 sec if at least 10000 keys changed
    stop-writes-on-bgsave-error yes
    rdbcompression yes
    rdbchecksum yes
    dbfilename dump.rdb             # The filename where to dump the DB
    dir /var/redis/6379             # the data file's directory.

    save参数指定了快照条件,可以存在多个条件,条件之间是或关系,如上所说:save 900 1 的意思是在15分钟内有至少一个key被更改就进行快照。

    快照执行的原理:

    • redis使用fork函数复制一份当前进程(父进程)的副本(子进程)
    • 父进程继续处理任务,而子进程开始将内存中的数据写入硬盘中的临时文件
    • 当子进程写入完所有数据后会用该临时文件替换旧的RDB文件,到此一次快照完成

    在执行fork函数时,操作系统使用写时复制策略,即fork函数发生的一刻父进程和子进程共享同一内存数据,当父进程需要修改某片数据时,会将该片数据复制一份以保证子进程不受影响,所以新的RDB数据文件是执行fork一刻的内存数据。通过上述过程可以知道,redis在快照过程中不会让数据改变,只有快照结束后才会将旧的文件替成新文件,也就是任何时候RDB文件都是完整的,故我们对redis数据备份可以采用定时备份RDB文件即可。

    除了自动快照,还可以手工发送save和bgsave命令让redis执行快照,两个命令的区别在于,前者是由主进程进行快照操作,会阻塞其他请求,而后者是通过子进程执行快照。

    redis启动后,会读取RDB快照文件,将数据从硬盘载入到内存。根据数据量、结构和服务器性能的不同,这个加载时间也不相同。

    通过RDB方式实现持久化,一旦redis异常退出,就会丢失最后一次快照后修改的数据,如果不能承受任何数据的丢失,那么可以尝试用AOF方式。

    2、AOF方式

    默认情况下,AOF方式不是没有启用的,可以到配置文件中添加appendonly参数进行开启:

    appendonly yes                        #开启AOF
    appendfilename "appendonly.aof"
    appendfsync everysec
    auto-aof-rewrite-percentage 100       #当目前aof文件大小超过上一次重写时aof文件大小百分之多少时进行重写,如果之前没有重写过,则以启动大小为依据
    auto-aof-rewrite-min-size 64mb        #限制容许重写的最小aof文件大小
    

    其中appendfsync参数有三个值:

    • everysec:默认值,每秒执行一次同步到硬盘。
    • always:每次数据改变就执行一次同步
    • no:不同步,完全由OS缓存决定同步

    redis允许aof和rdb共存,此时重启redis会读取aof文件到内存中恢复数据。

    二、redis复制

    通过AOF和RDB持久化可以做到防止数据丢失,但是对于一台服务器,如果硬盘坏了,数据还是会丢失。为了避免单点故障,可以把一台服务器数据复制到另外几台服务器上,即使有一台故障了,其他还可以提供服务。redis提供复制功能可以自动实现数据的同步。

    1、复制原理

    了解复制原理对运维很有帮助。

    当一个从数据库启动后,会主动主数据库发送sync命令,主接收到sync命令后开始在后台保存快照(RDB持久化过程),并将快照过程中的命令缓存起来。当快照完成后,会把快照和缓存的命令发送给从数据库。从数据库接收到后,载入快照和执行缓存命令。当主从数据库断开连接后,会从新执行上述步骤,不支持断点续传。

    2、配置复制

    环境说明:
              IP                                   功能
         192.168.245.129                          master
         192.168.245.131                          slave

    在redis中配置主从复制很简单,只需要在从数据库配置文件中添加slaveof <masterip> <masterport>参数即可实现,主数据库无需任何配置。
    在192.168.245.131的配置文件中添加如下:

    slaveof 192.168.245.129 6379

    然后重启从服务器(必须要重启,否则参数没有效果

    /etc/init.d/redis_6379 stop
    /etc/init.d/redis_6379 start

    在主数据库执行个命令:

    127.0.0.1:6379> set foo testmaster
    OK

    从数据库查看结果:

    127.0.0.1:6379> get foo
    "testmaster"

    3、其他说明

    redis的从数据库还可以作为主数据库。  

    redis比较耗时的操作是数据的持久化,为了提高性能,我们可以统一在从库进行数据的持久化,也能保证数据安全。具体操作如下:

    • 通过复制建立一个或几个从数据库,并开启持久化功能
    • 关闭主数据库的持久化
    • 如果主数据库故障,则在从库执行slaveof no one命令将从数据库提升为主数据库
    • 如果原主数据库恢复了,可以再次设置成新主数据库的从数据库
  • 相关阅读:
    kubectl命令行工具
    资源编排(YAML)
    vscode自定义vue模板代码
    vscode10个必装的插件
    【转】Android系统开篇
    Android应用资源分析(老罗链接整理)
    APK优化工具zipalign的详细介绍和使用
    Android中APK签名工具之jarsigner和apksigner详解
    Android反编译和二次打包
    python修饰器(装饰器)以及wraps
  • 原文地址:https://www.cnblogs.com/mysql-dba/p/5027152.html
Copyright © 2020-2023  润新知