使用 Docker Compose 部署 Redis 单机版与集群
Redis 是一个开源的、高性能的内存数据库,常用于缓存、消息队列等场景。它不仅支持丰富的数据结构,而且性能卓越,成为了分布式系统的重要组件之一。在日常开发和生产环境中,使用 Docker 容器化 Redis 部署是非常常见的实践。本文将详细介绍如何使用 Docker Compose 分别部署 Redis 单机版和 Redis 集群。
一、前置准备
在开始之前,确保你的系统已经安装了以下工具:
- Docker:用于容器化应用的工具,可以从 Docker 官网下载并安装。
- Docker Compose:Docker Compose 是 Docker 官方提供的,用于定义和运行多个容器应用的工具,允许我们通过编写一个
docker-compose.yml
文件来同时启动多个服务。
在命令行中通过以下命令检查 Docker 和 Docker Compose 是否已安装:
docker --version
输出docker版本信息
docker-compose --version
输出docker compose版本信息。
如果上面命令正确输出版本信息,即说明安装成功。
二、使用 Docker Compose 部署 Redis 单机版
2.1 创建项目目录
首先,我们需要创建一个用于存放 Redis 配置文件和 docker-compose.yml
文件的项目目录。
mkdir redis-single && cd redis-single
2.2 编写 docker-compose.yml
接下来,在项目目录中创建一个 docker-compose.yml
文件,内容如下:
version: '3'
services:
redis:
image: redis:latest
container_name: redis-single
ports:
- "6379:6379"
volumes:
- redis-data:/data
command: ["redis-server", "--appendonly", "yes"]
volumes:
redis-data:
driver: local
解释:
- version: '3':Docker Compose 文件的版本号,
3
是一个常见的版本,支持绝大多数功能。 - services:定义服务,在这里我们定义了一个 Redis 服务。
- redis:服务名称,代表 Redis 容器。
- image:指定镜像,这里我们使用 Redis 官方镜像的最新版本
redis:latest
。 - container_name:容器名称,将 Redis 容器命名为
redis-single
。 - ports:映射端口,将本地的 6379 端口映射到容器内的 6379 端口,Redis 默认运行在 6379 端口上。
- volumes:指定数据卷,将 Redis 数据持久化存储到本地,以防止数据因容器重启或删除而丢失。
- command:启动命令,这里我们指定
redis-server
启动,并启用 AOF(Append-Only File)持久化机制。
2.3 启动 Redis 容器
在项目目录中,运行以下命令启动 Redis 容器:
docker-compose up -d
参数解释:
- -d:表示后台运行容器。
运行该命令后,Docker 将会根据 docker-compose.yml
文件拉取 Redis 镜像并启动服务。
2.4 验证 Redis 单机版
- 查看正在运行的 Redis 容器:
docker ps
如果一切顺利,你应该能看到 redis-single
容器正在运行。
- 使用
redis-cli
连接 Redis 实例:
docker exec -it redis-single redis-cli
在 Redis CLI 中,输入以下命令来验证 Redis 是否正常工作:
ping
输出应为 PONG
,表明 Redis 正常运行。
2.5 停止和删除 Redis 容器
如果你想停止并删除 Redis 容器,可以使用以下命令:
docker-compose down
该命令将停止并删除所有由 docker-compose.yml
文件创建的容器及网络。
三、使用 Docker Compose 部署 Redis 集群
Redis 集群是一种分布式 Redis 架构,允许将数据分片分布到多个节点上,以实现高可用性和可扩展性。Redis 集群至少需要 6 个节点,其中 3 个是主节点,3 个是从节点。接下来,我们将演示如何使用 Docker Compose 部署 Redis 集群。
3.1 创建项目目录
为 Redis 集群创建一个新的项目目录:
mkdir redis-cluster && cd redis-cluster
3.2 创建 Redis 集群配置文件
我们需要为每个 Redis 实例创建独立的配置文件。首先,创建一个 config
目录来存放这些文件:
mkdir config
然后为每个节点创建配置文件,以下是 redis-cluster-node.conf
的模板配置:
port 6379
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
将此配置文件复制为 6 份,命名为 node-7000.conf
,node-7001.conf
,以此类推,直到 node-7005.conf
。这 6 个配置文件将分别用于 6 个 Redis 节点。
3.3 编写 docker-compose.yml
在 redis-cluster
目录下创建 docker-compose.yml
文件,内容如下:
version: '3'
services:
redis-node-1:
image: redis:latest
container_name: redis-node-1
ports:
- "7000:6379"
volumes:
- ./config/node-7000.conf:/usr/local/etc/redis/redis.conf
command: ["redis-server", "/usr/local/etc/redis/redis.conf"]
redis-node-2:
image: redis:latest
container_name: redis-node-2
ports:
- "7001:6379"
volumes:
- ./config/node-7001.conf:/usr/local/etc/redis/redis.conf
command: ["redis-server", "/usr/local/etc/redis/redis.conf"]
redis-node-3:
image: redis:latest
container_name: redis-node-3
ports:
- "7002:6379"
volumes:
- ./config/node-7002.conf:/usr/local/etc/redis/redis.conf
command: ["redis-server", "/usr/local/etc/redis/redis.conf"]
redis-node-4:
image: redis:latest
container_name: redis-node-4
ports:
- "7003:6379"
volumes:
- ./config/node-7003.conf:/usr/local/etc/redis/redis.conf
command: ["redis-server", "/usr/local/etc/redis/redis.conf"]
redis-node-5:
image: redis:latest
container_name: redis-node-5
ports:
- "7004:6379"
volumes:
- ./config/node-7004.conf:/usr/local/etc/redis/redis.conf
command: ["redis-server", "/usr/local/etc/redis/redis.conf"]
redis-node-6:
image: redis:latest
container_name: redis-node-6
ports:
- "7005:6379"
volumes:
- ./config/node-7005.conf:/usr/local/etc/redis/redis.conf
command: ["redis-server", "/usr/local/etc/redis/redis.conf"]
解释:
- 我们创建了 6 个 Redis 容器,分别监听 7000 到 7005 端口。
- 每个容器都挂载了对应的配置文件,使用
redis-server
命令启动。
3.4 启动 Redis 集群
在 redis-cluster
目录中,执行以下命令启动集群:
docker-compose up -d
3.5 配置 Redis 集群
Redis 容器启动后,我们还需要手动配置 Redis 集群。首先,通过一个容器执行 redis-cli
命令来配置集群:
docker exec -it redis-node-1 redis-cli --cluster create \
127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 \
127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 \
--cluster-replicas 1
解释:
--cluster create
:命令用于创建 Redis 集群。127.0.0.1:7000 127.0.0.1:7001 ...
:列出集群中的所有节点。--cluster-replicas 1
:指定每个主节点有一个从节点。
执行该命令后,Redis 会自动将 7000、7001、7002 配置为主节点,而 7003、7004、7005 配置为对应的从节点。
3.6 验证 Redis 集群
你可以通过以下命令查看集群的状态:
docker exec -it redis-node-1 redis-cli -c -p 7000 cluster info
还可以连接到 Redis 节点并通过以下命令查看集群的节点信息:
docker exec -it redis-node-1 redis-cli -c -p 7000 cluster nodes
四、总结
本文详细介绍了如何使用 Docker Compose 部署 Redis 单机版和集群版。在开发环境中,使用 Docker Compose 能够快速部署和管理 Redis 服务,而在生产环境中,可以通过类似的配置实现更复杂的集群管理。