Docker容器搭建Redis集群环境,详细的配置解读
前言:之所以说纯研发人员可以忽略本文,是因为,研发环境里,都有专门的运维兄弟帮助搭建好了redis集群。研发人员不需要去折腾redis集群搭建的事情。而程序开发过程中,redis是否集群,对于业务也是透明的。所以,如果是在公司纯搞研发工作,自己的笔记本又不想安装redis,就请忽略此文吧。如果是在公司里既做研发又做运维的小伙伴,又或是对redis集群搭建有兴趣的小伙伴,那么建议你还...
前言:
之所以说纯研发人员可以忽略本文,是因为,研发环境里,都有专门的运维兄弟帮助搭建好了redis集群。
研发人员不需要去折腾redis集群搭建的事情。而程序开发过程中,redis是否集群,对于业务也是透明的。所以,如果是在公司纯搞研发工作,自己的笔记本又不想安装redis,就请忽略此文吧。
如果是在公司里既做研发又做运维的小伙伴,又或是对redis集群搭建有兴趣的小伙伴,那么建议你还是沉下心来,慢慢的把本文读完,小编的建议,最好是能够一边读一边动手操作,这样理解会更深,也会记得更牢固。
本文的代码,基本是以贴图的方式展示,因为代码直接文本贴出来,小编自己都不忍直视。这虽然不方便读者复制与粘贴,但照着图片命令自己敲打一遍,也是一个不错的加深巩固的方式。
好了,不多说了,直接进入主题吧。
Redis Cluster是Redis的分布式解决方案,按照Redis官网的建议,至少是3主3从,所以,我们要准备6个Redis节点来搭建Redis集群。
准备工作
首先在宿守主机创建6个目录,redis1-redis6,每个目录下,各放置一份原始的redis.conf配置文件。这样做的目的是,方便我们把宿守主机的文件挂载到每个容器内。然后,让redis启动的时候,按照自定义配置参数进行启动,同时,这样也方便我们修改配置文件。redis.conf配置文件可以从官网去下载源码包,里面有原始文件。
Step 1、使用docker下载Redis镜像
Setp 2、创建容器
在这之前,小编创建了一个自定义网络,6个节点都将会加入到这个网络中。如果通过link方式,小编自己都会疯掉的。宿守主机通过 52601-52606 这6个端口去映射6个容器的 6379端口。
参数具体说明:
--name 给容器取个别名
--hostname 容器的hostname
-p 主机与容器的端口映射
-v 将主机目录或文件挂载到容器内部
redis 镜像名称
redis-server 启动redis服务并使用自定义配置
Setp 3、参考上述命令,分别创建redis2-redis6容器
查看已经启动的6个redis节点
Setp 4、修改宿守主机挂载到容器内部的redis.conf文件
1、修改bind地址,设置为0.0.0.0,允许远程访问
2、放开集群配置前的注释,开启集群功能
cluster-enabled、cluster-config-file、cluster-node-timeout
六个节点配置文件都要这样修改,如何快速修改,各位小伙伴可以各显神通了
Setp 5、重启6个节点容器
Setp 6、任意进入其中一个节点容器,准备集群节点相互感知操作
通过docker inspect redis1 方式查询redis1的ip,以此类推,查询所有节点的ip
通过容器内的redis-cli,执行 CLUSTER MEET
命令,将6个节点加入到集群中
查看集群节点
虽然六个节点已经组建了集群,但是,目前还是不能提供服务。
查看目前的集群 cluster info
Setp 7、给3个主节点分配槽(slot)
1、使用 cluster addslots 分配槽
注:一个槽只能分配一个节点,并且16384个槽都要分配,并且不同节点槽不能冲突。
这里可以写一个脚本来完成
2、开始分配槽
执行期间
3、再次查看集群节点,发现多了一些槽信息
截至到此,这个集群环境,已经可以使用了。
我们现在来做一个实验,就是,我们故意删除掉一个槽,看看会发生什么?
删除槽的命令 cluster delslots xxx,这里命令不区分大小写。
再次获取缓存信息时报错了,集群挂掉了。
然后,我们再手动分配这个槽
然后,再次获取缓存信息。这时候,没有报错信息,集群又开始工作了。
这就意味着,这个集群,有一个节点,一旦出了问题,就导致整个集群崩溃。
所以为了保证集群系统的高可用,按照官网的建议,我们还需要为三个主节点各配置一个副节点。
Setp 8、配置3个副节点
1、查看目前的节点信息 cluster nodes
发现,未分配槽的3个节点也是master
2、使用 cluster replicate 添加副本节点
cluster replicate [node_id],node_id 为主节点的id。
执行的时候,有一点要注意,备份节点必须是尚未分配槽的节点,否则会执行失败
3、再次查看节点信息
至此,一个三主三从Master-Slave模式的Redis集群搭建完成。
redis1(主)redis4(从)
redis2(主)redis5(从)
redis3(主)redis6(从)
结束
其实要让这个集群真正的达到高可用,还有很多的工作要做。比如,故障自动迁移,Master宕机或者失联,Slave上升为Master。再比如,手动指定副本变为主机。数据的持久与恢复,数据迁移等。如果从事运维相关工作,这一块还需要细挖。
欢迎关注技术公众号:架构师成长营
更多推荐
所有评论(0)