ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

Docker Swarm 安装 Redis 集群(bitnami/redis-cluster:latest)

2021-11-16 15:01:02  阅读:363  来源: 互联网

标签:6379 redis 104.79 Redis 192.168 cluster slots


  1. 准备集群环境:docker-79docker-80docker-81
    在这里插入图片描述
  2. 拉取镜像:
docker pull bitnami/redis-cluster:latest

在这里插入图片描述
3. 在任意文件夹下新建 compose.yml 脚本:redis_compose.yml

异常

SELECT is not allowed in cluster mode

打开连接,提示:SELECT is not allowed in cluster mode
在这里插入图片描述
这是因为redis在单机模式下redis.conf配置文件中默认的数据库数量是16个,在集群模式下这个配置是不起作用的,集群客户端是不支持多数据库db的,只有一个数据库默认是SELECT 0;

redis集群版只使用db0,select命令虽然能够支持select 0。其他的db都会返回错误。
在这里插入图片描述

CLUSTERDOWN Hash slot not served

在这里插入图片描述
使用 cluster info 看下redis集群状态:
在这里插入图片描述
可以看到集群状态为 fail ,并且下面的槽点数是 0 ,这就很不正常了。

依次进入容器内部:docker exec -it 容器ID bash

执行:redis-cli -c -h 172.17.0.1 -p 6379

正常可以连接上redis,然后执行:cluster meet 172.17.0.1 6379

这个IP(172.17.0.1) 为docker 内部默认的网络IP:
在这里插入图片描述
如果没有密码,会直接提示OK 如果有密码 需要输入: auth redis密码
在这里插入图片描述
这个meet 命令就很秀,是为了让集群内部的节点互相认识下??? 那就接着操作另外两台服务器的IP,也让他们互相认识下。

走完这一步,发现并没有解决问题,尝试客户端写入值进去,仍然提示这个异常。

然后在容器内执行:redis-cli --cluster info 192.168.104.79:6379 -a huauN@2021 ,其中 huauN@2021 为 redis 集群密码,如果没有密码,则可以不用加 -a 密码 ,发现 slots 槽 为空,这就是为什么会上面的错误的问题了。

root@docker-80:/# redis-cli --cluster info 192.168.104.79:6379 -a huauN@2021
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
192.168.104.79:6379 (6ce9026c...) -> 0 keys | 0 slots | 0 slaves.
[OK] 0 keys in 1 masters.
0.00 keys per slot on average.
root@docker-80:/# 

接着使用 redis-cli --cluster fix 进行集群修复

root@docker-80:/# 
root@docker-80:/# redis-cli --cluster fix 192.168.104.79:6379 -a huauN@2021    
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
192.168.104.79:6379 (6ce9026c...) -> 0 keys | 0 slots | 0 slaves.
[OK] 0 keys in 1 masters.
0.00 keys per slot on average.
>>> Performing Cluster Check (using node 192.168.104.79:6379)
M: 6ce9026c9f438f8025323bf13787e43f08dc33bd 192.168.104.79:6379
   slots: (0 slots) master
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[ERR] Not all 16384 slots are covered by nodes.

>>> Fixing slots coverage...
The following uncovered slots have no keys across the cluster:
[0-16383]
Fix these slots by covering with a random node? (type 'yes' to accept): yes
>>> Covering slot 660 with 192.168.104.79:6379
>>> Covering slot 4315 with 192.168.104.79:6379
>>> Covering slot 13760 with 192.168.104.79:6379
>>> Covering slot 10315 with 192.168.104.79:6379

然后会让输入确认是否修复槽:Fix these slots by covering with a random node? (type 'yes' to accept):,这里输入 yes 就会自动修复槽了,等待滚动输出结束,看下节点信息,如下图,槽数量为16384,即为正常单节点槽数。
在这里插入图片描述
这时候,直接查看另外两台机器的槽点,可以看到,也都已经正常了。

在这里插入图片描述
这时,使用客户端连接测试redis 可正常使用:
在这里插入图片描述
另外两台机器上也自动存在该key:
在这里插入图片描述

这时,再看集群状态,也已经变成ok了:
在这里插入图片描述

标签:6379,redis,104.79,Redis,192.168,cluster,slots
来源: https://blog.csdn.net/linmengmeng_1314/article/details/121342821

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有