Docker配置redis和redis集群

拉取redis

docker pull redis

单机redis

准备目录和文件

  1. 创建目录: /usr/local/redis/conf
  2. 准备一份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集群

准备目录和文件

  1. 创建目录:/usr/local/redis-cluster/01/conf,
  2. 复制单节点的redis.conf到/usr/local/redis-cluster/01/conf目录下
  3. 将01目录复制为02,03,04,05,06

创建容器

集群规划节点名称端口
主节点redis-73797379
主节点redis-73807380
主节点redis-73817381
从节点redis-74797479
从节点redis-74807480
从节点redis-74817481
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
  1. –network=host: 指定docker容器的网络模式为host,也就是使用宿主机的IP的端口(所以不需要指定docker的端口映射)
  2. –port 7379: 启动时指定端口,覆盖了redis.conf中的配置
  3. –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
  1. -c:以集群方式登录
  2. -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集群配置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值