1. 环境说明
节点 | IP |
---|
redis-node-1 | 10.10.239.31 |
redis-node-2 | 10.10.239.32 |
redis-node-3 | 10.10.239.33 |
redis-node-4 | 10.10.239.34 |
redis-node-5 | 10.10.239.35 |
redis-node-6 | 10.10.239.36 |
2. 集群部署
redis-node-1
| version: '2.2' |
| services: |
| redis-node-1: |
| image: bitnami/redis-cluster:7.0 |
| restart: always |
| container_name: redis-node-1 |
| network_mode: "host" |
| volumes: |
| - ./redis-cluster_data-1:/bitnami/redis/data |
| environment: |
| - 'REDIS_PASSWORD=liubei@161' |
| - 'REDIS_NODES=10.10.239.31 10.10.239.32 10.10.239.33 10.10.239.34 10.10.239.35 10.10.239.36' |
因为容器中执行初始化的不是root用户,自动创建挂载文件权限一般会有问题。我这里容器中执行初始化的用户对应宿主机ID是1001的用户,因此提前给了权限(当然你也可以直接给777权限,但不建议)。
如果你不是这个用户,可以先给777权限。等容器启动后看初始化后的文件属主是谁,就把该目录的属主改成谁,然后改回755或750权限。
| [root@liubei-01 redis-cluster]# mkdir ./redis-cluster_data-1 |
| [root@liubei-01 redis-cluster]# chown 1001 ./redis-cluster_data-1 |
| [root@liubei-01 redis-cluster] |
| [root@liubei-01 redis-cluster]# docker-compose ps |
| Name Command State Ports |
| -------------------------------------------------------------------------------------------------------- |
| redis-node-1 /opt/bitnami/scripts/redis ... Up |
| |
redis-node-2
| version: '2.2' |
| services: |
| redis-node-2: |
| image: bitnami/redis-cluster:7.0 |
| restart: always |
| container_name: redis-node-2 |
| network_mode: "host" |
| volumes: |
| - ./redis-cluster_data-2:/bitnami/redis/data |
| environment: |
| - 'REDIS_PASSWORD=liubei@161' |
| - 'REDIS_NODES=10.10.239.31 10.10.239.32 10.10.239.33 10.10.239.34 10.10.239.35 10.10.239.36' |
因为容器中执行初始化的不是root用户,自动创建挂载文件权限一般会有问题。我这里容器中执行初始化的用户对应宿主机ID是1001的用户,因此提前给了权限(当然你也可以直接给777权限,但不建议)。
如果你不是这个用户,可以先给777权限。等容器启动后看初始化后的文件属主是谁,就把该目录的属主改成谁,然后改回755或750权限。
| [root@liubei-02 redis-cluster]# mkdir ./redis-cluster_data-2 |
| [root@liubei-02 redis-cluster]# chown 1001 ./redis-cluster_data-2 |
| [root@liubei-02 redis-cluster] |
| [root@liubei-02 redis-cluster]# docker-compose ps |
| Name Command State Ports |
| -------------------------------------------------------------------------------------------------------- |
| redis-node-2 /opt/bitnami/scripts/redis ... Up |
| |
redis-node-3
| version: '2.2' |
| services: |
| redis-node-3: |
| image: bitnami/redis-cluster:7.0 |
| restart: always |
| container_name: redis-node-3 |
| network_mode: "host" |
| volumes: |
| - ./redis-cluster_data-3:/bitnami/redis/data |
| environment: |
| - 'REDIS_PASSWORD=liubei@161' |
| - 'REDIS_NODES=10.10.239.31 10.10.239.32 10.10.239.33 10.10.239.34 10.10.239.35 10.10.239.36' |
因为容器中执行初始化的不是root用户,自动创建挂载文件权限一般会有问题。我这里容器中执行初始化的用户对应宿主机ID是1001的用户,因此提前给了权限(当然你也可以直接给777权限,但不建议)。
如果你不是这个用户,可以先给777权限。等容器启动后看初始化后的文件属主是谁,就把该目录的属主改成谁,然后改回755或750权限。
| [root@liubei-03 redis-cluster]# mkdir ./redis-cluster_data-3 |
| [root@liubei-03 redis-cluster]# chown 1001 ./redis-cluster_data-3 |
| [root@liubei-03 redis-cluster] |
| [root@liubei-03 redis-cluster]# docker-compose ps |
| Name Command State Ports |
| -------------------------------------------------------------------------------------------------------- |
| redis-node-3 /opt/bitnami/scripts/redis ... Up |
| |
redis-node-4
| version: '2.2' |
| services: |
| redis-node-2: |
| image: bitnami/redis-cluster:7.0 |
| restart: always |
| container_name: redis-node-4 |
| network_mode: "host" |
| volumes: |
| - ./redis-cluster_data-4:/bitnami/redis/data |
| environment: |
| - 'REDIS_PASSWORD=liubei@161' |
| - 'REDIS_NODES=10.10.239.31 10.10.239.32 10.10.239.33 10.10.239.34 10.10.239.35 10.10.239.36' |
因为容器中执行初始化的不是root用户,自动创建挂载文件权限一般会有问题。我这里容器中执行初始化的用户对应宿主机ID是1001的用户,因此提前给了权限(当然你也可以直接给777权限,但不建议)。
如果你不是这个用户,可以先给777权限。等容器启动后看初始化后的文件属主是谁,就把该目录的属主改成谁,然后改回755或750权限。
| [root@liubei-04 redis-cluster]# mkdir ./redis-cluster_data-4 |
| [root@liubei-04 redis-cluster]# chown 1001 ./redis-cluster_data-4 |
| [root@liubei-04 redis-cluster] |
| [root@liubei-04 redis-cluster]# docker-compose ps |
| Name Command State Ports |
| -------------------------------------------------------------------------------------------------------- |
| redis-node-4 /opt/bitnami/scripts/redis ... Up |
| |
redis-node-5
| version: '2.2' |
| services: |
| redis-node-5: |
| image: bitnami/redis-cluster:7.0 |
| restart: always |
| container_name: redis-node-5 |
| network_mode: "host" |
| volumes: |
| - ./redis-cluster_data-5:/bitnami/redis/data |
| environment: |
| - 'REDIS_PASSWORD=liubei@161' |
| - 'REDIS_NODES=10.10.239.31 10.10.239.32 10.10.239.33 10.10.239.34 10.10.239.35 10.10.239.36' |
因为容器中执行初始化的不是root用户,自动创建挂载文件权限一般会有问题。我这里容器中执行初始化的用户对应宿主机ID是1001的用户,因此提前给了权限(当然你也可以直接给777权限,但不建议)。
如果你不是这个用户,可以先给777权限。等容器启动后看初始化后的文件属主是谁,就把该目录的属主改成谁,然后改回755或750权限。
| [root@liubei-05 redis-cluster]# mkdir ./redis-cluster_data-5 |
| [root@liubei-05 redis-cluster]# chown 1001 ./redis-cluster_data-5 |
| [root@liubei-05 redis-cluster] |
| [root@liubei-05 redis-cluster]# docker-compose ps |
| Name Command State Ports |
| -------------------------------------------------------------------------------------------------------- |
| redis-node-5 /opt/bitnami/scripts/redis ... Up |
| |
redis-node-6
| version: '2.2' |
| services: |
| redis-node-6: |
| image: bitnami/redis-cluster:7.0 |
| restart: always |
| container_name: redis-node-6 |
| network_mode: "host" |
| volumes: |
| - ./redis-cluster_data-6:/bitnami/redis/data |
| environment: |
| - 'REDIS_PASSWORD=liubei@161' |
| - 'REDIS_NODES=10.10.239.31 10.10.239.32 10.10.239.33 10.10.239.34 10.10.239.35 10.10.239.36' |
因为容器中执行初始化的不是root用户,自动创建挂载文件权限一般会有问题。我这里容器中执行初始化的用户对应宿主机ID是1001的用户,因此提前给了权限(当然你也可以直接给777权限,但不建议)。
如果你不是这个用户,可以先给777权限。等容器启动后看初始化后的文件属主是谁,就把该目录的属主改成谁,然后改回755或750权限。
| [root@liubei-06 redis-cluster]# mkdir ./redis-cluster_data-6 |
| [root@liubei-06 redis-cluster]# chown 1001 ./redis-cluster_data-6 |
| [root@liubei-06 redis-cluster] |
| [root@liubei-06 redis-cluster]# docker-compose ps |
| Name Command State Ports |
| -------------------------------------------------------------------------------------------------------- |
| redis-node-6 /opt/bitnami/scripts/redis ... Up |
| |
3. 初始化
| redis-cli -h 10.10.239.31 -a liubei@161 --cluster create 10.10.239.31:6379 10.10.239.32:6379 10.10.239.33:6379 10.10.239.34:6379 10.10.239.35:6379 10.10.239.36:6379 --cluster-replicas 1 |
输出结果和状态查看参考另一篇文档《docker-compose启动redis伪集群》初始化部分。
4. 测试
| I have no name!@0fc49662e765:/$ redis-cli -h 10.10.239.31 -a liubei@161 -c |
| Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. |
| 10.10.239.31:6379> set name liubei |
| -> Redirected to slot [5798] located at 10.10.239.35:6379 |
| OK |
| 10.10.239.35:6379> get name |
| "liubei" |
| 10.10.239.35:6379> |
说明:
进入10.10.239.31的redis容器,从该节点进入集群,写入数据。
显示写入在 10.10.239.35 这个节点
同时我们的连接也跳到了这个节点。
我们读一下,读到了数据。
换一个节点连接,效果相同。
可参考另一篇文档《docker-compose启动redis伪集群》测试部分。

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了