5分钟 在Mac下Docker部署redis集群
- 在自定目录新建文件 redis.conf ,如 /Users/xx/apps/redis/redis.conf
- 将redis.conf的内容设置为:
bind 0.0.0.0
daemonize no
requirepass 123456
masterauth 123456
cluster-enabled yes
cluster-node-timeout 3000
- 打开终端,输入命令启动容器:
docker run -d --name redis-node1 -v /Users/xx/apps/redis/redis.conf:/etc/redis/redis.conf -p 6379:6379 -p 16379:16379 redis --cluster-enabled yes --port 6379
docker run -d --name redis-node2 -v /Users/xx/apps/redis/redis.conf:/etc/redis/redis.conf -p 6380:6380 -p 16380:16380 redis --cluster-enabled yes --port 6380
docker run -d --name redis-node3 -v /Users/xx/apps/redis/redis.conf:/etc/redis/redis.conf -p 6381:6381 -p 16381:16381 redis --cluster-enabled yes --port 6381
ps: 16379、16380、16381端口用于接收心跳数据等操作
- 输入命令查看容器启动状况
docker ps -a
# 如果出错使用以下命令查看日志
docker logs <容器id>
结果如下:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
28d1c4e926ec redis "docker-entrypoint.s…" 2 seconds ago Up 2 seconds 0.0.0.0:6381->6381/tcp, 6379/tcp, 0.0.0.0:16381->16381/tcp redis-node3
866d9e2a25a8 redis "docker-entrypoint.s…" 3 seconds ago Up 2 seconds 0.0.0.0:6380->6380/tcp, 6379/tcp, 0.0.0.0:16380->16380/tcp redis-node2
affc69c3a254 redis "docker-entrypoint.s…" 4 seconds ago Up 3 seconds 0.0.0.0:6379->6379/tcp, 0.0.0.0:16379->16379/tcp redis-node1
- 进入6379的容器
docker exce -it redis-node1 /bin/bash
- 构建集群关系
# 将192.168.3.150更改为你的宿主机ip 使用`ifconfig | grep 192.168` 查看
# 这里不是3主3从 所以--cluster-replicas 设为0
redis-cli --cluster create 192.168.3.150:6379 192.168.3.150:6380 192.168.3.150:6381 --cluster-replicas 0
输入yes后结果如下:按照默认策略分配哈希插槽
root@affc69c3a254:/data# redis-cli --cluster create 192.168.3.150:6379 192.168.3.150:6380 192.168.3.150:6381 --cluster-replicas 0
>>> Performing hash slots allocation on 3 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
M: 5638c95b0776f3b89ca2a67ffe687f283e672dc4 192.168.3.150:6379
slots:[0-5460] (5461 slots) master
M: 5ba855988ee638bfc759d8dfc1e9546e11c9e701 192.168.3.150:6380
slots:[5461-10922] (5462 slots) master
M: 30e817801455070b12715c347c761bfd5ae38448 192.168.3.150:6381
slots:[10923-16383] (5461 slots) master
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join
.
>>> Performing Cluster Check (using node 192.168.3.150:6379)
M: 5638c95b0776f3b89ca2a67ffe687f283e672dc4 192.168.3.150:6379
slots:[0-5460] (5461 slots) master
M: 5ba855988ee638bfc759d8dfc1e9546e11c9e701 172.17.0.3:6380
slots:[5461-10922] (5462 slots) master
M: 30e817801455070b12715c347c761bfd5ae38448 172.17.0.4:6381
slots:[10923-16383] (5461 slots) master
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
- 使用
redis-cli -c
命令在集群模式登录 redis,然后就可以愉快玩耍了
root@affc69c3a254:/data# redis-cli -c
127.0.0.1:6379> set str1 a
OK
127.0.0.1:6379> set str2 b
-> Redirected to slot [9547] located at 172.17.0.3:6380
OK
172.17.0.3:6380> set str3 c
-> Redirected to slot [13674] located at 172.17.0.4:6381
OK
172.17.0.4:6381> get str2
-> Redirected to slot [9547] located at 172.17.0.3:6380
"b"