目录:
Redis从入门到精通(一):缓存
Redis从入门到精通(二):分布式锁以及缓存相关问题
Redis从入门到精通(三):Redis持久化算法以及内存淘汰策略
Redis从入门到精通(四):Redis常用数据结构以及指令
Redis从入门到精通(五):Redis6整合SpringBoot2.x+Mybatis+SpringCache
Redis从入门到精通(六):Redis高可用原理
Redis从入门到精通(七):跳跃表的简介与实现
Redis从入门到精通(八):Redis新特性
高可用
什么是高可用?
我们在第一章就提到了CAP原则,其中的A就是可用性,高可用自然就是high availability.
一般来说,高可用是指某个或者某些节点挂掉后,整个程序依然可以正常运行。也就是我们需要对系统进行集群处理,当然,实现高可用的途径不只是集群,比如这章会提到许多方法共同去保证一个系统的高可用。
Redis高可用
主从复制与读写分离
主从架构是高可用基础,以后的集群也往往是根据主从原理构建的。当然现在提出了无中心节点的架构,其实也是主从原理的延伸。
看过我之前翻译的谷歌论文:GFS的都清楚,主节点承担主要的写操作,读操作通过负载均衡方法选择主从节点。且从节点定期会复制主节点数据,这样一来,主节点宕机后,从节点依然可以工作。此时从节点可以开启写操作。
当然了,从节点会有很多,并非只有1个,这时候我们就会通过选举机制选择新的主节点。
主从复制方法有两种:
- 全量复制
- 在master开启后,会在后台生成rdb文件
- 从节点连接时,会全量复制rdb文件
- 从节点读取RDB文件
- 增量复制
- 全量复制结束后,主节点收到的数据会以增量的形式发给从节点,以达到同步效果(根据同步策略)。
同步特点:
- 非阻塞。同步期间,可以进行新命令的操作
- 从节点不主动对数据做删除处理,只有等到主节点key过期后,主节点会发送命令到从节点,从节点删除key
- 从节点间也可以收到其他从节点的信息
加速同步:有时候,在磁盘速度比较慢的情况下,我们可以开启配置文件,输入配置:repl-diskless-sync yes
,这种方法不会讲RDB文件写入磁盘,而是在内存中直接向网络传送,不会经过磁盘。
加入某个节点挂了重连,之前同步过的数据不用再同步,使用PSYNC
命令就可以进行未同步的命令复制。
Redis主从架构实战
- 新建目录
mkdir -p /data/redis/master/data mkdir -p /data/redis/slave1/data mkdir -p /data/redis/slave2/data
- 对配置文件进行更改,我们首先修改主节点文件
vim /data/redis/master/data/redis.conf
再对从节点配置文件进行修改。bind 0.0.0.0 daemonize yes requirepass 123456 port 9000 #如果是本机部署多redis,必须修改端口号,否则端口只能绑定一个服务 logfile "/usr/local/redis/log/redis_master.log" dbfilename test.rdb dir /usr/local/redis/data save 10 1 rdbcompression yes rdbchecksum yes appendonly yes appendfilename "appendonly_master.aof" appendfsync everysec no-appendfsync-on-rewrite no auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb aof-load-truncated yes masterauth 123456
bind 0.0.0.0 daemonize yes requirepass 123456 port 9001 logfile "/usr/local/redis/log/redis_slave1.log" dbfilename test.rdb dir /usr/local/redis/data save 10 1 rdbcompression yes rdbchecksum yes appendonly yes appendfilename "appendonly_master.aof" appendfsync everysec no-appendf