docker pull redis单机redis 准备目录和文件
- 创建目录: /usr/local/redis/conf准备一份redis.conf文件,并修改以下内容
# 将绑定ip注释,以便外部访问 #bind 127.0.0.1 # 关闭daemon模式 daemonize no # 关闭保护模式 protected-mode no
将修改后的redis.conf复制到宿主机的/usr/local/redis/conf目录下。
启动redisdocker run -d --name=myredis --privileged=true -p 6379:6379 -v /usr/local/redis/conf:/etc/redis/ -v /usr/local/redis/data:/data -v /usr/local/redis/logs:/var/log/redis -v /usr/local/redis:/var/lib/redis redis redis-server /etc/redis/redis.conf
查看容器启动情况最后一行是在启动容器时,执行redis-server命令,并使用/etc/redis/redis.conf 做为配置文件。
启动后,使用:docker ps,查看是否启动成功。
如果没有启动成功,可使用:docker logs myredis,查看容器启动日志,极有可能是目录权限不够。这时需要给目录添加权限: chmod -R 777 /usr/local/redis。
注意,在容器第一次启动时,会自动创建docker 参数-v中指定的需要挂载但是还没有创建的目录,所以需要在容器启动一次,将这此不存在的目录创建后,再给/usr/local/redis目录添加权限。
添加权限后,重新启动容器。
docker restart myredis进入redis容器的客户端
# 直接进入redis容器的客户端 docker exec -it myredis redis-cli # 或者先进入redis容器,再使用redis-cli进入客户端 docker exec -it myredis bash其他
可在/usr/local/redis/logs目录下查看redis.log启动日志。
集群配置创建一个3主3从的redis集群
准备目录和文件- 创建目录:/usr/local/redis-cluster/01/conf,复制单节点的redis.conf到/usr/local/redis-cluster/01/conf目录下将01目录复制为02,03,04,05,06
| 集群规划 | 节点名称 | 端口 |
|---|---|---|
| 主节点 | redis-7379 | 7379 |
| 主节点 | redis-7380 | 7380 |
| 主节点 | redis-7381 | 7381 |
| 从节点 | redis-7479 | 7479 |
| 从节点 | redis-7480 | 7480 |
| 从节点 | redis-7481 | 7481 |
docker run -d --name=redis-7379 --privileged=true --network=host -v /usr/local/redis-cluster/01/conf:/etc/redis/ -v /usr/local/redis-cluster/01/data:/data -v /usr/local/redis-cluster/01/logs:/var/log/redis -v /usr/local/redis-cluster/01:/var/lib/redis redis redis-server /etc/redis/redis.conf --port 7379 --cluster-enabled yes docker run -d --name=redis-7380 --privileged=true --network=host -v /usr/local/redis-cluster/02/conf:/etc/redis/ -v /usr/local/redis-cluster/02/data:/data -v /usr/local/redis-cluster/02/logs:/var/log/redis -v /usr/local/redis-cluster/02:/var/lib/redis redis redis-server /etc/redis/redis.conf --port 7380 --cluster-enabled yes docker run -d --name=redis-7381 --privileged=true --network=host -v /usr/local/redis-cluster/03/conf:/etc/redis/ -v /usr/local/redis-cluster/03/data:/data -v /usr/local/redis-cluster/03/logs:/var/log/redis -v /usr/local/redis-cluster/03:/var/lib/redis redis redis-server /etc/redis/redis.conf --port 7381 --cluster-enabled yes docker run -d --name=redis-7479 --privileged=true --network=host -v /usr/local/redis-cluster/04/conf:/etc/redis/ -v /usr/local/redis-cluster/04/data:/data -v /usr/local/redis-cluster/04/logs:/var/log/redis -v /usr/local/redis-cluster/04:/var/lib/redis redis redis-server /etc/redis/redis.conf --port 7479 --cluster-enabled yes docker run -d --name=redis-7480 --privileged=true --network=host -v /usr/local/redis-cluster/05/conf:/etc/redis/ -v /usr/local/redis-cluster/05/data:/data -v /usr/local/redis-cluster/05/logs:/var/log/redis -v /usr/local/redis-cluster/05:/var/lib/redis redis redis-server /etc/redis/redis.conf --port 7480 --cluster-enabled yes docker run -d --name=redis-7481 --privileged=true --network=host -v /usr/local/redis-cluster/06/conf:/etc/redis/ -v /usr/local/redis-cluster/06/data:/data -v /usr/local/redis-cluster/06/logs:/var/log/redis -v /usr/local/redis-cluster/06:/var/lib/redis redis redis-server /etc/redis/redis.conf --port 7481 --cluster-enabled yes
查看容器启动情况–network=host: 指定docker容器的网络模式为host,也就是使用宿主机的IP的端口(所以不需要指定docker的端口映射)–port 7379: 启动时指定端口,覆盖了redis.conf中的配置–cluster-enabled yes: 使用集群模式,覆盖了redis.conf中的配置
使用:docker ps, 查看容器启动情况。
如果没有启动成功,使用docker logs redis-7379查看原因,极有可能还是目录权限问题。
# 添加权限 chmod -R 777 /usr/local/redis-cluster # 重新启动 docker restart redis-7379 redis-7380 redis-7381 redis-7479 redis-7480 redis-7481创建集群
可参考:Redis集群配置
进入任意一个redis容器
docker exec -it redis-7379 bash
执行命令,创建集群
redis-cli --cluster create --cluster-replicas 1 192.168.10.121:7379 192.168.10.121:7380 192.168.10.121:7381 192.168.10.121:7479 192.168.10.121:7480 192.168.10.121:7481
注意要将IP地址替换为docker宿主机的IP地址
-–cluster-relicas: 集群副本数。 这里是1,是1主机1从机的模式,如果设置为2(即:2台从机)会失败。因为集群中至少要有3个主机,所以设置2台从机时,至少需要9个节点才可以。
最后的参数中列出全部的redis主机IP地址和端口号。
这时,看到提示:
>>> Performing hash slots allocation on 6 nodes... Master[0] -> Slots 0 - 5460 Master[1] -> Slots 5461 - 10922 Master[2] -> Slots 10923 - 16383 Adding replica 192.168.10.121:7480 to 192.168.10.121:7379 Adding replica 192.168.10.121:7481 to 192.168.10.121:7380 Adding replica 192.168.10.121:7479 to 192.168.10.121:7381 >>> Trying to optimize slaves allocation for anti-affinity [WARNING] Some slaves are in the same host as their master M: b9d01d8aebea6c8cd68054393941bc53d87c0a47 192.168.10.121:7379 slots:[0-5460] (5461 slots) master M: b9d01d8aebea6c8cd68054393941bc53d87c0a47 192.168.10.121:7380 slots:[5461-10922] (5462 slots) master M: b9d01d8aebea6c8cd68054393941bc53d87c0a47 192.168.10.121:7381 slots:[10923-16383] (5461 slots) master S: b9d01d8aebea6c8cd68054393941bc53d87c0a47 192.168.10.121:7479 replicates b9d01d8aebea6c8cd68054393941bc53d87c0a47 S: b9d01d8aebea6c8cd68054393941bc53d87c0a47 192.168.10.121:7480 replicates b9d01d8aebea6c8cd68054393941bc53d87c0a47 S: b9d01d8aebea6c8cd68054393941bc53d87c0a47 192.168.10.121:7481 replicates b9d01d8aebea6c8cd68054393941bc53d87c0a47 Can I set the above configuration? (type 'yes' to accept):
输入"yes"确认即可。系统提示会正在配置slot。
>>> 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.10.121:7379) M: 895f2c3d8b6c0e3bc9098bbad66facd7334c7238 192.168.10.121:7379 slots:[0-5460] (5461 slots) master 1 additional replica(s) S: 04667d8651e9e814c8280d0a20643a03eba25ea3 192.168.10.121:7479 slots: (0 slots) slave replicates f84b5434235e5f942c174a587099e67ca480510c S: e4156936afea6259dfff037a08e93cdf247d2c57 192.168.10.121:7480 slots: (0 slots) slave replicates 895f2c3d8b6c0e3bc9098bbad66facd7334c7238 S: 12862ccc89946cb427de1c4fb3807c05526a6c66 192.168.10.121:7481 slots: (0 slots) slave replicates 4e7f8030516953cc99485f12bd6e57cdef490f50 M: 4e7f8030516953cc99485f12bd6e57cdef490f50 192.168.10.121:7380 slots:[5461-10922] (5462 slots) master 1 additional replica(s) M: f84b5434235e5f942c174a587099e67ca480510c 192.168.10.121:7381 slots:[10923-16383] (5461 slots) master 1 additional replica(s) [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered.
通常会很快执行完毕。
检查集群redis-cli --cluster check 192.168.10.121:7379
可查看各个主节点的slot分配情况。
集群使用登录集群
redis-cli -c -p 7379
-c:以集群方式登录-p:可执行任意一个redis节点的ip和端口
登录后,可正常操作redis。使用:cluster nodes,可查看集群节点情况:
127.0.0.1:7379> cluster nodes 04667d8651e9e814c8280d0a20643a03eba25ea3 192.168.10.121:7479@17479 slave f84b5434235e5f942c174a587099e67ca480510c 0 1644680101000 3 connected e4156936afea6259dfff037a08e93cdf247d2c57 192.168.10.121:7480@17480 slave 895f2c3d8b6c0e3bc9098bbad66facd7334c7238 0 1644680100025 1 connected 895f2c3d8b6c0e3bc9098bbad66facd7334c7238 192.168.10.121:7379@17379 myself,master - 0 1644680099000 1 connected 0-5460 12862ccc89946cb427de1c4fb3807c05526a6c66 192.168.10.121:7481@17481 slave 4e7f8030516953cc99485f12bd6e57cdef490f50 0 1644680102054 2 connected 4e7f8030516953cc99485f12bd6e57cdef490f50 192.168.10.121:7380@17380 master - 0 1644680101039 2 connected 5461-10922 f84b5434235e5f942c174a587099e67ca480510c 192.168.10.121:7381@17381 master - 0 1644680100000 3 connected 10923-16383
注意:主节点7379对应的从节点不一定是7479。是系统自动分配的。
可参考:Redis集群配置



