您的位置:首页 > 数据库 > Redis

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

2016-06-26 03:43 525 查看

持久化

快照方式

什么是快照方式?

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地址 主库端口

在从数据库配置中加入此参数,即可配置主从复制。

具体操作:

打开主数据库

从数据库配置文件中加入slave of参数

打开从数据库

成功信息

配置成功后启动显示



主端使用info replication显示



从端使用info replication显示



其他信息

进入相应的数据库后可以用info replication命令查看节点主从信息。

从库配置了主库后启动时,主库会生成快照并缓存生成快照期间的所有写命令,当快照生成完毕后,主库会把快照和缓存起来的写命令一起发给从库,从库拿到数据后进行初始化,初始化结束后,主库每次接到写的命令都会同步到从库。

当主从库断线重连后,会重新执行从库初始化过程保证数据同步。

主从数据库可以做读(从)写(主)分离提高数据库性能。

为了提高性能,可以设置从库启用持久化,主库禁用持久化,这样做也符合哨兵的机制。

哨兵

什么是哨兵?

哨兵的作用就是监视主从库

并且当主库出问题时将从库转成主库。

当崩溃的主库恢复时,将此库变为现有在的主库的从库。

哨兵之间也会相互监控运行情况。

如何配置哨兵?

建立起主从数据库

在想要建立哨兵的物理节点上单独建立一个sentinel.conf配置文件

登录此物理节点并执行命令启动哨兵:redis-sentinel 配置文件路径

成功结果显示



其他信息

配置文件内容为:sentinel monitor 哨兵名称(自定义,唯一) 主库IP地址 主库端口号 哨兵节点同意数(整数)

哨兵节点同意数:多个哨兵监控一个主库时,当主库崩溃,只有当此数以上的哨兵都检测到奔溃,才会启动哨兵的主从切换。

配置文件只需要配置主数据库信息,哨兵会自动发现从数据库。

哨兵部署参考方案

每个物理节点都部署一个哨兵,不论是主库还是从库。

设置哨兵节点同意数为:N/2+1,N为哨兵节点数量。

集群配置(水平切分)

为什么要使用集群配置?

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

如何配置水平切分?

每个集群至少需要三个主库

配置每个库的cluster-enable yes

启动每个库

使用info cluster查看当前节点是否成功打开了集群配置,cluster-enable:1表示打开成功,但此时只是打开了集群配置,并没有加入集群。

使用redis-trib.rb插件初始化集群。

其他信息

当节点加入集群后,实现数据水平切分的方式是为需要成为主库的节点分配插槽(slot)。

插槽:redis以算法将所有可能的键值换算为0-16384的整数,这分配出来的键值就是插槽。

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

客户端命令

redis-trib.rb create –replicas N 节点IP:节点端口 节点IP:节点端口 节点IP:节点端口

N:每个主数据库拥有的从数据库的个数

节点部分的组成格式:如果N为1,就是主从,N为2就是主从从。

初始化所做的事情

查看每个节点是否运行正常,是否打开了集群配置。

将每个节点加入集群。

分配插槽

分配主从数据节点。

使用cluster slots查看插槽分配情况。

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

如果插槽被分配过,需要重新移动节点,并且不影响已有数据。

此情况适用于集群运行过程中新增节点或删除节点等操作。

具体操作

配置新增库的cluster-enable yes

启动新增的每个库

使用节点命令redis-trib.rb reshard 节点IP:节点端口,节点可以是集群中任意一个节点,脚本会自动获取整个集群信息。

程序寻要你需要移动多少个插槽。输入你想移动的插槽个数。

程序寻要目的地节点ID,使用cluster nodes命令可以得到节点ID,并输入ID。

程序寻要移出插槽的节点ID,输入ID。

使用cluster slots查看插槽分配情况。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  redis