拉取redis
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目录下。
启动redis
docker 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集群配置