Redis学习笔记(4)-持久化、主从配置、哨兵、集群配置

Fork me on Gitee

HDIS-Framework

fork star

HDIS-Framework是一个基于SpringBoot、Kubernetes、阿里云服务,编写的一个用于支撑微服务的极速开发框架。

其文档详尽,Demo全面,设计合理,开箱即用,节省开发时间,提升开发效率。

配套的docker、Kubernetes教程已踩过各种坑,让你的微服务无障碍的顺畅运行起来。

HDIS与Kubernetes或SpringCloud配合使用,能达到最佳效果。

持久化


快照方式

什么是快照方式?

Redis会根据配置规则将内存中的数据复制一份,存储在硬盘上。

如何使用快照方式?

方式一:根据配置进行快照

配置说明:save S N
S:seconds 秒数
N:number 键个数
例子:save 60 20 当60秒内改动的键数大于20时,进行快照。
可以配置多行save配置,多个配置可同时生效。
配置执行快照采用的是异步策略,在执行的过程中不会阻塞客户端请求。

方式二:根据命令执行快照

客户端命令:save和besave
当输入这两个命令时,redis会执行快照。
区别:save配置会阻塞所有客户端请求,besave不会阻塞,所以生产环境还是得用besave。

客户端命令:lastsave
当输入lastsave命令时,会返回最近一次执行快照的时间戳,用于查看快照是否执行完成。

客户端命令:flushall
当执行flushall命令时,redis会清空所有数据,但是清空前会执行快照。
但是,只有存在save配置的情况下才会执行快照。

方式三:执行主从复制时

主从复制初始化时,主数据库会执行一次快照并向从数据库传递当前的快照文件。

其他信息

  • 存储的位置默认为Redis当前工作目录的dump.rdb文件中。
  • 可以通过配置dir(路径)与dbfilename(文件名)两个参数来配置快照的文件的路径与文件名。
  • 一个数据库只有一份rdb文件,当在快照执行过程中是不会修改RDB文件的,当快照结束后,才会替换老的rdb文件,也就是说,任何时候rdb文件都是完整的。
  • 数据恢复时发生在redis重新启动时。

命令记录方式

什么是命令记录方式?

  • 命令记录方式是将会改变Redis数据的命令实时记录到硬盘中。
  • 好处是最大限度的降低redis意外终止导致的数据损失。
  • 坏处是此种方式会降低redis性能。

如何使用命令记录方式?

方式:根据配置开启记录

配置参数:appendonly yes
配置后,启动redis,redis就会打开命令记录方式实现持久化功能。
配置参数:appendfsync everysec
配置后,redis才会每秒将命令写入到文件中,否则将由于系统限制,每30秒执行一次写入。

其他信息

  • 默认Redis没有开启此方式。
  • 存储的位置默认为Redis当前工作目录的appendonly .aof文件中。
  • 可以通过配置dir(路径)与appendfilename(文件名)两个参数来配置快照的文件的路径与文件名。
  • Redis会自动优化aof文件(优化冗余命令),可以通过配置参数配置优化策略: auto-aof-rewrite-percentage
    100(当前AOF文件大小超过上一次重写的AOF文件大小的百分之多少才会重写) auto-aof-rewrite-min-size
    64mb(允许重写的最小AOF文件大小)。
  • 也可以通过BGREWRITEAOF命令手动执行重写。
  • 数据恢复时发生在redis重新启动时。

主从复制


主从复制介绍

  • 主数据库:能读能写,可有多个从库。
  • 从数据库:默认配置只能读不能写,只能有一个主库。

如何配置主从复制?

配置参数:slaveof 主库IP地址 主库端口
在从数据库配置中加入此参数,即可配置主从复制。
具体操作:

  1. 打开主数据库
  2. 从数据库配置文件中加入slave of参数
  3. 打开从数据库

成功信息

配置成功后启动显示

主端使用info replication显示

从端使用info replication显示

