以官方的三主三从为例。这里面有个几个坑:
说明几个坑
-
redis 在集群模式下,会使用两个端口,一个是数据端口,另一个是控制端口,两个端口固定间隔固定为 10000,所以在 docker 导出端口的地方需要暴露两个端口。
-
搭建 redis 集群时每个服务需要使用不同端口,刚开始每个 service 都使用默认的 6379 ,所以端口类似
- 7001:6379 - 17001:16379
,这样也是不行的。 -
redis-cli --cluster create
后面只能写 ip 地址,不能使用域名,本身想使用 service name 的,没想到官方的 redis 到目前为止还是不支持的,即使是最新的 redis6,但是有个第三方的作者实现了, "bitnami/redis-cluster" 是目前支持域名的 redis 集群镜像。由于我们是提供企业级服务不能使用非官方镜像,所以还是使用 ip。
docker-compose 配置
version: '3'
x-image:
&default-rds
redis:5.0.4
services:
r1:
image: *default-rds
command: redis-server /etc/redis/redis.conf
ports:
- 7001:6379
- 17001:16379
volumes:
- ./redis1.conf:/etc/redis/redis.conf
r2:
image: *default-rds
command: redis-server /etc/redis/redis.conf
ports:
- 7002:6379
- 17002:16379
volumes:
- ./redis2.conf:/etc/redis/redis.conf
r3:
image: *default-rds
command: redis-server /etc/redis/redis.conf
ports:
- 7003:6379
- 17003:16379
volumes:
- ./redis3.conf:/etc/redis/redis.conf
r4:
image: *default-rds
command: redis-server /etc/redis/redis.conf
ports:
- 7004:6379
- 17004:16379
volumes:
- ./redis4.conf:/etc/redis/redis.conf
r5:
image: *default-rds
command: redis-server /etc/redis/redis.conf
ports:
- 7005:6379
- 17005:16379
volumes:
- ./redis5.conf:/etc/redis/redis.conf
r6:
image: *default-rds
command: redis-server /etc/redis/redis.conf
ports:
- 7006:6379
- 17006:16379
volumes:
- ./redis6.conf:/etc/redis/redis.conf
x-$ 开头可以复用
redis conf 文件配置
redis.conf1 如下
port 7001
# 启用集群模式
cluster-enabled yes
# 后台运行
daemonize no
# 非保护模式
protected-mode no
创建集群
任意选择一个容器,使用 redis-cli 创建集群即可。
$ docker-compose exec r1 bash
$ redis-cli --cluster create 172.19.76.67:7001 172.19.76.67:7002 172.19.76.67:7003 172.19.76.67:7004 172.19.76.67:7005 172.19.76.67:7006 --cluster-replicas 1
172.19.76.67 为我的宿主机 ip
网友评论