Redis

关注公众号 jb51net

关闭
首页 > 数据库 > Redis > Docker Redis 部署集群

Docker + Redis 部署集群的实现步骤

作者:路過的好心人

本文详细介绍了在三台服务器上部署高可用Redis集群的完整流程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

一、环境准备

1. 服务器规划(3 台服务器)

服务器IP 地址角色运行 Redis 节点开放端口(防火墙)
server1192.168.1.100主节点 1 + 从节点 1redis-6379(主)、redis-6380(从)6379-6380(Redis 端口)、16379-16380(集群总线端口)
server2192.168.1.101主节点 2 + 从节点 2redis-6379(主)、redis-6380(从)同上
server3192.168.1.102主节点 3 + 从节点 3redis-6379(主)、redis-6380(从)同上

2. 防火墙配置(三台服务器均执行)

# 开放 Redis 服务端口和集群总线端口
sudo firewall-cmd --permanent --add-port=6379-6380/tcp
sudo firewall-cmd --permanent --add-port=16379-16380/tcp
sudo firewall-cmd --reload

3. 安装 Docker 并配置跨主机通信

三台服务器均需安装 Docker,并确保彼此网络互通(可 ping 通对方 IP)。无需额外创建 Docker 网络,直接通过 主机 IP + 端口 实现跨服务器节点通信。

二、部署 Redis 节点(每台服务器部署 2 个节点)

1. 在 server1(192.168.1.100)部署节点

# 创建数据目录(持久化用)
mkdir -p /data/redis/{6379,6380} && chmod 777 -R /data/redis

# 启动主节点(6379)
docker run -d \
  --name redis-6379 \
  --net host \  # 使用主机网络,避免端口映射问题(推荐集群模式)
  -v /data/redis/6379:/data \
  redis:7-alpine \
  redis-server \
  --port 6379 \
  --cluster-enabled yes \  # 开启集群模式
  --cluster-config-file nodes-6379.conf \  # 集群配置文件
  --cluster-node-timeout 5000 \  # 节点超时时间(毫秒)
  --appendonly yes \  # 开启 AOF 持久化
  --requirepass "D83544E45CA39C7653BF21612FAD0FD1" \  # 密码(所有节点必须一致)
  --masterauth "D83544E45CA39C7653BF21612FAD0FD1"  # 主从同步密码(与 requirepass 一致)

# 启动从节点(6380,后续会被分配到其他主节点)
docker run -d \
  --name redis-6380 \
  --net host \
  -v /data/redis/6380:/data \
  redis:7-alpine \
  redis-server \
  --port 6380 \
  --cluster-enabled yes \
  --cluster-config-file nodes-6380.conf \
  --cluster-node-timeout 5000 \
  --appendonly yes \
  --requirepass "D83544E45CA39C7653BF21612FAD0FD1" \
  --masterauth "D83544E45CA39C7653BF21612FAD0FD1"

2. 在 server2(192.168.1.101)部署节点

# 创建数据目录
mkdir -p /data/redis/{6379,6380} && chmod 777 -R /data/redis

# 启动主节点(6379)
docker run -d \
  --name redis-6379 \
  --net host \
  -v /data/redis/6379:/data \
  redis:7-alpine \
  redis-server \
  --port 6379 \
  --cluster-enabled yes \
  --cluster-config-file nodes-6379.conf \
  --cluster-node-timeout 5000 \
  --appendonly yes \
  --requirepass "D83544E45CA39C7653BF21612FAD0FD1" \
  --masterauth "D83544E45CA39C7653BF21612FAD0FD1"

# 启动从节点(6380)
docker run -d \
  --name redis-6380 \
  --net host \
  -v /data/redis/6380:/data \
  redis:7-alpine \
  redis-server \
  --port 6380 \
  --cluster-enabled yes \
  --cluster-config-file nodes-6380.conf \
  --cluster-node-timeout 5000 \
  --appendonly yes \
  --requirepass "D83544E45CA39C7653BF21612FAD0FD1" \
  --masterauth "D83544E45CA39C7653BF21612FAD0FD1"

