5分钟 在Mac下Docker部署redis集群

  1. 在自定目录新建文件 redis.conf ,如 /Users/xx/apps/redis/redis.conf
  2. 将redis.conf的内容设置为:
bind 0.0.0.0
daemonize no
requirepass 123456
masterauth 123456        
cluster-enabled yes
cluster-node-timeout 3000
  1. 打开终端,输入命令启动容器:
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端口用于接收心跳数据等操作

  1. 输入命令查看容器启动状况
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
  1. 进入6379的容器
docker exce -it redis-node1 /bin/bash
  1. 构建集群关系
# 将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.
  1. 使用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"