0
点赞
收藏
分享

微信扫一扫

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

郝春妮 2022-12-02 阅读 173


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


  3. 拉取镜像:

docker pull bitnami/redis-cluster:latest

Docker Swarm 安装 Redis 集群(bitnami/redis-cluster:latest)_数据库_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)_IP_03


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

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

CLUSTERDOWN Hash slot not served

Docker Swarm 安装 Redis 集群(bitnami/redis-cluster:latest)_IP_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)_数据库_07


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

Docker Swarm 安装 Redis 集群(bitnami/redis-cluster:latest)_docker_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)_数据库_09


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

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


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

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


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

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

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

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


举报

相关推荐

0 条评论