3. 在 server3(192.168.1.102)部署节点

# 创建数据目录
mkdir -p /data/redis/{6379,6380} && chmod 777 -R /data/redis

# 启动主节点(6379)
docker run -d \
  --name redis-6379 \
  --net host \
  -v /data/redis/6379:/data \
  redis:7-alpine \
  redis-server \
  --port 6379 \
  --cluster-enabled yes \
  --cluster-config-file nodes-6379.conf \
  --cluster-node-timeout 5000 \
  --appendonly yes \
  --requirepass "D83544E45CA39C7653BF21612FAD0FD1" \
  --masterauth "D83544E45CA39C7653BF21612FAD0FD1"

# 启动从节点(6380)
docker run -d \
  --name redis-6380 \
  --net host \
  -v /data/redis/6380:/data \
  redis:7-alpine \
  redis-server \
  --port 6380 \
  --cluster-enabled yes \
  --cluster-config-file nodes-6380.conf \
  --cluster-node-timeout 5000 \
  --appendonly yes \
  --requirepass "D83544E45CA39C7653BF21612FAD0FD1" \
  --masterauth "D83544E45CA39C7653BF21612FAD0FD1"

三、创建 Redis 集群(关键步骤)

在任意一台服务器(如 server1)执行集群创建命令,将 6 个节点(3 主 3 从)加入集群:

1. 进入 server1 的任意 Redis 容器(如 redis-6379)

bash

docker exec -it redis-6379 sh 

2. 执行集群创建命令

# 格式:redis-cli --cluster create 节点1:端口 节点2:端口 ... --cluster-replicas 1 --password 密码
redis-cli -a D83544E45CA39C7653BF21612FAD0FD1 \
--cluster create \
192.168.1.100:6379 \
192.168.1.101:6379 \
192.168.1.102:6379 \
192.168.1.100:6380 \
192.168.1.101:6380 \
192.168.1.102:6380 \
--cluster-replicas 1
# 每个主节点对应 1 个从节点

3. 确认集群配置

执行命令后,会显示节点分配方案,输入 yes 确认:

>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0-5460
Master[1] -> Slots 5461-10922
Master[2] -> Slots 10923-16383
Adding replica 192.168.1.101:6380 to 192.168.1.100:6379
Adding replica 192.168.1.102:6380 to 192.168.1.101:6379
Adding replica 192.168.1.100:6380 to 192.168.1.102:6379
>>> Trying to optimize slaves allocation for anti-affinity
...
Do you want to proceed with the proposed configuration? (type 'yes' to accept): yes

四、验证集群状态

1. 查看集群信息

在任意节点容器内执行(需带密码):

# 连接集群(-c 表示集群模式)
redis-cli -c -h 192.168.1.100 -p 6379 -a D83544E45CA39C7653BF21612FAD0FD1

# 查看集群状态
cluster info

# 查看节点列表(角色、ID、 slots 等)
cluster nodes

2. 测试数据读写与分片

# 在集群模式下设置 key(会自动路由到对应主节点)
set test-key "hello redis cluster"

# 获取 key(自动路由)
get test-key

# 查看 key 所在的槽位和节点
cluster keyslot test-key

五、高可用测试(主节点故障转移)

模拟主节点故障:在 server1 停止主节点容器(6379):

docker stop redis-6379 

观察从节点是否自动升级为主节点:在任意节点容器内执行 cluster nodes,查看原 server1:6380(从节点)是否变为 master

恢复故障节点:重启 server1 的 6379 容器,它会自动作为从节点加入集群:

docker start redis-6379 

六、关键配置说明

七、常见问题解决

通过以上步骤,可在三台服务器上部署一个高可用的 Redis 集群,实现数据分片存储和自动故障转移,适合生产环境使用。

到此这篇关于Docker + Redis 部署集群的实现步骤的文章就介绍到这了,更多相关Docker Redis 部署集群内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文