0006. docker consul安装以及集成springcloud H 踩坑

docker 安装 consul

  1. 拉取镜像
[root@centos7docker ~] docker pull consul:1.6.1
[root@centos7docker ~] docker images
REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
docker.io/consul          1.6.1               48b314e920d6        8 months ago        116 MB
  1. 运行镜像
[root@centos7docker ~] docker run --name consul-01 -d -p 8500:8500 -p 8300:8300 -p 8301:8301 -p 8302:8302 -p 8600:8600 consul:1.6.1 agent -dev -server -bootstrap-expect 1 -ui -bind=0.0.0.0 -client=0.0.0.0
8500 http 端口,用于 http 接口和 web ui
8300 server rpc 端口,同一数据中心 consul server 之间通过该端口通信
8301 serf lan 端口,同一数据中心 consul client 通过该端口通信
8302 serf wan 端口,不同数据中心 consul server 通过该端口通信
8600 dns 端口,用于服务发现
-bbostrap-expect 2: 集群至少两台服务器,才能选举集群leader,单机环境设为 1 即可
-ui:运行 web 控制台
-bind: 监听网口,0.0.0.0 表示所有网口,如果不指定默认未127.0.0.1,则无法和容器通信
-client: 限制某些网口可以访问
-dev: 以开发模式启动
  1. 获取 consul-01 的 ip 地址
[root@centos7docker ~] docker inspect --format '{{ .NetworkSettings.IPAddress }}' consul-01
172.17.0.5
  1. 启动第二个 consul 服务(-join 指定ip, 加入到已有的集群中)
[root@centos7docker ~] docker run --name consul-02 -d -p 8501:8500 -e CONSUL_BIND_INTERFACE=eth0 consul:1.6.1 agent -server -ui -bind=0.0.0.0 -client=0.0.0.0 -join 172.17.0.5
  1. 防火墙开放 8500 端口
[root@centos7docker ~] firewall-cmd --zone=public --add-port=3306/tcp --permanent
[root@centos7docker ~] firewall-cmd --reload
  1. web 界面
    在这里插入图片描述

删除无效服务、无效节点

删除无效服务
http://127.0.0.1:8500/v1/agent/service/deregister/cloud-provider-payment-consul-8006
cloud-provider-payment-consul-8006 : 实例 id (CheckID)
method : put

删除无效节点
http://127.0.0.1:8500/v1/v1/agent/force-leave/4b36b27317a0

springBoot 2.2 / springCloud H 注册服务到 Consul1.6.1踩坑

在这里插入图片描述
服务调用异常

2020-06-01 22:52:07.635 ERROR 11648 --- [p-nio-80-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.IllegalStateException: No instances available for cloud-provider-payment-consul] with root cause

java.lang.IllegalStateException: No instances available for cloud-provider-payment-consul
	at org.springframework.cloud.netflix.ribbon.RibbonLoadBalancerClient.execute(RibbonLoadBalancerClient.java:119) ~[spring-cloud-netflix-ribbon-2.2.1.RELEASE.jar:2.2.1.RELEASE]

查看日志发现这个问题

2020/06/01 14:49:15 [WARN] agent: Check "service:cloud-consumer-order-consul-80" HTTP request failed: Get http://M5CT1JAXBTOFLPZ:80/actuator/health: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

2020/06/01 14:49:19 [WARN] agent: Check "service:cloud-provider-payment-consul-8006" HTTP request failed: Get http://M5CT1JAXBTOFLPZ:8006/actuator/health: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

一顿百度、google,发现是 SpringBoot服务和Consul不在同一台导致Consul访问不到SpringBoot的服务。
需要在 application 配置文件添加配置

spring.cloud.consul.discovery.prefer-ip-address=true	# 表示注册时使用IP而不是hostname

spring.cloud.consul.discovery.ip-address=192.168.1.123   # SpringBoot服务所在的ip(非必填)

springboot consul 配置详解

依赖

<!-- 引入 consul 所有相关依赖 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-consul-all</artifactId>
</dependency>

点击进入查看所有相关依赖,可根据需求具体引入

<dependencies>
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-consul-bus</artifactId>
      <version>2.2.1.RELEASE</version>
      <scope>compile</scope>
    </dependency>
    <!--使用 Consul 配置信息时需要引入 spring-cloud-starter-consul-config 依赖-->
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-consul-config</artifactId>
      <version>2.2.1.RELEASE</version>
      <scope>compile</scope>
    </dependency>
    <!--服务注册发现-->
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-consul-discovery</artifactId>
      <version>2.2.1.RELEASE</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-configuration-processor</artifactId>
      <version>2.2.2.RELEASE</version>
      <scope>compile</scope>
      <optional>true</optional>
    </dependency>
  </dependencies>

application.properties部分相关配置

spring.cloud.consul.host:配置consul地址
spring.cloud.consul.port:配置consul端口
spring.cloud.consul.discovery.service-name:服务名称
spring.cloud.consul.discovery.enabled:启用服务发现
spring.cloud.consul.discovery.register:启用服务注册
spring.cloud.consul.discovery.deregister:服务停止时取消注册
spring.cloud.consul.discovery.prefer-ip-address:表示注册时使用IP而不是hostname
spring.cloud.consul.discovery.health-check-interval:健康检查频率
spring.cloud.consul.discovery.health-check-path:健康检查路径
spring.cloud.consul.discovery.health-check-critical-timeout:健康检查失败多长时间后,取消注册
spring.cloud.consul.discovery.instance-id:服务注册标识

本人使用的配置信息,仅供参考 application.yml

spring:
  application:
    name: cloud-provider-payment-consul
  cloud:
    consul:
      host: 192.168.1.11
      port: 8500
      discovery:
        service-name: ${spring.application.name}
        prefer-ip-address: true   # 表示注册时使用IP而不是hostname
        enabled: true       # 启用服务发现
        register: true      # 启用服务注册
        deregister: true    # 表示停止时取消注册
        health-check-interval: 10s            # 健康检查频率
        health-check-critical-timeout: 30s    # 健康检查失败多长时间后,取消注册
        health-check-path: /actuator/health   # 健康检查路径
#        instance-id: ${spring.application.name}:${spring.cloud.client.ip-address}:${server.port} # Consul 注册服务 ID 应用名称+服务器IP+端口 默认artifactId
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值