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集群搭建完成。