Redis 集群模式下的数据分片机制

2020年9月20日 0 条评论 891 次阅读 0 人点赞

在博客中,我介绍了 Redis 哨兵机制的搭建和Redis 主从读写分离的优势,此次分享的是Redis 数据分片集群部署

在看这篇文章之前,如果你对读写分离与哨兵机制还不够清楚的情况下,请优先查阅我前两篇文章。

我们知道 Redis 主从读写分离它解决了在高并发场景下读数据的瓶颈,而哨兵机制解决了在主从读写分离场景下,由于主节点宕机造成不可恢复,从而立即自动选举一个从节点主动接管主节点的场景。

但是他们依然没有解决大量数据积压的问题。我们可能听过Mysql在存储大数据时的分库分表策略,其实Redis也拥有这一机制。

因此下面的内容就是向大分享这样的一个实验。

我的实验环境是 Cenots 7、Redis 6.06 版本

第一步:安装依赖

第二步:准备redis节点

由于 Redis 集群最低要求为三主三从,即 6 个节点,因此我在路径:/mnt/下创建了6个目录如下图所示

每个目录中分别存储着各自 redis.conf 配置文件 ,在实验中我将会开启Redis 7000、7001、7002、7003、7004、7005端口。

我选取目录名为 7000 下的配置文件内容如下:

其它目录端口一样,只是进行了一次全局替换将配置文件中的7000替换为7001、7002....罢了。

抽取上面的配置,我主要只是修改了如下的配置信息:

第三步:启动这 6 个 redis 节点

第四步:执行命令,启动集群模式

启动集群模式需要使用 redis-cli 命令,如下所示

其中参数 --cluster-replicas 表示集群主节点需要多少个从节点,由于我们这里是三主三从的形式,因此参数的值为 1 ,代表每个主节点主需要一个从节点即可。

执行完毕后我们就能看到如下的界面

如上图所示,左边的M代表主节点,S代表从节点,且每个主节点时命令自动为你规划的,我们可以通过上图标注的红线看到,每一个主节点都有各自分配的从节点。

并且图中的 slots:[0-5460] 、slots:[5461-10922]、slots:[10923-16383] 代表着主节点各自分配到的 hash 槽。

这里请注意了,有且仅有主节点才能被分配到 hash 槽,redis 集群下,hash槽一共为16384个,它会近乎平均的分配给每个主节点。(注:从节点是没有 hash 槽的)

当客户端向 Redis 写入一条数据时,该命令的 key 会经过 hash 计算,且计算的结果永远落在0-16384 这个区间内。例如一条 Redis 命令计算出来的结果为 5467 ,那么它的记录将会存储在第二台 Master 节点中,并且同步给它的从节点。有点类似于哈希表算法的感觉。

因此,我们只需要在命令行中输入 yes 使用它默认给我们分配的集群模式即可。

执行完 yes 后,我们能看到如下界面就代表集群搭建成功了

在此大功告成,我们来测试一下~

实验(一)、往 slave 从节点写入数据会发生什么

我们随便连接一个节点,这里我选取的是 slave 从节点,端口号为7003,并向从节点写入一条数据。

我们可以知道 slave 从节点不允许被写入数据,但是它这条命令被重定向到自己的主节点7001上了。因此该条数据写入成功。

实验(二)、切换节点再次查看是否有上面设置的这条数据

此时,我登录 7002端口的节点 (注:7002 的从节点是 7005,而我刚才是往 7003 中写的数据,并且该条数据被重定向到 7001上执行了) ,此时我执行这条 get name 命令,它又重定向到 7001中。如下图所示:

实现(三)、杀死 7000 端口主节点

我找到了7000所在的端口,并 kill 了这个进程,想测试它是否能升级自己的 slave 节点为主节点。(注:我们可以在redis 客户端模式下使用命令:cluster nodes 来查看节点信息)

没杀死7000端口的进程前,7000端口为主节点,7003为从节点。如下图所示:

当我杀死7000端口的主节点后,7003自动转换为主节点,如下图所示:

当我再次在目录名为 7000 下执行以下命令,重启曾今的主节点

此时曾今的 7000端口主节点已经沦为 7003 的从节点了,如下图所示:

当我们如果看到这一幕就代表着 Redis 集群确实已经搭建好了。并且确实拥有着高可用的特性。

总结:当客户端执行的一条命令,它会进行自动数据分片,通过 hash 计算散落在集群中的某个主从节点下,当查询数据时也是如此,通过hash计算,去某个主从节点下获取数据。

在集群模式下,我们并不需要手动配置哨兵,他也能做到自动的心跳监测。当主节点宕机,当仁不让的将从节点升级为新的注节点。然而老的主节点修复重启后,将会沦为从节点,为我们的应用系统保驾护航。

兰陵美酒郁金香

大道至简 Simplicity is the ultimate form of sophistication.

文章评论(0)

你必须 登录 才能发表评论