Redis的集群模式

如果redis是单机版的,出现单机故障后会导致redis无法使用,如果程序使用redis,间接导致我们的程序出错。

redis的集群模式有哪些?

1、主从复制模式

2、哨兵模式

3、集群化模式

(1)主从复制模式

一主多从模式。一个主节点,多个从节点,那么主节点可以负责读操作和写操作。从节点只能负责读操作,不能负责写操作。这样就可以把读的压力从主节点分摊到从节点,以减少主节点的压力。当主节点执行完写命令,会把数据同步到从节点。

如何搭建主从关系

原则:配从不配主。

条件:三台机器,一主二从。7001主节点   7002和7003作为从节点。这里在一台虚拟机上开三个redis服务。

修改端口号和rdb文件的名称。

启动redis服务进入客户端

查看三个redis服务的主从关系

配置7002和7003为从节点

查看redis服务的主从关系

在主节点上写入数据,在从节点查看

 主节点可以读和写。但是从节点只能读。

如果主节点宕机,从节点也不会变成主节点

当主节点重新启动之后两个从节点依旧连接这个主节点。

redis主从复制优缺点

优点:

1、实现读写分离,提高了可用性,解决了单机故障2、主从复制期间master和slave都是非阻塞方式,仍然可用。

缺点:

1、master宕机期间,需要手动切换主机,同时会有部分数据不能及时同步从服务器,造成数据不一致(需要人工手动介入)

2、slave宕机后,多个slave恢复后,大量的SYNC同步会造成master IO压力倍增(可以手动规避启动时间)

3、在线扩容较复杂。

总结:
redis主从复制提高了可用性

(2)哨兵模式

主从复制模式中切换技术的方法是:当主服务器宕机后,需要手动把一台从服务器切换为主服务器,这就需要人工干预,费时费力,还会造成一段时间内服务不可用。redis从2.8提供Sential哨兵架构解决问题。增加一 个哨兵服务,该哨兵时刻监master,如果master挂了,哨兵会在从节点中选举一位为主节点,使用的是哨兵投票机制。

修改配置文件

 启动哨兵服务

redis-sentinel sentinel.conf

当主节点宕机后,观察哨兵服务

Sentinel 哨兵优缺点

优点:

哨兵模式基于主从复制,因此主从复制的优点哨兵都具备2、哨兵具备了主从切换和故障转移,因此集群有了更高的可用性

缺点:

Redis较难支持在线扩容,在线扩容比较复杂。

总结:
sentinel 哨兵主要用来监控redis主从集群,提高了redis 主从集群的可用性。

(3)集群化模式

主从模式实现了数据的热备份,哨兵模式实现了redis的高可用。但是有一个问题,这两种模式都没有解决,这两种模式都只能有一个master节点负责写操作,在高并发的写操作场景,master节点就会成为性能瓶颈。redis的集群模式中可以实现多个节点同时提供写操作,redis集群模式采用无中心结构,每个节点都保存数据,节点之间互相连接从而知道整个集群状态。

如图所示集群模式其实就是多个主从复制的结构组合起来的,每一个主从复制结构可以看成一个节点,那么上面的Cluster集群中就有三个节点。

Redis Cluster是一种服务器 Sharding 技术,redis 3.0版本开始正式提供。
Sentinel基本已经实现了高可用,但是每台机器都存储相同内容,很浪费内存,所以Redis Cluster实现了分布式存储。每台机器节点上存储不同的内容。

Redis Cluster 数据分片原理

redis 数据分片使用的是hash slot, redis集群有16384个哈希槽,每个Key通过CRC16校验后对16384取模来决定放置哪一个槽。
当存取redis key时候,redis会根据CRC16算法得到一个结果,然后把结果和16384求余,通过这个值去对应得节点获取数据。
这个时候,应用客户端实际上只需要连接其中任意一个节点即可,然后Redis Cluster 中每个节点都保存了其他节点得槽信息。这样当存取key计算完槽之后,通过保存槽信息从配置中获取节点信息,然后再去对应得节点获取数据。

Redis Cluster 复制原理

redis-cluster集群引入了主从复制模型,一个主节点对应一个或者多个从节点,当主节点宕机的时候,就会启用从节点。当其它主节点 ping 一个主节点 A 时,如果半数以上的主节点与 A 通信超时,那么认为主节点 A 宕机了。如果主节点 A 和它的从节点 A1 都宕机了,那么该集群就无法再提供服务了。

搭建redis集群

三主三从

6001 6002 6003 为主节点

6004 6005 6006 为从节点

修改redis的配置文件redis.conf,如果是多台服务器的话只用修改加粗部分即可

设置任意ip可访问
bind 0.0.0.0 -::1   87行附近

修改端口号
port 6001     138行附近

设置后台运行
daemonize yes      309行附近

设置rdb持久化的文件名
dbfilename dump6001.rdb    481行附近

打开aof持久化
appendonly yes      1379行附近

设置aof持久化的文件目录和文件名
appendfilename "appendonly6001.aof"     1406行附近
appenddirname "appendonlydir6001"     1412行附近

开启集群(打开注释)
cluster-enabled yes    1576行附近

集群的配置文件,会自动生成(打开注释)
cluster-config-file nodes-6001.conf    1584行附近

集群的超时时间(打开注释)
cluster-node-timeout 15000   1590行

启动六个redis服务

分配哈希槽

redis-cli --cluster create --cluster-replicas 1
192.168.100.130:6001 192.168.100.130:6002
192.168.100.130:6003 192.168.100.130:6004
192.168.100.130:6005 192.168.100.130:6006

 测试

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值