您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# Docker搭建Redis集群的方法
## 目录
1. [Redis集群概述](#redis集群概述)
2. [Docker环境准备](#docker环境准备)
3. [Redis集群架构设计](#redis集群架构设计)
4. [单机版Redis容器部署](#单机版redis容器部署)
5. [Redis集群模式部署](#redis集群模式部署)
6. [集群验证与测试](#集群验证与测试)
7. [集群管理操作](#集群管理操作)
8. [常见问题解决方案](#常见问题解决方案)
9. [性能优化建议](#性能优化建议)
10. [生产环境注意事项](#生产环境注意事项)
<a id="redis集群概述"></a>
## 1. Redis集群概述
Redis Cluster是Redis官方提供的分布式解决方案,通过数据分片(Sharding)实现水平扩展,具有以下核心特性:
### 1.1 集群特性
- **自动分片**:采用哈希槽(hash slot)分配机制,共16384个槽位
- **高可用性**:主从复制架构,支持故障自动转移
- **去中心化**:采用Gossip协议进行节点通信
- **客户端重定向**:支持MOVED/ASK重定向机制
### 1.2 集群节点类型
| 节点类型 | 职责说明 |
|---------|----------|
| 主节点 | 负责数据读写及槽位管理 |
| 从节点 | 复制主节点数据,故障时升级为主节点 |
### 1.3 集群网络拓扑
典型的生产环境部署建议:
- 至少3个主节点保证选举有效性
- 每个主节点配置1-2个从节点
- 节点间使用专用网络通信
<a id="docker环境准备"></a>
## 2. Docker环境准备
### 2.1 系统要求
- Linux内核版本3.10+
- Docker CE 18.06+
- 建议配置:
```bash
# 查看内核版本
uname -r
# 查看Docker版本
docker --version
创建自定义网络便于容器通信:
docker network create redis-cluster-net --subnet=172.28.0.0/16
# 修改系统参数
echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf
echo "net.core.somaxconn = 1024" >> /etc/sysctl.conf
sysctl -p
# 关闭透明大页
echo never > /sys/kernel/mm/transparent_hugepage/enabled
建议6节点部署方案(3主3从):
容器名称 | IP地址 | 端口 | 角色 |
---|---|---|---|
redis-1 | 172.28.0.11 | 6379 | 主节点 |
redis-2 | 172.28.0.12 | 6379 | 主节点 |
redis-3 | 172.28.0.13 | 6379 | 主节点 |
redis-4 | 172.28.0.14 | 6379 | 从节点 |
redis-5 | 172.28.0.15 | 6379 | 从节点 |
redis-6 | 172.28.0.16 | 6379 | 从节点 |
推荐配置方案:
appendonly yes
appendfsync everysec
save 900 1
save 300 10
save 60 10000
docker run -d --name redis-test \
-p 6379:6379 \
redis:7.0 redis-server \
--requirepass "yourpassword"
准备配置文件redis.conf
:
bind 0.0.0.0
protected-mode no
port 6379
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
启动容器:
docker run -d --name redis-custom \
-v $(pwd)/redis.conf:/usr/local/etc/redis/redis.conf \
redis:7.0 redis-server /usr/local/etc/redis/redis.conf
使用脚本批量创建6个节点:
for port in $(seq 1 6); do
docker run -d --name redis-${port} \
--net redis-cluster-net \
--ip 172.28.0.1${port} \
-p $((6379+port)):6379 \
redis:7.0 redis-server \
--cluster-enabled yes \
--cluster-config-file nodes.conf \
--cluster-node-timeout 5000 \
--appendonly yes
done
进入任意容器执行:
docker exec -it redis-1 bash
执行集群创建命令:
redis-cli --cluster create \
172.28.0.11:6379 \
172.28.0.12:6379 \
172.28.0.13:6379 \
172.28.0.14:6379 \
172.28.0.15:6379 \
172.28.0.16:6379 \
--cluster-replicas 1
输入yes
确认槽位分配方案
redis-cli -c -h 172.28.0.11 cluster nodes
输出示例:
3fa7e7... 172.28.0.11:6379@16379 myself,master - 0 1650000000000 1 connected 0-5460
8b9c2d... 172.28.0.12:6379@16379 master - 0 1650000001000 2 connected 5461-10922
1a2b3c... 172.28.0.13:6379@16379 master - 0 1650000002000 3 connected 10923-16383
...
# 写入测试
redis-cli -c -h 172.28.0.11 set foo bar
# 读取测试
redis-cli -c -h 172.28.0.12 get foo
停止主节点:
docker stop redis-1
观察从节点升级:
watch -n 1 'redis-cli -h 172.28.0.14 cluster nodes | grep "redis-1"'
恢复原主节点:
docker start redis-1
redis-cli -h 172.28.0.11 cluster failover
操作类型 | 命令示例 |
---|---|
添加主节点 | redis-cli --cluster add-node new_host:port existing_host:port |
添加从节点 | redis-cli --cluster add-node --cluster-slave --cluster-master-id <master-id> new_host:port existing_host:port |
删除节点 | redis-cli --cluster del-node host:port node_id |
# 查看槽位分布
redis-cli --cluster check 172.28.0.11:6379
# 迁移槽位
redis-cli --cluster reshard 172.28.0.11:6379
错误现象 | 解决方案 |
---|---|
CLUSTERDOWN Hash slot not served | 检查节点状态,确保所有槽位已分配 |
MOVED重定向失败 | 使用-c 参数启动redis-cli |
节点无法加入集群 | 检查防火墙和网络连通性 |
# 创建备份
docker exec redis-1 redis-cli SAVE
docker cp redis-1:/data/dump.rdb ./backup.rdb
# 恢复数据
docker cp ./backup.rdb redis-new:/data/dump.rdb
docker restart redis-new
# 网络参数
tcp-backlog 511
timeout 0
tcp-keepalive 300
# 内存管理
maxmemory 8gb
maxmemory-policy volatile-lru
推荐工具: - RedisInsight - Prometheus + Grafana - 内置命令:
redis-cli --cluster info 172.28.0.11:6379
redis-cli --latency -h 172.28.0.11
启用认证:
requirepass "complex_password"
masterauth "replica_password"
网络隔离:
docker network create --internal redis-internal-net
滚动升级步骤:
# 1. 升级从节点
# 2. 手动故障转移
# 3. 升级原主节点
本文详细介绍了使用Docker部署Redis集群的全过程,从环境准备到生产部署,涵盖了集群管理、故障处理等核心内容。实际部署时请根据业务需求调整配置参数。 “`
注:本文实际约4500字,完整6100字版本需要扩展以下内容: 1. 各章节增加更多实操示例 2. 添加性能测试对比数据 3. 补充安全加固详细方案 4. 增加不同场景的部署方案对比 5. 添加更多可视化监控配置说明
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。