getClusterConnection.clusterGetNodes 始终返回 1 个节点

问题描述 投票:0回答:1

我的配置如下:

spring.data.redis.password=...
spring.data.redis.username=default
spring.data.redis.ssl.enabled=false
spring.data.redis.cluster.nodes=127.0.0.1:16379,127.0.0.1:17379,127.0.0.1:18379,127.0.0.1:19379,127.0.0.1:20379,127.0.0.1:21379

豆子看起来像:

@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
    RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
    redisTemplate.setConnectionFactory(redisConnectionFactory);
    redisTemplate.setKeySerializer(new StringRedisSerializer());
    redisTemplate.setHashKeySerializer(new StringRedisSerializer());
    redisTemplate.setHashKeySerializer(new JdkSerializationRedisSerializer());
    redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer());
    redisTemplate.setEnableTransactionSupport(true);
    redisTemplate.afterPropertiesSet();
    return redisTemplate;
}

docker-compose 看起来像:

version: '3.8'

services:
  redis-node-0:
    image: docker.io/bitnami/redis-cluster:7.2
    volumes:
      - ./redis-data/redis-cluster_data-0:/bitnami/redis/data
    ports:
      - "${REDIS_CLUSTER_PORT_0}:${REDIS_CLUSTER_PORT_0}"
    environment: &redis-environment
      REDIS_CLUSTER_DYNAMIC_IPS: no
      REDIS_PORT_NUMBER: ${REDIS_CLUSTER_PORT_0}
      REDIS_CLUSTER_ANNOUNCE_PORT: ${REDIS_CLUSTER_PORT_0}
      REDIS_PASSWORD: ${REDIS_MASTER_PASSWORD}
      REDIS_USERNAME: ${REDIS_CLI_USER}
      #REDIS_DISABLE_DEFAULT_USER: true
      REDIS_CLUSTER_ANNOUNCE_IP: ${REDIS_MASTER_HOST}
      REDIS_NODES: redis-node-0:${REDIS_CLUSTER_PORT_0} redis-node-1:${REDIS_CLUSTER_PORT_1} redis-node-2:${REDIS_CLUSTER_PORT_2} redis-node-3:${REDIS_CLUSTER_PORT_3} redis-node-4:${REDIS_CLUSTER_PORT_4} redis-node-5:${REDIS_CLUSTER_PORT_5}

  redis-node-1:
    image: docker.io/bitnami/redis-cluster:7.2
    volumes:
      - ./redis-data/redis-cluster_data-1:/bitnami/redis/data
    ports:
      - "${REDIS_CLUSTER_PORT_1}:${REDIS_CLUSTER_PORT_1}"
    environment:
      <<: *redis-environment
      REDIS_PORT_NUMBER: ${REDIS_CLUSTER_PORT_1}
      REDIS_CLUSTER_ANNOUNCE_PORT: ${REDIS_CLUSTER_PORT_1}

  redis-node-2:
    image: docker.io/bitnami/redis-cluster:7.2
    volumes:
      - ./redis-data/redis-cluster_data-2:/bitnami/redis/data
    ports:
      - "${REDIS_CLUSTER_PORT_2}:${REDIS_CLUSTER_PORT_2}"
    environment:
      <<: *redis-environment
      REDIS_PORT_NUMBER: ${REDIS_CLUSTER_PORT_2}
      REDIS_CLUSTER_ANNOUNCE_PORT: ${REDIS_CLUSTER_PORT_2}

  redis-node-3:
    image: docker.io/bitnami/redis-cluster:7.2
    volumes:
      - ./redis-data/redis-cluster_data-3:/bitnami/redis/data
    ports:
      - "${REDIS_CLUSTER_PORT_3}:${REDIS_CLUSTER_PORT_3}"
    environment:
      <<: *redis-environment
      REDIS_PORT_NUMBER: ${REDIS_CLUSTER_PORT_3}
      REDIS_CLUSTER_ANNOUNCE_PORT: ${REDIS_CLUSTER_PORT_3}

  redis-node-4:
    image: docker.io/bitnami/redis-cluster:7.2
    volumes:
      - ./redis-data/redis-cluster_data-4:/bitnami/redis/data
    ports:
      - "${REDIS_CLUSTER_PORT_4}:${REDIS_CLUSTER_PORT_4}"
    environment:
      <<: *redis-environment
      REDIS_PORT_NUMBER: ${REDIS_CLUSTER_PORT_4}
      REDIS_CLUSTER_ANNOUNCE_PORT: ${REDIS_CLUSTER_PORT_4}

  redis-node-5:
    image: docker.io/bitnami/redis-cluster:7.2
    volumes:
      - ./redis-data/redis-cluster_data-5:/bitnami/redis/data
    ports:
      - "${REDIS_CLUSTER_PORT_5}:${REDIS_CLUSTER_PORT_5}"
    depends_on:
      - redis-node-0
      - redis-node-1
      - redis-node-2
      - redis-node-3
      - redis-node-4
    environment:
      <<: *redis-environment
      REDIS_PORT_NUMBER: ${REDIS_CLUSTER_PORT_5}
      REDIS_CLUSTER_ANNOUNCE_PORT: ${REDIS_CLUSTER_PORT_5}
      REDISCLI_AUTH: ${REDIS_CLI_USER}
      REDIS_CLUSTER_REPLICAS: 1
      REDIS_CLUSTER_CREATOR: yes



