首页 > 数据库 >Docker Swarm 安装 Redis 集群(bitnami/redis-cluster:latest)

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

时间:2022-12-02 15:01:39浏览次数:43  
标签:6379 redis Redis 192.168 cluster docker slots


  1. 准备集群环境:​​docker-79​​​、​​docker-80​​​、​​docker-81​
  2. Docker Swarm 安装 Redis 集群(bitnami/redis-cluster:latest)_redis


  3. 拉取镜像:
docker pull bitnami/redis-cluster:latest

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


3. 在任意文件夹下新建 compose.yml 脚本:​​redis_compose.yml​

异常

SELECT is not allowed in cluster mode

打开连接,提示:​​SELECT is not allowed in cluster mode​

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


这是因为redis在单机模式下redis.conf配置文件中默认的数据库数量是16个,在集群模式下这个配置是不起作用的,集群客户端是不支持多数据库db的,只有一个数据库默认是SELECT 0;redis集群版只使用db0,select命令虽然能够支持select 0。其他的db都会返回错误。

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

CLUSTERDOWN Hash slot not served

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


使用 ​​cluster info​​ 看下redis集群状态:

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


可以看到集群状态为 ​​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:

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


如果没有密码,会直接提示​​OK​​​ 如果有密码 需要输入: ​​auth redis密码​

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


这个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,即为正常单节点槽数。

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


这时候,直接查看另外两台机器的槽点,可以看到,也都已经正常了。

Docker Swarm 安装 Redis 集群(bitnami/redis-cluster:latest)_数据库_10


这时,使用客户端连接测试redis 可正常使用:

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


另外两台机器上也自动存在该key:

Docker Swarm 安装 Redis 集群(bitnami/redis-cluster:latest)_数据库_12

这时,再看集群状态,也已经变成ok了:

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


标签:6379,redis,Redis,192.168,cluster,docker,slots
From: https://blog.51cto.com/linmengmeng/5907042

相关文章

  • Docker 搭建redis集群-三台机机器、三主三从
    1.拉取redis镜像这里我使用的是之前打包的镜像,redis版本是:​​6.2.0​​直接拉取也行:dockerpullredis:latest三台服务器:​​192.168.104.79​​​、​​192.168.104.80​......
  • Redis 持久化 RDB
    RDB持久化是把当前进程数据生成快照保存到硬盘的过程,触发RDB持久化过程分为手动触发和自动触发。手动触发分别对应save和bgsave命令:·save命令:阻塞当前Redis服务器,线......
  • Windows下Redis安装与配置的两种方式
    原文链接:https://blog.csdn.net/HQqHQhqqhq/article/details/127903697安装和配置RedisRedis的安装有两种安装形式,一种是安装包式,另一种是压缩包注意:windows没有32位的,所......
  • (收藏)Java中使用Jedis操作Redis
    使用Java操作Redis需要jedis-2.1.0.jar如果需要使用Redis连接池的话,还需commons-pool-1.5.4.jarpackagecom.test;importjava.util.HashMap;import......
  • Redis中的单线程多路复用的一个通俗解析
    在尚学堂的课程中,有个不错的单线程多路复用的通俗解析,觉得不错:其实就是黄牛买票,黄牛是单线程了,但他能服务很多买票的人,买票的人也不需要去等待的 ......
  • Redis缓存雪崩
    缓存处理流程接收到查询数据请求时,优先从缓存中查询,若缓存中有数据,则直接返回,若缓存中查不到则从DB中查询,将查询的结果更新到缓存中,并返回查询结果,若DB中查不到,则返回空数据......
  • 基于Redis的Stream结构作为消息队列,实现异步秒杀下单
    需求:创建一个Stream类型的消息队列,名为stream.orders修改之前的秒杀下单Lua脚本,在认定有抢购资格后,直接向stream.orders中添加消息,内容包含voucherId、userId、order......
  • Redis消息队列
    什么是消息队列:字面意思就是存放消息的队列。最简单的消息队列模型包括3个角色:消息队列:存储和管理消息,也被称为消息代理(MessageBroker)生产者:发送消息到消息队列......
  • SpringCloud (五) - 云服务器Centos7.6,安装JDK,Maven,Mysql,Redis
    1、购买云服务器购买地址:https://cloud.tencent.com/act/pro/2022double11_warmup后面的环境都是基于此环境Centos7.6;2、安装SecureCRT和SecureFX2.1SecureCRT教......
  • 面试题系列:Redis 夺命连环11问
      1.说说Redis基本数据类型有哪些吧 1.字符串:redis没有直接使用C语言传统的字符串表示,而是自己实现的叫做简单动态字符串SDS的抽象类型。C语言的字符串不记录自......