redis集群篇
Posted code-star
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了redis集群篇相关的知识,希望对你有一定的参考价值。
redis集群的搭建
1.为什么要搭建集群(解决单点问题)
通过对redis的简单了解,我们知道redis已经有两种持久化方案rdb和aof。在redis出现宕机后,可能会出现部分的数据损失,但是数据还是可以恢复的。但是如果服务器的硬盘出现故障,由于所有的数据都在这一台机器上,就可能会造成很大的损失。
2.redis的主从复制(单点问题解决方案)
复制的目的就是将redis数据库复制多个副本部署在多个机器上,防止其中一台机器硬盘出现损坏而造成的数据损失。复制功能可以实现当其中一台服务器中的数据出现更新后,能够同步到其它的服务器,实现数据的一致性。主从复制就是我们常见的master/slave模式,在这种模式下,一般slave节点只对外提供读服务,而写服务会落到master节点。master节点可以有多个slave节点,master节点会定期同步数据到slave节点。
3.redis中如何搭建master/slave
在redis中搭建master/slave模式很简单,只需要修改slave节点的redis.conf配置文件,而master节点的配置不需要做修改。在每个slave节点的redis.conf配置文件中添加slaveof masterip masterport,并且注释掉bindip(允许所有节点访问),其中masterip就是master的ip,msterport就是master对外提供的端口号。修改配置完成后,依次启动master和slave节点,通过redis-cli连接,使用命令info replication可以查看连接信息。
4.主从复制的原理
4.1全量复制
全量复制发生在slave节点的初始化阶段。首先是连接进来的slave节点发送SYNG的命令到master节点,master收到请求,执行bgsave命令,生成快照发送到slave节点,同时master节点也会在缓存记录在此期间的写命令,并在快照发送完成后,将缓存也发送过去。而slave节点在收到快照和缓存后,会载入数据。完成上述的操作后,slave节点便可以对外部提供服务了。
master/slave的复制采用的是乐观复制,也就是说可以容忍在一段时间内master/slave节点的数据是不同的,但是数据最终会实现同步。具体的说,就是master接收客户端的写操作,在操作完成之后,然后将数据同步给slave节点。这一特定保证了在master/slave模式下,master的性能不受到影响。
由于master节点写完之后才会将数据同步给slave节点,在这期间如果slave节点和master节点之间出现网络问题,会导致数据同步失败。所以为了保证数据实现同步,必须保证在master将数据同步成功给了多少个slave节点之后,才能对外提供写服务。而这个可以在redis.conf中配置,min-slaves-to-write 3 表示只有当3个或以上的节点连接到master节点之后,master节点才是可写的,min-slaves-max-lag 10 表示master允许slave失去的最长连接时间,如果在10秒内没收到slave的响应,则表示该slave已经断开了连接。
4.2增量复制(redis的断点续传)
增量复制的功能是从redis2.8开始的,也就是说在同步数据的过程中,如果网络断开了,重连后下次同步数据会从上一次的位置接着同步,不会重新开始。这个在redis中的实现就是会在mster节点的内存中创建一个backlog,master和slave都会保存一个replica offset还有一个master id,如果网络断掉了,会从上一次的replica接着同步。如果没有找到replica,则会执行全量同步。
4.3无硬盘复制
前面说过,redis复制的工作原理是基于rdb快照的持久化实现的。也就是说master节点在后台保存rdb快照,并将快照传输到slave,slave通过rdb快照载入数据。但是这种方式会存在两个问题。
5.redis的哨兵机制
5.1哨兵概述:前面已经明确了reids的master/slave模式,这种模式可以实现redis的读写分离和主从复制,但是当master节点挂掉后,就需要一种机制去实现master的选举,如实哨兵机制就出现了。
5.2什么是哨兵:哨兵的存在有两个作用,第一是监控master和slave节点是否正常运行,第二是当master节点出现故障之后,重新从slave节点中选举出一个master节点。
6.redis-cluster
以上是关于redis集群篇的主要内容,如果未能解决你的问题,请参考以下文章
Redis集群专题「集群技术三部曲」分析一下相关的Redis集群模式下的脑裂问题(问题篇)