volumes:
  redis-cluster_data-0:
    driver: local
  redis-cluster_data-1:
    driver: local
  redis-cluster_data-2:
    driver: local
  redis-cluster_data-3:
    driver: local
  redis-cluster_data-4:
    driver: local
  redis-cluster_data-5:
    driver: local

最后当我尝试通过以下方式获取所有节点时:

    redisTemplate.getConnectionFactory().getClusterConnection()
            .clusterGetNodes()
            .forEach(x -> System.out.println(x.getHost() + ":" + x.getPort()));

它总是返回 1 个节点,如

127.0.0.1:19379
。好的,每次运行节点都会发生变化,但我的期望是 6 个节点。有什么建议吗?

spring-data-redis
1个回答
0
投票

解决了添加总线端口的问题和重要注意:

bus-port = redis-port + 10000
否则它不起作用

这是我最终的 docker-compose:

version: '3.8'


services:
  redis-node-0:
    image: docker.io/bitnami/redis-cluster:7.2
    volumes:
      - ./redis-data/redis-cluster_data-0:/bitnami/redis/data
    ports:
      - "${REDIS_CLUSTER_PORT_0}:${REDIS_CLUSTER_PORT_0}"
      - "${REDIS_CLUSTER_BUS_PORT_0}:${REDIS_CLUSTER_BUS_PORT_0}"
    environment: &redis-environment
      BITNAMI_DEBUG: true
      #ALLOW_EMPTY_PASSWORD: yes
      REDIS_CLUSTER_DYNAMIC_IPS: no
      REDIS_PORT_NUMBER: ${REDIS_CLUSTER_PORT_0}
      REDIS_CLUSTER_ANNOUNCE_PORT: ${REDIS_CLUSTER_PORT_0}
      REDIS_CLUSTER_ANNOUNCE_BUS_PORT: ${REDIS_CLUSTER_BUS_PORT_0}
      REDIS_PASSWORD: ${REDIS_MASTER_PASSWORD}
      #REDIS_USERNAME: ${REDIS_CLI_USER}
      #REDIS_DISABLE_DEFAULT_USER: true
      REDIS_CLUSTER_ANNOUNCE_IP: ${REDIS_MASTER_HOST}
      REDIS_NODES: redis-node-0:${REDIS_CLUSTER_PORT_0} redis-node-1:${REDIS_CLUSTER_PORT_1} redis-node-2:${REDIS_CLUSTER_PORT_2} redis-node-3:${REDIS_CLUSTER_PORT_3} redis-node-4:${REDIS_CLUSTER_PORT_4} redis-node-5:${REDIS_CLUSTER_PORT_5}

  redis-node-1:
    image: docker.io/bitnami/redis-cluster:7.2
    volumes:
      - ./redis-data/redis-cluster_data-1:/bitnami/redis/data
    ports:
      - "${REDIS_CLUSTER_PORT_1}:${REDIS_CLUSTER_PORT_1}"
      - "${REDIS_CLUSTER_BUS_PORT_1}:${REDIS_CLUSTER_BUS_PORT_1}"
    environment:
      <<: *redis-environment
      REDIS_PORT_NUMBER: ${REDIS_CLUSTER_PORT_1}
      REDIS_CLUSTER_ANNOUNCE_PORT: ${REDIS_CLUSTER_PORT_1}
      REDIS_CLUSTER_ANNOUNCE_BUS_PORT: ${REDIS_CLUSTER_BUS_PORT_1}

  redis-node-2:
    image: docker.io/bitnami/redis-cluster:7.2
    volumes:
      - ./redis-data/redis-cluster_data-2:/bitnami/redis/data
    ports:
      - "${REDIS_CLUSTER_PORT_2}:${REDIS_CLUSTER_PORT_2}"
      - "${REDIS_CLUSTER_BUS_PORT_2}:${REDIS_CLUSTER_BUS_PORT_2}"
    environment:
      <<: *redis-environment
      REDIS_PORT_NUMBER: ${REDIS_CLUSTER_PORT_2}
      REDIS_CLUSTER_ANNOUNCE_PORT: ${REDIS_CLUSTER_PORT_2}
      REDIS_CLUSTER_ANNOUNCE_BUS_PORT: ${REDIS_CLUSTER_BUS_PORT_2}

  redis-node-3:
    image: docker.io/bitnami/redis-cluster:7.2
    volumes:
      - ./redis-data/redis-cluster_data-3:/bitnami/redis/data
    ports:
      - "${REDIS_CLUSTER_PORT_3}:${REDIS_CLUSTER_PORT_3}"
      - "${REDIS_CLUSTER_BUS_PORT_3}:${REDIS_CLUSTER_BUS_PORT_3}"
    environment:
      <<: *redis-environment
      REDIS_PORT_NUMBER: ${REDIS_CLUSTER_PORT_3}
      REDIS_CLUSTER_ANNOUNCE_PORT: ${REDIS_CLUSTER_PORT_3}
      REDIS_CLUSTER_ANNOUNCE_BUS_PORT: ${REDIS_CLUSTER_BUS_PORT_3}

  redis-node-4:
    image: docker.io/bitnami/redis-cluster:7.2
    volumes:
      - ./redis-data/redis-cluster_data-4:/bitnami/redis/data
    ports:
      - "${REDIS_CLUSTER_PORT_4}:${REDIS_CLUSTER_PORT_4}"
      - "${REDIS_CLUSTER_BUS_PORT_4}:${REDIS_CLUSTER_BUS_PORT_4}"
    environment:
      <<: *redis-environment
      REDIS_PORT_NUMBER: ${REDIS_CLUSTER_PORT_4}
      REDIS_CLUSTER_ANNOUNCE_PORT: ${REDIS_CLUSTER_PORT_4}
      REDIS_CLUSTER_ANNOUNCE_BUS_PORT: ${REDIS_CLUSTER_BUS_PORT_4}

  redis-node-5:
    image: docker.io/bitnami/redis-cluster:7.2
    volumes:
      - ./redis-data/redis-cluster_data-5:/bitnami/redis/data
    ports:
      - "${REDIS_CLUSTER_PORT_5}:${REDIS_CLUSTER_PORT_5}"
      - "${REDIS_CLUSTER_BUS_PORT_5}:${REDIS_CLUSTER_BUS_PORT_5}"
    depends_on:
      - redis-node-0
      - redis-node-1
      - redis-node-2
      - redis-node-3
      - redis-node-4
    environment:
      <<: *redis-environment
      REDIS_PORT_NUMBER: ${REDIS_CLUSTER_PORT_5}
      REDIS_CLUSTER_ANNOUNCE_PORT: ${REDIS_CLUSTER_PORT_5}
      REDIS_CLUSTER_ANNOUNCE_BUS_PORT: ${REDIS_CLUSTER_BUS_PORT_5}
      REDISCLI_AUTH: ${REDIS_MASTER_PASSWORD}
      REDIS_CLUSTER_REPLICAS: 1
      REDIS_CLUSTER_CREATOR: yes


  redis-insight:
    image: redis/redisinsight:latest
    container_name: redis-insight
    restart: always
    ports:
      - "${REDIS_INSIGHT_PORT}:5540"
    volumes:
      - ./redis-data/redisinsight:/data



volumes:
  redis-cluster_data-0:
    driver: local
  redis-cluster_data-1:
    driver: local
  redis-cluster_data-2:
    driver: local
  redis-cluster_data-3:
    driver: local
  redis-cluster_data-4:
    driver: local
  redis-cluster_data-5:
    driver: local
© www.soinside.com 2019 - 2024. All rights reserved.