docker搭建redis集群
redis集群提供了一种分布式的redis高可用方案,用于替换老旧的主从加哨兵的模式。
配置redis集群需要如下几步:
- 下载redis镜像
 - 配置网络
 - 准备redis配置文件
 - 启动redis
 - 链接其中一个redis进行创建集群
 
一. 下载redis镜像
在docker下,我们使用以下命令进行下载redis镜像。
1  | docker create redis  | 
二. 准备网络
我们需要redis在docker中使用同一个网络,类似于现实生活中的内网环境。那么我们需要创建一个路由网络,让所有的redis实例链接到该路由。
1  | docker network create redis-net  | 
检查一下是否配置成功
1  | [root@localhost ~]# docker network inspect redis-net  | 
从上面的内从中我们可以找到网关IP为**”Gateway”:”172.18.0.1”**,这个地址我们后面会临时用到。
三. 准备配置文件
我们的目标是生成redis集群内生成6个实例,端口从7000-7005。
下面我们使用shell加模板的方式生成这些文件。
1 增加模板
我们先准备一份redis配置模板,先填入我们需要的信息。再次之前,创建一个目录/root/redis-cluster用于存放所有的配置。后续所有的操作都是该目录下。
新建redis.conf.tmpl,填入一下内容,${PORT}为占位符,后面后替换为真实的端口号
1  | 
  | 
2 替换模板占位符并创建目录
命令行执行如下代码会在当前目录下生成port/conf/redis.conf和port/data
1  | for port in `seq 7000 7005`; do \  | 
至此,准备配置文件的工作暂时告一段落。通过tree命令,我们可以看到当前文件夹内的项目结构如下:
1  | [root@localhost redis-cluster]# tree  | 
四. 启动redis
在启动redis之前,先介绍几个docker命令:
docker run运行容器docker ps查看正在运行的容器状态docker logs查看指定容器的输出日志docker restart重启容器
下面我们通过一个简单的shell脚本启动7000-7005容器
1  | for port in `seq 7000 7005`; do \  | 
执行完以上代码会看到类似于一下的输出,说明容器启动成功,否则请检查上面的步骤。
1  | 96ae55d79e37ee18979a6c73fb265514baabd043dbf98074121b8be254e80a09  | 
通过docker ps命令查看容器启动状态:
1  | docker ps  | 
如果发现
status一栏对应的状态不是Up,请使用docker logs redis-700x查看输出。
现在redis已正常启动,我们还差一个重要的配置没有加上,回顾一下redis.conf.tmpl文件中的ip是否存在一个x。
现在我们需要手动将docker分配给对应redis的ip重新修改到/root/redis-cluster/port/conf/redis.conf文件中。查看docker分配的ip:
1  | docker network inspect redis-net  | 
从以上输出中找到Name对应的IPv4Address,分别修改对应的redis.conf文件。
全部修改完成以后,执行如下命令重启redis容器:
1  | for port in `seq 7000 7005`; do \  | 
五. 创建集群
要将各个redis实例链接起来,我们需要链接其中一个redis实例,执行创建集群命令。
1  | 链接到redis-7000实例所在的容器  | 
创建集群命令会提示用户是否已看到完整信息,输入yes即可。
现在链接redis查看集群情况:
1  | redis-cli -c -p 7000  | 
到此,redis集群搭建完成。