Redis有两种方式进行持久化
一、RDB方式持久化
这种方式保存的是数据。
执行方法:
- 手动:save(已废弃)/bgsave
- 自动:在配置文件中 save m n
配置文件常用参数
- RDB文件保存路径:配置文件中的dir
- RDB文件保存文件名:配置文件中dbfilename
- RDB文件是否压缩:配置文件中rdbcompression
二、AOF方式持久化
这种方式保存的是写命令,更主流。
默认关闭,要开启,配置文件中:appendonly yes
AOF重写:将当前数据转化为写命令,与旧AOF文件无关
- 手动重写:bgrewriteaof
- 自动重写:配置文件中:
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
主从复制
哨兵和集群都是在复制基础上实现高可用的。主从复制完全在从节点发起,不需要我们在主节点做任何事情。
建立主从关系的途径:除配置文件外,还可以在从节点通过客户端执行命令:slaveof <masterip> <masterport>
从节点配置文件中的masterauth用于验证主节点密码,初学练习先去掉密码。
主从复制包括了连接建立阶段、数据同步阶段、命令传播阶段。
-
其中数据同步阶段,有全量复制和部分复制两种数据同步方式;命令传播阶段,主从节点之间有PING和REPLCONF ACK命令互相进行心跳检测。
-
当主从offset差距过大,超过复制积压缓冲区,只能进行全量复制。更改复制积压缓冲区大小,配置
repl-backlog-size
哨兵
哨兵的核心功能是主节点的自动故障转移
架构:
- 不同的哨兵节点应部署在不同的物理机上
- 学习演示时,关掉redis密码
- 强制故障转移:
sentinel failover mymaster
该命令可以强制对mymaster执行故障转移,即便当前的主节点运行完好;例如,如果当前主节点所在机器即将报废,便可以提前通过failover命令进行故障转移。 - 主观下线:哨兵自己认为下线;客观下线:哨兵咨询其他哨兵,认为下线达到一定数量,则为客观下线。客观下线真针对主节点有效。
集群
-
集群是多个节点的master数据共享,可以横向分担单个节点的master写入压力。
-
集群由多个哨兵模式组成。但实际部署时,并没有配置哨兵,也能实现故障的自动转移。原理是各个master代理了sentinel的工作,由master选举下线的master中的一个slave变成新的master继续工作。
-
建议不管项目大小,部署的时候都做集群,做好充分拓展准备。
-
Redis 5.0版本之后取消了Ruby脚本,集成到了redis-cli里,5.0之后搭建过程。注意构建集群用公网IP,阿里云的+10000的端口也要打开。要配置密码,不然会被攻击,键变成backup1, backup2。
主从都要设置
requirepass
,从要设置masterauth
。构建集群时加上-a参数指定密码。用阿里云搭建,外网访问不到公网IP解决方法:编辑
nodes-端口.conf
文件,将内网ip替换成公网ip -
带Ruby脚本的5.0之前搭建过程
-
撤销集群:shutdown节点,删除集群配置文件和数据文件,只保留
redis-端口.conf
文件。 -
删除节点:从节点可以直接删,主节点需要把槽都清空,再删。
示例:
redis-cli --cluster del-node 127.0.0.1:6381 26976c7da741133edf0648da207ce40336bcbcba
,127.0.0.1:6379> cluster flushslots