17 Consul 常见问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了17 Consul 常见问题相关的知识,希望对你有一定的参考价值。

参考技术A

(1)节点和服务注销 当服务或者节点失效,

Consul不会对注册的信息进行剔除处理,仅仅标记已状态进行标记(并且不可使 用)。如果担心失效节点和失效服务过多影响监控。可以通过调用HTTP API的形式进行处理

节点和服务的注销可以使用HTTP API:

如果某个节点不继续使用了,也可以在本机使用consul leave命令,或者在其它节点使用consul force�leave 节点Id。

(2)健康检查与故障转移

在集群环境下,健康检查是由服务注册到的Agent来处理的,那么如果这个Agent挂掉了,那么此节点 的健康检查就处于无人管理的状态。

从实际应用看,节点上的服务可能既要被发现,又要发现别的服务,如果节点挂掉了,仅提供被发现的 功能实际上服务还是不可用的。当然发现别的服务也可以不使用本机节点,可以通过访问一个Nginx实 现的若干Consul节点的负载均衡来实现。

Spring Cloud Consul 和 Consul Clients dockerized

【中文标题】Spring Cloud Consul 和 Consul Clients dockerized【英文标题】:Spring Cloud Consul and Consul Clients dockerized 【发布时间】:2020-05-18 22:23:18 【问题描述】:

我有 2 个应用程序,都是使用 spring boot 编写的。两者都在不同的 docker 容器中运行。我也有领事在不同的 docker 容器中运行。我使用 docker-compose.yml 文件为 consul 公开了端口 8500。那么,我如何指定我的 Spring Boot 应用程序在哪里注册自己,即 consul 在哪里运行。我要给出映射端口的地址(映射到我的本地机器的端口),还是进行一些其他更改?

我现在使用的例子:https://github.com/Java-Techie-jt/cloud-consul-service-discovery

编辑:

docker-compose.yml:

version: "2"

services:
  consul:
    container_name: consul
    image: consul
    expose:
      - "8300"
      - "8400"
      - "8500"
    restart: always
  registrator:
    container_name: registrator
    image: gliderlabs/registrator:master
    volumes:
      - "/var/run/docker.sock:/tmp/docker.sock"
    command: -internal consul://consul:8500
    restart: always
    depends_on:
      - consul
  web1:
    image: deis/mock-http-server
    container_name: web1
    expose:
      - "8080"
    environment:
      SERVICE_NAME: "web"
      SERVICE_TAGS: "web"
    restart: always
    depends_on:
      - registrator
  web2:
    image: deis/mock-http-server
    container_name: web2
    expose:
      - "8080"
    environment:
      SERVICE_8080_NAME: "web"
      SERVICE_8080_TAGS: "web"
    restart: always
    depends_on:
      - registrator
  haproxy:
    build: ./haproxy
    container_name: my-haproxy
    image: anthcourtney/haproxy-consul
    ports:
      - 80
    depends_on:
      - web1
      - web2
  test:
    container_name: test-client
    build: ./test
    depends_on:
      - haproxy

networks:
  default:

【问题讨论】:

【参考方案1】:

您可以将注册器用于您的服务注册。 Registrator 通过在容器上线时检查容器来自动注册和注销任何 Docker 容器的服务。 Registrator 支持可插拔的服务注册中心,目前包括 Consul、etcd 和 SkyDNS 2。 您可以将注册器作为容器运行。它将注册您应用程序的每个端口。以下是示例撰写文件:-

  version: '2'
  services:
  registrator:
    image: "$REGISTRYgliderlabs/registrator:latest"
    command: [
      "-ip=<docker-host-ip>",
      "-retry-attempts", "100",
      "-cleanup",
      # "-internal",
      "consul://vconsul:8500"
    ]

官方文档:https://gliderlabs.github.io/registrator/latest/

【讨论】:

我已编辑问题以包含我的 docker-compose.yml 文件。在此,我计划用我的 2 个 Spring Boot 应用程序替换模拟 http 服务器。所以,你告诉我我只需要更改镜像(包括构建),注册器会在容器上线(制作)时自动将它们注册到 consul。在 application.properties 中不需要任何额外的配置,只需指定它将运行的端口就足够了。 你只需要添加注册服务。它将注册您的撰写文件中提供的所有其他服务。它将使用服务名称和服务端口进行注册。所以多个服务可以有相同的图像。你不需要做任何额外的事情,只需在你的撰写文件中添加注册者。 欢迎。如果你觉得这有帮助,请投赞成票:) 另外,在他们的官方网站上,注册器的用法如下:注册器监视新的 Docker 容器并检查它们以确定它们提供的服务。就我们的目的而言,服务是侦听端口的任何东西。 Registrator 在容器上找到的任何服务都将被添加到服务注册中心,例如 Consul 或 etcd。那么,我们是否必须添加注解 @EnableDiscoveryClient 将服务添加到服务发现或自动添加所有服务? 所有服务都会自动添加为注册器监听docker事件。

以上是关于17 Consul 常见问题的主要内容,如果未能解决你的问题,请参考以下文章

consul-nomad的WEB UI

使用ansible创建consul集群的问题

带有 Consul 的 Spring Boot 执行器

Spring Boot 应用程序的 Consul 服务发现问题

consul什么是consul

Prometheus + Consul:为每个 Consul 服务器创建 2 个目标(复制目标)