基于 Docker 的 Redis Cluster 集群部署

本文档详细介绍了如何在单台虚拟机上使用Docker部署Redis 6.2.6版本的Cluster集群。首先进行主机和端口规划,接着通过自编写的脚本快速部署redis服务,并展示执行结果。然后在容器内创建一个三主三从的集群,确保所有节点正常运行,最终完成rediscluster的部署。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

c4cd3283a490b0028eae106c2e1bb278



一、规划

1.1 主机规划

由于服务器有限,仅用一台虚拟机做实验。本次部署的redis版本为 6.2.6,不同的版本号请注意参数的变化。

Host服务备注
192.168.56.120(2C/4G/50G)redis cluster基于 Docker 部署 redis cluster

1.2 端口规划

端口类型端口列表用途
客户端端口7001、7002、7003、7004、7005、7006提供给 client 连接使用
集群通信端口17001、17002、17003、17004、17005、17006redis cluster 集群通信

防火墙需要确保打开以上两个类型的端口,否则集群节点之间不能通信。

二、部署

2.1 部署 redis 服务

直接执行我写好的脚本即可,如需部署脚本可私信我。下图为脚本执行结果:

./redis_cluster.sh

# 注意端口不要与 Host 冲突,否则容器无法运行,执行脚本前注意修改脚本相关配置。

image-20221114142111100

查看容器是否正常运行:

image-20221114141945425

2.2 创建 redis cluster 集群

任意节点进入容器内部,并启用集群:

docker exec -it redis_7001 bash

创建一个 三主三从的 cluster 集群:

注意要在容器内部执行

redis-cli -a <yourpasswd> --cluster create \
  192.168.56.120:7001 \
  192.168.56.120:7002 \
  192.168.56.120:7003 \
  192.168.56.120:7004 \
  192.168.56.120:7005 \
  192.168.56.120:7006 --cluster-replicas 1

执行后,选择 yes

image-20221114142932957

完成后会输出一下内容:M 表示主接点,S 代表从节点。

image-20221114143143544

至此,redis cluster 部署完毕!

### 部署 Redis Cluster 集群最佳实践 #### 创建 Docker 容器并启动 Redis 实例 为了构建一个稳定的 Redis Cluster,首先需要准备多个 Redis 节点。通常情况下会配置至少三个主节点及其对应的从节点来保障系统的高可用性和容错能力。 通过Docker可以快速创建六个独立的Redis服务容器,在每台机器上分别运行不同端口的服务实例[^1]: ```bash for i in $(seq 7001 7006); do \ docker run -d --name redis-node-$i \ -p $i:$i \ -v /path/to/data/node$i:/data \ redis:alpine redis-server --port $i \ --cluster-enabled yes \ --appendonly yes; done ``` 这段脚本将会依次建立编号为`7001~7006`共六组Redis实例,并开放相应外部访问接口;同时启用了持久化(`--appendonly`)以及集群模式(`--cluster-enabled`)设置。 #### 构建 Redis Cluster 并初始化 当所有的Redis实例都已成功启动之后,则可以通过官方提供的工具 `redis-cli` 来完成实际的Cluster组建工作。这里需要注意的是所有参与成团过程中的成员应当处于同一网络环境之下以便相互间能够正常通信连接[^3]。 利用如下命令行指令来进行集群初始化操作: ```bash redis-cli --cluster create \ localhost:7001 \ localhost:7002 \ localhost:7003 \ localhost:7004 \ localhost:7005 \ localhost:7006 \ --cluster-replicas 1 ``` 上述命令指定了六个节点地址作为初始成员列表,并设置了每个分片拥有一个副本(replica),即实现了简单的主备复制结构。 #### 测试与验证 一旦集群被正确地建立了起来,便可通过客户端尝试向其中写入一些测试性的键值对数据以检验其功能是否完好无损。另外还可以借助于专门设计用于监控和管理目的的应用程序如Prometheus搭配Grafana面板等方式实时跟踪性能指标变化情况。 对于可能出现的跨槽位错误 `(error) CROSSSLOT Keys in request don't hash to the same slot`, 可以考虑调整应用程序逻辑使其遵循单个请求只涉及同属一个哈希槽内的key的原则, 或者采用批量处理的方式将关联紧密的数据项分配至相邻位置从而减少此类冲突发生的概率. #### Kubernetes环境下部署建议 如果是在Kubernetes环境中实施的话,除了以上常规步骤外还需要额外关注Service资源对象的设计——确保存在合适的Headless Service定义用来支持Pod之间的稳定寻址需求;另一方面则是StatefulSet控制器的选择有助于简化多实例状态维护流程[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云计算-Security

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值