栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Docker配置redis和redis集群

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Docker配置redis和redis集群

拉取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-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
    –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集群配置

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/746732.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号