记录一次Ubuntu24.02中使用docker部署redis集群以及踩坑
前置工作:
配置好docker(我用的是28.1.1) 以及docker compose(我用的2.35.1版本,命令与之前不一样)
正式开始:
1、准备redis镜像:
docker pull redis
(根据实际需要下载版本,默认是latest)
2、找一个文件夹,创建不同节点docker对应的配置文件和数据文件夹,方便后面docker映射出去
mkdir -p ~/redis-cluster/{7000,7001,7002,7003,7004,7005}
for port in 7000 7001 7002 7003 7004 7005; do
mkdir -p ~/redis-cluster/${port}/data
touch ~/redis-cluster/${port}/redis.conf
done
之后修改对应文件夹中的配置文件,以7000文件夹为例:
port 7000
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
dir /data
protected-mode no
bind 0.0.0.0
其他文件夹类似,这里把port后面改成和文件夹对应的数字,还有nodes.conf改成nodes-700x.conf(这里7000保持叫nodes.conf)
3、编写docker-compose.xml
# 新版本docker compose 不用写 version: "3.8"
services:
redis-7000:
image: redis:latest # 这里根据自己的实际版本进行修改
container_name: redis-7000
ports:
- "7000:7000"
- "17000:17000" # cluster bus port = port + 10000
volumes:
- ./7000/redis.conf:/usr/local/etc/redis/redis.conf
- ./7000/data:/data
command: ["redis-server", "/usr/local/etc/redis/redis.conf"]
networks:
redis-cluster-net:
ipv4_address: 172.18.0.10 # 子网不要和既有的子网冲突了
redis-7001:
image: redis:latest
container_name: redis-7001
ports:
- "7001:7001"
- "17001:17001"
volumes:
- ./7001/redis.conf:/usr/local/etc/redis/redis.conf
- ./7001/data:/data
command: ["redis-server", "/usr/local/etc/redis/redis.conf"]
networks:
redis-cluster-net:
ipv4_address: 172.18.0.11
redis-7002:
image: redis:latest
container_name: redis-7002
ports:
- "7002:7002"
- "17002:17002"
volumes:
- ./7002/redis.conf:/usr/local/etc/redis/redis.conf
- ./7002/data:/data
command: ["redis-server", "/usr/local/etc/redis/redis.conf"]
networks:
redis-cluster-net:
ipv4_address: 172.18.0.12
redis-7003:
image: redis:latest
container_name: redis-7003
ports:
- "7003:7003"
- "17003:17003"
volumes:
- ./7003/redis.conf:/usr/local/etc/redis/redis.conf
- ./7003/data:/data
command: ["redis-server", "/usr/local/etc/redis/redis.conf"]
networks:
redis-cluster-net:
ipv4_address: 172.18.0.13
redis-7004:
image: redis:latest
container_name: redis-7004
ports:
- "7004:7004"
- "17004:17004"
volumes:
- ./7004/redis.conf:/usr/local/etc/redis/redis.conf
- ./7004/data:/data
command: ["redis-server", "/usr/local/etc/redis/redis.conf"]
networks:
redis-cluster-net:
ipv4_address: 172.18.0.14
redis-7005:
image: redis:latest
container_name: redis-7005
ports:
- "7005:7005"
- "17005:17005"
volumes:
- ./7005/redis.conf:/usr/local/etc/redis/redis.conf
- ./7005/data:/data
command: ["redis-server", "/usr/local/etc/redis/redis.conf"]
networks:
redis-cluster-net:
ipv4_address: 172.18.0.15
networks:
redis-cluster-net:
driver: bridge
ipam:
config:
- subnet: 172.18.0.0/16 # 子网设定请不要和既有子网冲突
4.运行docker compose
docker compose up -d
5.查看运行状态&构建集群
docker ps
# 如果找不到 docker ps -a查看容器是否停止
构建集群(三主三从 cluster-replicas控制一个主机有几个从节点,redis会自动决定主机和从机):
docker exec -it redis-7000 bash
redis-cli --cluster create \
172.18.0.10:7000 \
172.18.0.11:7001 \
172.18.0.12:7002 \
172.18.0.13:7003 \
172.18.0.14:7004 \
172.18.0.15:7005 \
--cluster-replicas 1
有提示的话输入yes,这里ip和上面的配置一致
5.测试集群的功能
选择一个节点写入数据
docker exec -it redis-7000 redis-cli
set hw "hello world"
get hw
再选一个节点读取数据
docker exec -it redis-7005 redis-cli
get hw
如果成功获取,就代表集群构建成功了
6、如果出现报错,请重新构建集群
docker compose down -v #清除所有状态,关闭所有容器
注意的坑点:
1、将不同容器中的数据和配置文件映射出来的时候,最好映射到不同的文件夹,否则有可能导致容器启动失败。(之前用deepseek默认生成的docker compose文件里都是6379端口,映射到同一个文件夹就会导致失败,修改成不同文件夹和不同端口后就好了)
2、注意子网冲突,如果发生子网冲突,请更换全部子网网段。如果之前配置的子网不需要了可以删除掉
本文来自博客园,作者:JessieLin,转载请注明原文链接:https://www.cnblogs.com/6543x1/p/18934924

浙公网安备 33010602011771号