文本介绍基于 docker 搭建 redis-cluster 集群环境,准备前提是安装了 docker 的 Linux 环境,这里以 centos 为背景。
介绍正文内容之前,有必要先梳理下 redis 的集中集群方案,从早到晚说来,redis 集群方案演进了三种方案,最开始是大家熟知的主从复制的集群,到哨兵模式,到最新的 redis-cluster。
具体区别和优缺点,网上的资料很多,大家自行查询。需要说明的是,redis-cluster 需要 redis3.0 以上版本。
准备工作
1、为了能正常走完所有步骤,首先执行 docker -v
命令,确认已经正常安装了 docker。
2、使用 docker 是因为能快速部署 redis 实例,那么现在我们需要一个 redis3.0 以上的版本,本文使用最新版本,那么你可以执行如下命令:docker pull redis
。
正常获取完一个 redis 官方镜像后,执行 docker images
命令,你应该看到如下界面。
如果顺利,准备工作就告一段落。
创建 redis 实例
如果你对 docker 略知一二,那应该没什么问题。如果你不懂 docker 为何物也不碍事,因为我也不懂,你要做的是按顺序执行好每一个命令。
完成准备操作后,在完成 redis 集群构建之前,我们需要 3 个 redis 实例,假设我们给取名为 r-node1、r-node2 和 r-node3。同时,为了方便起见,我们将每个实例暴露的端口号定义为从 6381 开始。
那么,你需要一次执行如下命令(不强制按顺序):
docker create --name r-node1 --net host -v /data/redis-data/node1:/data redis:latest --cluster-enabled yes --cluster-config-file node-1.conf --port 6379
docker create --name r-node2 --net host -v /data/redis-data/node2:/data redis:latest --cluster-enabled yes --cluster-config-file node-2.conf --port 6380
docker create --name r-node3 --net host -v /data/redis-data/node3:/data redis:latest --cluster-enabled yes --cluster-config-file node-3.conf --port 6381
每一行命令执行完毕,都能看到一串随机字符串,你可以忽略。然后通过 docker ps -a
命令,你能看到如下三个容器。
当我们用命令 docker start r-node1 r-node2 r-node3 启动容器后,就相当于启动了三个 redis 实例。这个时候如果再次执行命令 docker ps -a
,会看到容器状态发生了变化。
构建集群
有了 redis 实例后,是时候搭建我们的集群了。
执行命令 docker exec -it r-node1 /bin/bash
这个时候你会进入到容器 r-node1 中。请注意,执行完该命令,你的 pwd 已经发生了变化,如果你要退出请执行 exit
,执行前述命令可以再次进入。
接下来就是见证奇迹的时候,请执行命令:
redis-cli --cluster create 10.0.4.6:6379 10.0.4.6:6380 10.0.4.6:6381 --cluster-replicas 0
需要说明的是,10.0.4.6 应该是你的物理机 IP,如果你是在 widows 系统下,可能会出现一些不可预知的情况,如果是 Linux 系统,那么请放心根据 ifconfig 命令找到你的物理 IP,替换即可。
如果不出意外,执行完上述命令,你需要输入 yes,才能真正完成 redis 集群的搭建,然后你会看到如下提示。
All 16384 slots covered. 如果能看到这个提示,说明你的 redis 集群已经搭建完成,可以工作了。了解 redis 的你,是不是对 16384 这个数字很敏感?你细品~
验证集群
我们使用 redis-cli 来执行键值对的操作,你可以执行命令 redis-cli -c
来连接集群。
接下来就可用过 set key value 的方式来设置缓存,比如:从 k1:1 , k2:2 …… 开始赋值,你会看到如下情况:
聪明的你肯定以及注意到了,在赋值的过程中,槽位发生了切换。命令提示符前端口号的不同也在告诉我们正在不同的实例下。
当我们在 6380 端口对应的实例下,尝试获取所有的 key 时,也只是拿到了该实例下的 key,但如果我们在 该实例下尝试查询 k2 会发生什么情况呢?
我这边会自动切换到 6379 实例下,你的呢?请自行尝试。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于