最终会创建以下6个容器构成集群
容器名称 容器IP地址 映射端口号 服务运行模式
redis-node1 172.17.26.187 6379 master
redis-node2 172.17.26.187 6380 master
redis-node3 172.17.26.187 6381 master
redis-node4 172.17.26.187 6382 slave
redis-node5 172.17.26.187 6383 slave
redis-node6 172.17.26.187 6384 slave
啥也不多说,这篇直接上步骤...
1、拉取镜像
docker pull redis:6.0.10
2、创建6个容器
docker create --name redis-node1 --net host -v /data/redis-data/node1:/data redis:6.0.10 --cluster-enabled yes --cluster-config-file nodes-node-1.conf --port 6379
docker create --name redis-node2 --net host -v /data/redis-data/node2:/data redis:6.0.10 --cluster-enabled yes --cluster-config-file nodes-node-2.conf --port 6380
docker create --name redis-node3 --net host -v /data/redis-data/node3:/data redis:6.0.10 --cluster-enabled yes --cluster-config-file nodes-node-3.conf --port 6381
docker create --name redis-node4 --net host -v /data/redis-data/node4:/data redis:6.0.10 --cluster-enabled yes --cluster-config-file nodes-node-4.conf --port 6382
docker create --name redis-node5 --net host -v /data/redis-data/node5:/data redis:6.0.10 --cluster-enabled yes --cluster-config-file nodes-node-5.conf --port 6383
docker create --name redis-node6 --net host -v /data/redis-data/node6:/data redis:6.0.10 --cluster-enabled yes --cluster-config-file nodes-node-6.conf --port 6384
部分参数解释:
--cluster-enabled
:是否启动集群,选值:yes 、no
--cluster-config-file
配置文件.conf
:指定节点信息,自动生成
--cluster-node-timeout
毫秒值: 配置节点连接超时时间
--appendonly
:是否开启持久化,选值:yes、no
这里指定了 --net
网络类型为 host
,主要是这样就不需要端口映射了,比如 -p 6379:6379,因为此时需要对外共享容器端口服务,所以只需要指定对外暴露的端口 -p 6379、-p 6380 等。
执行结果如下:
3、启动容器
docker start redis-node1 redis-node2 redis-node3 redis-node4 redis-node5 redis-node6
4、组建 Redis 集群
# 随便进入一个容器,这里以 redis-node1 实例为例
docker exec -it redis-node1 /bin/bash
# 组建集群,172.17.26.187为当前物理机的ip地址
redis-cli --cluster create 172.17.26.187:6379 172.17.26.187:6380 172.17.26.187:6381 172.17.26.187:6382 172.17.26.187:6383 172.17.26.187:6384 --cluster-replicas 1
执行结果如下:
创建成功后,通过 redis-cli 查看一下集群节点信息:
ok,三从三主搭建完成了。。。
5、关于Redis集群搭建
首先简单说明下刚才的添加节点的命令
redis-cli --cluster create 172.17.26.187:6379~6384 --cluster-replicas 1
--cluster-replicas 1
:参数后面的数字表示的是主从比例
,比如这里的 1 表示的是主从比例是 1:1,什么意思?
答: 1 个主节点对应几个从节点,现有 6 个实例,所以主从分配就是 3 个 master 主节点,3 个 slave 从节点;那么如果 --cluster-replicas 2
意思就是主从比例为 1:2,也就是说 1 个主节点对于应 2 个从节点,即:3(master) + 6(slave) = 9个 Redis 实例。
注:主节点最少3个,3个才能保证集群的健壮性。
如果不足 9个 Redis 实例,但是参数指定为 2 会怎么样?
嗯。。。这里不展示了,自己去试试吧,错误信息会很明显。