Docker 中快速构建 Redis Cluster 集群
目录
- 前言
- 环境准备
- [构建 Redis Cluster 镜像](#构建 Redis Cluster 镜像)
- [创建自定义 Dockerfile](#创建自定义 Dockerfile)
- 构建镜像
- [启动 Redis 节点容器](#启动 Redis 节点容器)
- [配置 Redis Cluster 集群](#配置 Redis Cluster 集群)
- [创建 Redis 集群](#创建 Redis 集群)
- 验证集群状态
- 总结
前言
Redis 是一个高性能的键值对数据库,常被用作缓存、消息队列等用途。Redis Cluster 集群模式提供了数据分区和高可用性,通过分布式方式存储和管理数据,实现更高的扩展性。本指南将演示如何使用 Docker 快速构建一个包含 3 个节点的 Redis Cluster 集群。
环境准备
所需软件
- Docker:确保已安装 Docker,版本最好在
19.03.0
或以上。 - redis-cli:用于操作 Redis 集群,可以从 Redis 官方获取。
配置网络
为了让 Docker 容器之间能够互相通信,我们需要创建一个自定义网络:
bash
docker network create redis-cluster
这将创建一个名为 redis-cluster
的 Docker 网络。
构建 Redis Cluster 镜像
创建自定义 Dockerfile
我们需要在 Redis 镜像中添加用于配置集群的工具。创建一个目录并添加以下 Dockerfile:
Dockerfile
# 文件:Dockerfile
FROM redis:7.0
RUN apt-get update && apt-get install -y --no-install-recommends \
ruby-full \
&& gem install redis
COPY redis.conf /usr/local/etc/redis/redis.conf
CMD ["redis-server", "/usr/local/etc/redis/redis.conf"]
同时,在相同目录下创建 redis.conf
配置文件:
conf
# 文件:redis.conf
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
构建镜像
在上述 Dockerfile 文件所在的目录执行以下命令:
bash
docker build -t redis-cluster .
这将构建一个带有集群配置的自定义 Redis 镜像 redis-cluster
。
启动 Redis 节点容器
启动命令
我们将使用上面创建的网络 redis-cluster
和自定义镜像 redis-cluster
,分别启动 3 个 Redis 实例:
bash
docker run -d --name redis-node1 --net redis-cluster -p 7001:6379 redis-cluster
docker run -d --name redis-node2 --net redis-cluster -p 7002:6379 redis-cluster
docker run -d --name redis-node3 --net redis-cluster -p 7003:6379 redis-cluster
此时我们已经启动了 3 个 Redis 实例,各自映射到主机的 7001
、7002
和 7003
端口。
配置 Redis Cluster 集群
创建 Redis 集群
使用容器中的 redis-cli
工具配置 Redis Cluster 集群:
bash
docker exec -it redis-node1 redis-cli --cluster create \
172.18.0.2:6379 \
172.18.0.3:6379 \
172.18.0.4:6379 \
--cluster-replicas 0
其中 172.18.0.X
是各个 Redis 容器的内部 IP 地址。可以使用以下命令获取 IP 地址:
bash
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' redis-node1
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' redis-node2
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' redis-node3
验证集群状态
要验证集群是否正常工作,请使用 redis-cli
连接到其中一个节点并运行 cluster info
命令:
bash
docker exec -it redis-node1 redis-cli -c -p 6379 cluster info
或者直接使用以下命令查看每个节点的状态:
bash
docker exec -it redis-node1 redis-cli -c -p 6379 cluster nodes
总结
准备环境、构建自定义镜像、启动 Redis 节点到配置集群,搭建了一个 3 节点的 Redis Cluster 集群。通过集群的分布式特性,可以获得更高的性能和可扩展性。