数据库&&Redis&&迁移流程

前言

Redis:Remote Dictionary Server,redis是一个基于内存同时具备数据持久化能力的高性能、低时延的K/V数据库,value的数据结构可以是string、hash表、list(列表)、set(集合)、sortedset(有序集合)。
特点:

  • 单线程异步架构(单线程收包、发包、解析、执行、多路io复用接收文件事件)
  • 支持事务,操作是原子性,要么全部提交,要么全部不提交。
    **适用于:**缓存、消息队列、会话存储、TTL过去等应用场景。

Redis 知识总结

缓存场景

在这里插入图片描述

键值对场景(数据存储在内存)

在这里插入图片描述

Redis迁移原理

离线迁移原理(持久化机制)

AOF

AOF 以协议文本的方式,将所有对数据库进行过写入的命令(及其参数)记录到AOF文件,以此达到记录数据库状态的目的。
在这里插入图片描述

同步命令到AOF文件的整个过程:

  1. 命令传播:Redis将执行完的命令、命令的参数、命令的参数个数等信息发送到AOF程序中。
  2. 缓存追加:AOF程序根据接收到的命令数据,将命令转换为网络通讯协议的格式,然后将协议内容追加到服务器的AOF缓存中。
  3. 文件写入和保存:AOF缓存中的内容被写入到AOF文件末尾,如果设定的AOF保存条件被满足的话,fsync函数或者fdatasync函数会被调用,将写入的内容真正地保存到磁盘中。

三种AOF保存模式:

  • AOF_FSYNC_NO: 不保存。
  • AOF_FSYNC_EVERYSEC: 每一秒钟保存一次。
  • AOF_FSYNC_ALWAYS: 每执行一个命令保存一次。

配置AOF

vim 6386.conf
    appendonly yes
    appendfilename "appendonly.aof"
    appendfsync everysec
    dir /usr/local/src/redis-cluster/6386/

# 指定该文件,重启server生效
[root@k8s-node01 6386]# ls
6386.conf  appendonly.aof  dump.rdb

RDB

RDB 将当前进程中的数据生成快照(snapshot)以二进制的方式保存到磁盘中,保存的文件后缀是rdb。当Redis重新启动时,可以读取快照文件恢复数据。
在这里插入图片描述

在线迁移原理

PSYNC

三个重要概念:

  • Runid: 每个Redis服务器都会有一个表明自己身份的ID。在PSYNC中发送的这个ID是指之前连接的Master的ID,如果没保存这个ID,PSYNC的命令会使用“PSYNC?-1”这种形式发送给Master,表示需要全量复制。
  • Offset(复制偏移量): 在主从复制的Master和Slave双方都会各自维持一个offset,Master成功发送N个字节的命令后会将master的offset加上N,slave在接收到N个字节命令后同样会将Slave的offset增加N。Master和Salve如果状态是 一致的,那么他的offset也应该是一致的。
  • 复制积压缓冲区: 复制积压缓冲区是由Master维护的一个固定长度的FIFO队列,它的作用是缓存已经传播出去的命令。当Master进行命令传播时,不仅将命令发送给所有的Slave,还会将命令写入到复制积压缓冲区里面。

同步流程:

  1. 发送 psync 命令(spync? -1);
  2. 主节点根据命令返回 FULLRESYNC;
  3. 从主节点记录主节点 ID 和 offset;
  4. 主节点 bgsave 并保存 RDB 到本地;
  5. 主节点发送 RDB 文件到 从节点;
  6. 从节点收到 RDB 文件并加载到内存中;
  7. 主节点在节点接受数据的期间,将新数据保存到“复制客户端缓冲区”,当从节点加载 RDB 完毕,再发送过去。(如果从节点花费时间过长,将导致缓冲区溢出,最后全量同步失败)

在这里插入图片描述
bgsave的使用(手动触发):

[root@k8s-node01 6386]# /usr/local/src/redis-5.0.8/src/redis-cli  -c -p 6386
127.0.0.1:6386> BGSAVE
Background saving started
127.0.0.1:6386> quit
[root@k8s-node01 6386]# ls
6386.conf  dump.rdb

save的使用(手动触发)(不推荐):

[root@k8s-node01 6386]# /usr/local/src/redis-5.0.8/src/redis-cli  -c -p 6386
127.0.0.1:6386> set dfq duanfuqiang1
OK
127.0.0.1:6386> get dfq
"duanfuqiang1"
127.0.0.1:6386> save
OK
127.0.0.1:6386> quit
[root@k8s-node01 6386]# ls
6386.conf  dump.rdb
[root@k8s-node01 6386]# cat dump.rdb 
REDIS0009	redis-ver5.0.8

save的使用(自动触发)(不推荐):

vim 6386.conf
    save 900 1
    save 300 10
    save 60 10000
    dbfilename dump.rdb
    appendfsync everysec
    dir /usr/local/src/redis-cluster/6386/

SCAN

Redis的部分在线全量同步工具使用SCAN原理,SCAN可以做到遍历Redis中的数据,但是不能做到对增量数据的处理,所以只能用于全量同步。
在这里插入图片描述

迁移(回退)流程

阶段一:准备数据同步
在这里插入图片描述
阶段二:业务停止写入
在这里插入图片描述
阶段三:停止迁移任务
在这里插入图片描述
阶段四:切换业务访问
在这里插入图片描述
回退阶段一:业务停止写入
在这里插入图片描述

回退阶段二:停止数据同步
在这里插入图片描述
回退阶段三:业务回切
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值