高并发redis - cluster

2020-04-01  本文已影响0人  coder爱唱歌

之前讲解了redis主从读写分离+sentinel架构,保证了slave节点能横向扩展提高qps,也保证了
99.99%的高可用性。但是也存在如下一些问题:

所以做好能够突破单master的瓶颈,搭建多个master,承载海量数据,一个master对几个slave,这样就能横向扩展。

reids官网提供了另一种集群方式,就是redis cluster,能满足上面的需求。


redis如何通过master横向扩容支撑1T+数据量.png

redis cluster介绍

redis cluster特性

所以到这里已经有单机redis,主从复制架构,cluster架构,面对这么多架构,我们如何做选择?

下面就从一下几个方面介绍redis-cluster

多master下,不同key分布在不同master的各种算法原理

由于有多个master,能写的地方不止一个,所以,每有一个写操作过来,都需要选择一个master去写,
所以需要有一个,算法,把每个key较为均匀的分配到各个master节点上,这样才能保证发挥每台机器的性能。
算法从以前到现在经历的以下几个版本。

最老土的hash算法以及弊端.png 一致性hash算法的讲解和优点.png
一致性hash算法的虚拟节点实现负载均衡.png redis cluster hash slot算法.png

2、实验:使用docker搭建一套6节点,3主3从的redis-cluster集群(带redis配置和docker启动脚本)

redis.conf

port 7001
requirepass "123456"
dir "/data"
logfile "redis.log"
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 192.168.5.10
cluster-announce-port 7001
cluster-announce-bus-port 17001
masterauth "123456"
appendonly yes

docker启动一个redis脚本

docker run -d --name redis7001 -p 7001:7001 -p 17001:17001 -v /data/redis-cluster/7001:/data redis redis-server /data/redis.conf

创建集群脚本

redis-cli -c -h  192.168.5.10 -p 7001 -a 123456 --cluster create 192.168.5.10:7001 192.168.5.10:7002 192.168.5.11:7003 192.168.5.11:7004 192.168.5.12:7005 192.168.5.12:7006 --cluster-replicas 1

步骤:

redis cluster hash slot算法.png

3、cluster横向扩展以及冗余节点

redis_cluster通过master水平扩容来支撑更高的吞吐量+海量数据

冗余slave

4、redis-cluster的核心原理分析:gossip通信,jedis smart定位,主备切换

redis自身是有一些元数据的,比如 hashslot 对应每个master节点的信息,master和slave的对应关系,故障信息等。
(1):基本通信原理

(2)面向集群的jedis内部实现原理

(3)高可用性和主备切换原理

5、总结
redis写了好几篇,主要是单机redis,主从redis,哨兵,然后加上cluster,大家可以根据自己的
项目灵活选择哪种架构方式,但是注意线上redis一定要做好数据安全,做好数据备份。然后可以使用
redis-benchmark 工具对redis进行压测,分析当前性能是否够用。

上一篇下一篇

猜你喜欢

热点阅读