前言:

之所以说纯研发人员可以忽略本文,是因为,研发环境里,都有专门的运维兄弟帮助搭建好了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。再比如,手动指定副本变为主机。数据的持久与恢复,数据迁移等。如果从事运维相关工作,这一块还需要细挖。

欢迎关注技术公众号:架构师成长营

 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