其他信息

  • 进入相应的数据库后可以用info replication命令查看节点主从信息。
  • 从库配置了主库后启动时,主库会生成快照并缓存生成快照期间的所有写命令,当快照生成完毕后,主库会把快照和缓存起来的写命令一起发给从库,从库拿到数据后进行初始化,初始化结束后,主库每次接到写的命令都会同步到从库。
  • 当主从库断线重连后,会重新执行从库初始化过程保证数据同步。
  • 主从数据库可以做读(从)写(主)分离提高数据库性能。
  • 为了提高性能,可以设置从库启用持久化,主库禁用持久化,这样做也符合哨兵的机制。

哨兵

什么是哨兵?

  • 哨兵的作用就是监视主从库
  • 并且当主库出问题时将从库转成主库。
  • 当崩溃的主库恢复时,将此库变为现有在的主库的从库。
  • 哨兵之间也会相互监控运行情况。

如何配置哨兵?

  1. 建立起主从数据库
  2. 在想要建立哨兵的物理节点上单独建立一个sentinel.conf配置文件
  3. 登录此物理节点并执行命令启动哨兵:redis-sentinel 配置文件路径

成功结果显示

其他信息

  • 配置文件内容为:sentinel monitor 哨兵名称(自定义,唯一) 主库IP地址 主库端口号 哨兵节点同意数(整数)
  • 哨兵节点同意数:多个哨兵监控一个主库时,当主库崩溃,只有当此数以上的哨兵都检测到奔溃,才会启动哨兵的主从切换。
  • 配置文件只需要配置主数据库信息,哨兵会自动发现从数据库。

哨兵部署参考方案

  • 每个物理节点都部署一个哨兵,不论是主库还是从库。
  • 设置哨兵节点同意数为:N/2+1,N为哨兵节点数量。

集群配置(水平切分)


为什么要使用集群配置?

当使用主从时,每个库都有着全部的数据,这样的话,最大的存储空间受限于最小内存的机器,因此,将数据水平的放在不同的物理节点上,可以解决以上问题。

如何配置水平切分?

  1. 每个集群至少需要三个主库
  2. 配置每个库的cluster-enable yes
  3. 启动每个库
  4. 使用info cluster查看当前节点是否成功打开了集群配置,cluster-enable:1表示打开成功,但此时只是打开了集群配置,并没有加入集群。
  5. 使用redis-trib.rb插件初始化集群。

其他信息

  • 当节点加入集群后,实现数据水平切分的方式是为需要成为主库的节点分配插槽(slot)。
  • 插槽:redis以算法将所有可能的键值换算为0-16384的整数,这分配出来的键值就是插槽。

如何使用redis-trib.rb插件初始化?

客户端命令

redis-trib.rb create --replicas N 节点IP:节点端口 节点IP:节点端口 节点IP:节点端口
N:每个主数据库拥有的从数据库的个数
节点部分的组成格式:如果N为1,就是主从,N为2就是主从从。

初始化所做的事情

  1. 查看每个节点是否运行正常,是否打开了集群配置。
  2. 将每个节点加入集群。
  3. 分配插槽
  4. 分配主从数据节点。
  5. 使用cluster slots查看插槽分配情况。

如何使用redis-trib.rb插件重新分配插槽?

如果插槽被分配过,需要重新移动节点,并且不影响已有数据。
此情况适用于集群运行过程中新增节点或删除节点等操作。

具体操作

  1. 配置新增库的cluster-enable yes
  2. 启动新增的每个库
  3. 使用节点命令redis-trib.rb reshard 节点IP:节点端口,节点可以是集群中任意一个节点,脚本会自动获取整个集群信息。
  4. 程序寻要你需要移动多少个插槽。输入你想移动的插槽个数。
  5. 程序寻要目的地节点ID,使用cluster nodes命令可以得到节点ID,并输入ID。
  6. 程序寻要移出插槽的节点ID,输入ID。
  7. 使用cluster slots查看插槽分配情况。
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值