在docker中部署redis cluster,解决Waiting for the cluster to join...问题和支持spring的访问

背景

在学习redis高级篇的时候,卡在了redis集群的部署。
因为教程不是基于docker进行部署的,所以自己在部署的时候遇到了一些问题,看到一些博客说了他们的做法但是我还是搭建不起来,然后看了redis.io的文档,也没有发现有docker部署的说明
所以自己静心梳理了一番。
跟着学的教程没有用docker部署,然后配置的时候没有配置

cluster-announce-** xxxxx

但是配置的是哨兵模式的

replica-announce-** xxxxx

所以搭建内部调试的时候没问题,但是spring连接不上
一番修改之后,出现搭建都搭不起来的现象

以下仅作本人学习过程的记录

遇到的问题

在使用命令创建集群的时候

redis-cli -a 密码 --cluster create --cluster-replicas 从节点数 ip1:port1 ip2:port2 

控制台出现以下阻塞信息

Waiting for the cluster to join
..................

经查阅,可能是各节点无法通信造成的,需要设置声明的对外的端口号+10000

问题解决

一共有6个节点
每个节点的端口都设置成6379
因为docker的隔离性
所以每个节点的配置文件都是下面这一份,直接复制

redis.conf配置文件

port 6379
bind 0.0.0.0
# 一定要手动打开集群模式
cluster-enabled yes
cluster-node-timeout 5000
dir ./
# 我设置需要密码访问
protected-mode yes
requirepass 123456

docker-compose.yml

说一下重点
1.我的网络模式是bridge模式
我使用过host模式
但是最后java访问节点失败
所以选择bridge模式

2.以下几行配置的关键性

 ports:
   # 容器内的端口与配置文件保持一致
    # 容器外的端口与下面声明的对外端口保持一致
   - 6379:6379
   # 容器内集群通信端口默认是配置的端口+10000
   # 容器外的集群通信端口与下面声明的对外集群通信端口保持一致
   - 16379:16379
 command: 
   - "redis-server" 
   - "/etc/redis/redis.conf"
   # 密码一定要配置且与配置文件的requirepass一致
   - "--masterauth 123456"
   # 集群对外声明的ip,用于集群的搭建和spring的访问
   # 这里需要设置为宿主机的ip,而且一定要配置
   - "--cluster-announce-ip 192.168.1.7"
   # 集群对外声明的端口,用于集群的搭建和spring的访问
   - "--cluster-announce-port 6379"
   # 集群对外声明的总线端口,用于集群之间通信
   # 一定要设置,否则创建集群的时候出现阻塞
   - "--cluster-announce-bus-port 16379"

集群搭建命令

进入某个docker容器中使用以下命令搭建
三主三从集群

redis-cli -a 123456 --cluster create --cluster-replicas 1 192.168.1.7:6379 192.168.1.7:6380 192.168.1.7:6381 192.168.1.7:6382 192.168.1.7:6383 192.168.1.7:6384

完整版docker-compose.yml

version: "3"
services:
 redis1:
  image: redis:7.0
  container_name: redis1
  ports:
   - 6379:6379 # 注意这里
   - 16379:16379 # 注意这里
  volumes:
   - ./redis1/redis.conf:/etc/redis/redis.conf
   - ./redis1/data:/data
  command: 
   - "redis-server" 
   - "/etc/redis/redis.conf"
   - "--masterauth 123456"
   - "--cluster-announce-ip 192.168.1.7"
   - "--cluster-announce-port 6379" # 注意这里
   - "--cluster-announce-bus-port 16379" # 注意这里
  networks:
    - redis-net

 redis2:
  image: redis:7.0
  container_name: redis2
  ports:
   - 6380:6379 # 注意这里
   - 16380:16379 # 注意这里
  volumes:
   - ./redis2/redis.conf:/etc/redis/redis.conf
   - ./redis2/data:/data
  command: 
   - "redis-server" 
   - "/etc/redis/redis.conf"
   - "--masterauth 123456"
   - "--cluster-announce-ip 192.168.1.7"
   - "--cluster-announce-port 6380" # 注意这里
   - "--cluster-announce-bus-port 16380" # 注意这里
  networks:
    - redis-net

 redis3:
  image: redis:7.0
  container_name: redis3
  ports:
   - 6381:6379 # 注意这里
   - 16381:16379 # 注意这里
  volumes:
   - ./redis3/redis.conf:/etc/redis/redis.conf
   - ./redis3/data:/data
  command: 
   - "redis-server" 
   - "/etc/redis/redis.conf"
   - "--masterauth 123456"
   - "--cluster-announce-ip 192.168.1.7"
   - "--cluster-announce-port 6381" # 注意这里
   - "--cluster-announce-bus-port 16381" # 注意这里
  networks:
    - redis-net

 slave1:
  image: redis:7.0
  container_name: slave1
  ports:
   - 6382:6379 # 注意这里
   - 16382:16379 # 注意这里
  volumes:
   - ./slave1/redis.conf:/etc/redis/redis.conf
   - ./slave1/data:/data
  command: 
   - "redis-server" 
   - "/etc/redis/redis.conf"
   - "--masterauth 123456"
   - "--cluster-announce-ip 192.168.1.7"
   - "--cluster-announce-port 6382" # 注意这里
   - "--cluster-announce-bus-port 16382" # 注意这里
  networks:
    - redis-net

 slave2:
  image: redis:7.0
  container_name: slave2
  ports:
   - 6383:6379 # 注意这里
   - 16383:16379 # 注意这里
  volumes:
   - ./slave2/redis.conf:/etc/redis/redis.conf
   - ./slave2/data:/data
  command: 
   - "redis-server" 
   - "/etc/redis/redis.conf"
   - "--masterauth 123456"
   - "--cluster-announce-ip 192.168.1.7"
   - "--cluster-announce-port 6383" # 注意这里
   - "--cluster-announce-bus-port 16383" # 注意这里
  networks:
    - redis-net

 slave3:
  image: redis:7.0
  container_name: slave3
  ports:
   - 6384:6379
   - 16384:16379
  volumes:
   - ./slave3/redis.conf:/etc/redis/redis.conf
   - ./slave3/data:/data
  command: 
   - "redis-server" 
   - "/etc/redis/redis.conf"
   - "--masterauth 123456"
   - "--cluster-announce-ip 192.168.1.7"
   - "--cluster-announce-port 6384" # 注意这里
   - "--cluster-announce-bus-port 16384" # 注意这里
  networks:
    - redis-net

networks:
  redis-net:
    driver: bridge
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值