【问题标题】:Turbine can only find one host when using dockerTurbine 使用 docker 时只能找到一台主机
【发布时间】:2016-10-22 00:48:09
【问题描述】:

我有 3 个项目:一个 hystrix 仪表板、一个涡轮服务器(使用 AMQP)和一个 API

当我开始使用开发环境时,我设置了 2 个 API 实例(使用端口 8080 和 8081)。为了测试涡轮机聚合,我拨打了电话,在仪表板中,我可以看到Hosts: 2
虽然当我使用 Docker 时,即使负载均衡器命中 2 台服务器,我也只能在 hystrix 仪表板上看到一台主机。

我的假设:
1- 由于两个容器都从同一个端口 (8080) 开始,Turbine 将它们视为一个
2-因为我也 dockerize RabbitMQ,这可能会导致问题

这是我的docker-compose.yml 文件

version: '2'
    services:
      postgres:
        image: postgres:9.5
        ports:
          - "5432"
        environment:
          POSTGRES_PASSWORD: postgres
          POSTGRES_USER: postgres
          POSTGRES_DB: fq
        volumes:
          - /var/lib/postgresql

      rabbitmq:
        image: rabbitmq:3-management
        ports:
          - "5672"
          - "15672"
        environment:
          RABBITMQ_DEFAULT_USER: turbine
          RABBITMQ_DEFAULT_PASS: turbine
        volumes:
          - /var/lib/rabbitmq/

      hystrix:
        build: hystrixdashboard/.
        links:
          - turbine_server
        ports:
          - "8989:8989"

      turbine_server:
        build: turbine/.
        links:
          - rabbitmq
        ports:
          - "8090:8090"

      persona_api:
        build: persona/.
        ports:
          - "8080"
        links:
          - postgres
          - rabbitmq

      lb:
        image: 'dockercloud/haproxy:1.5.1'
        links:
          - persona_api
        volumes:
          - /var/run/docker.sock:/var/run/docker.sock
        ports:
          - 80:80

我的persona_api 配置文件

 spring:
  application:
    name: persona_api
  profiles:
    active: dev
  rabbitmq:
    addresses: 127.0.0.1:5672
    username: turbine
    password: turbine
    useSSL: false

server:
  compression.enabled: true
  port: ${PORT:8080}

params:
  datasource:
    driverClassName: org.postgresql.Driver
    username: postgres
    password: postgres
    maximumPoolSize: 10
    poolName: fq_connection_pool

spring.jpa:
  show-sql: true
  hibernate:
    ddl-auto: update

turbine:
  aggregator:
    clusterConfig: persona_api
  appConfig: persona_api

---

spring:
  profiles: dev

params:
  datasource:
    jdbcUrl: jdbc:postgresql://127.0.0.1:5432/fq
---

spring:
  profiles: docker
  rabbitmq:
    addresses: rabbitmq:5672

params:
  datasource:
    jdbcUrl: jdbc:postgresql://postgres:5432/fq

恐怕如果我将它部署到生产环境(在 Rancher 或 Docker 云上),我会看到同样的问题。

这是我设置两个负载平衡的 API 时发生的 GIF 动图

【问题讨论】:

    标签: java spring-boot turbine spring-cloud-netflix spring-cloud-stream


    【解决方案1】:

    尝试:

    hystrix.stream.queue.send-id=false
    

    在您的 API 中

    【讨论】:

      【解决方案2】:

      我认为您的问题是您正在使用的 RabbitMQ 连接。因为您使用的连接字符串是 localhost,但实际上除了 RabbitMQ 容器之外,连接将在 localhost 上可用。我建议您使用环境变量将 Rabbit 主机注入您的 Spring 连接。如果我正确阅读了您的文件,则应该是 ${RABBITMQ_PORT_5672_TCP_ADDR} 而不是 localhost。但请注意,我无法尝试。这只是一个有根据的猜测。当一切都在运行时,您最好在您的 persona_api 容器中执行 env 仔细检查。

      【讨论】:

      • 我可能错过了整个配置:实际上,在 application.yml 中,我确实有一个使用 spring 配置文件“docker”的 dockerized rabbitmq 条目,我的 persona_api 的入口点是 ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-Dspring.profiles.active=docker","-jar","/app.jar"] 所以我指向正确的地址...我
      • 啊抱歉,配置被切断了。您能否检查一下 Rabbit 是否看到所有客户端,以确定问题是连接问题还是报告问题。
      • 我对所有连接使用相同的用户名 (turbine),我可以在 RabbitMQ 上看到 3 个连接,但通道看起来很奇怪,我认为:i.imgur.com/4WmeW11.png 我不应该只看到一个频道?他们共享这个频道,所有服务器?对于队列,我只有一个:springCloudHystrixStream.xxxxxx
      • 确实这看起来很奇怪。但更让我担心的是,只有一个连接处于活动状态,其他连接处于空闲状态。您是否检查过您的 LB 机制是否正常工作?我对经典涡轮机也有类似的问题,因为没有流量意味着没有hystrix.stream
      • 那些空闲的连接我猜这很正常...没有流量,连接空闲。我也赌 LB...我会检查并告诉你
      【解决方案3】:

      应该解决你的问题。

      eureka:
        instance:
          prefer-ip-address: true
          instance-id: ${spring.cloud.client.ipAddress}:${server.port}  #make the application unique on the rancher service layer
      spring:
        application:
          index: ${random.uuid} #make the application unique on the rancher containe layer,same service but with multi-instances.
      

      https://github.com/spring-cloud/spring-cloud-netflix/issues/740

      需要 instance-id:${spring.cloud.client.ipAddress}:${server.port} 和 index: ${random.uuid} 两者

      【讨论】:

        猜你喜欢
        • 2020-01-26
        • 2017-04-30
        • 2014-12-08
        • 2018-02-06
        • 2020-07-19
        • 1970-01-01
        • 1970-01-01
        • 2014-07-19
        相关资源
        最近更新 更多