考虑到注册中心的高可用,今天搭建一下eureka集群,并在中途遇到一些小的坑,前前后后花了两个小时来排除,在这里记录一下,以供后面查看。

  首先,贴上要达到的效果:

  一、起两个eureka模拟集群,在DS Replicas中显示集群中的其他成员。

  二、在注册服务列表中正确显示我们注册了两个注册中心。

  三、available-replicas中正确显示集群中的其他注册中心。

  

  

  1、用IP而非主机名配置注册服务。

  最开始,我并不想使用主机名来注册服务中心,我想直接使用IP,然后在服务的status一栏显示ip和端口信息,而不是显示电脑用户名。这一栏的显示由参数eureka.instance.instance-id控制。我按照之前的做法将这个属性设置为

  ${spring.cloud.client.ipAddress}:${server.port}

  但在启动服务后发现status中描述变成了“${spring.cloud.client.ipAddress}:8762”,${spring.cloud.client.ipAddress}属性并没有读取到,经过查阅发现在Finchley版本中,这个变量改名为了spring.cloud.client.ip-address。配置之后,成功显示了ip:port的形式。

  但在后续的配置中,无论如何配置其他选项,上面提到要达到的目标中的第一点和第三点都无法正常完成,所以只能放弃用IP配置的想法,后续有时间仔细学习源码的时候再来看这一点吧。就修改hosts将IP映射为主机名eureka1和eureka2。

  2、第二个发生的问题是,available-replicas不正常显示。(已经是采用的服务主机名的形式注册了,非IP形式)

  这个问题出在eureka.instance.appname这个参数,集群每个副本的这个属性必须一样。我在网上看到有的文章讲的是application配置文件中的spring.application.name属性要一样,这个说法应该是不完全正确的。当用户未配置appname时,spring cloud会优先使用spring.application.name来覆盖此值,所以造成了这个误解。

  后面我也做了实验,当两个副本spring.application.name不同,但appname相同时,也会被识别为可用的并正常显示。此种情况下eureka也会将这两个不同spring.application.name的服务识别为同一个服务的不同副本,而不会根据spring.application.name将其视为不同服务。

  接下来的这一点,也是available-replicas正常显示的条件之一。

  3、为实现高可用,注册中心必须注册自己。

  即eureka.client.registerWithEureka和eureka.client.fetchRegistry两个属性,不能设置为false。这两个属性默认为true,只要不手动设置为false,服务就会想注册中心注册自己。

  所有的服务注册时,eureka.client.serviceUrl.defaultZone必须指向所有的注册中心,不然部署高可用的中心就没有意义了。当注册中心注册自己的时候,这个属性可以不包含自身的地址。

  另外需要注意的是,第一个注册中心启动的时候,会抛出一个错误:

  com.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known server

  这是因为它在试图向指定的注册中心注册自己的时候,目标中心还没有启动。这个错误无伤大雅,因为eureka的注册是有心跳的,等目标中心启动之后,这个服务会在下一次心跳的时候自动注册进去。

 

spring cloud配置高可用eureka时遇到的一些坑的更多相关文章

  1. 使用Spring Cloud搭建高可用服务注册中心

    我们需要的,不仅仅是一个服务注册中心而已,而是一个高可用服务注册中心. 上篇博客[使用Spring Cloud搭建服务注册中心]中我们介绍了如何使用Spring Cloud搭建一个服务注册中心,但是搭 ...

  2. spring-cloud配置高可用eureka服务端

    spring-cloud配置eureka服务端 eureka用来发现其他程序 依赖 <?xml version="1.0" encoding="UTF-8" ...

  3. spring boot 2.0.3+spring cloud (Finchley)1、搭建服务注册和发现组件Eureka 以及构建高可用Eureka Server集群

    一 .搭建Eureka 编写Eureka Server 由于有多个spring boot项目,采用maven多module的结构,项目结构如下: 新建一个maven主工程,在主maven的pom文件中 ...

  4. spring cloud 服务注册中心eureka高可用集群搭建

    spring cloud 服务注册中心eureka高可用集群搭建 一,准备工作 eureka可以类比zookeeper,本文用三台机器搭建集群,也就是说要启动三个eureka注册中心 1 本文三台eu ...

  5. 高可用Eureka注册中心配置说明(双机部署)

    目  录 1. 高可用EureKa注册中心示意图 2. Eureka实例相互注册配置 3. 微服务注册到Eureka配置 4. 启动步骤及配置成功检查 5. 说明事项 1. 高可用EureKa注册中心 ...

  6. Spring Cloud配置中心(Config)

    Spring Cloud配置中心(Config) Spring Cloud是现在流行的分布式服务框架,它提供了很多有用的组件.比如:配置中心.Eureka服务发现. 消息总线.熔断机制等. 配置中心在 ...

  7. spring cloud 配置纲要Properties

    名称 默认 描述 encrypt.fail-on-error true 标记说,如果存在加密或解密错误,进程将失败. encrypt.key   对称密钥.作为一个更强大的替代方案,考虑使用密钥库. ...

  8. spring cloud 2.x版本 Eureka Server服务注册中心教程

    本文采用Spring cloud本文为2.1.8RELEASE,version=Greenwich.SR3 1.创建服务注册中心 1.1 新建Spring boot工程:eureka-server 1 ...

  9. spring cloud实战 1-高可用注册中心

    创建父maven项目 提交代码至GitHub 创建eureka-server-1 项目搭建两种方式: 父pom中继承spring-boot-starter-parent,子pom中直接结成父pom.该 ...

随机推荐

  1. xls到xml

      protected void btn_ok_Click(object sender, EventArgs e)     {         string x = txtpath.Text;     ...

  2. [Web Service] Tutorial Basic Concepts

    WSDL是网络服务描述语言,是一个包含关于web service信息(如方法名,方法参数)以及如何访问它. WSDL是UDDI的一部分. 作为web service 应用程序之间的接口,发音为wiz- ...

  3. Flutter采坑之路 用真机跑起来的时候提示 initGradle失败,IO异常,downloading Gradle-4.6-all.zip失败

    这个异常就是Gradle下载异常,进而下面会提示一行IO异常 我这里的原因就是Gradle对应的4.6-all版本下载不下来(一般情况下确实很难下载下来) 所以在正常AS工程呢,我们选择一下Gradl ...

  4. 记一次mybatis bindingexception 问题排查

    看到的错误信息如出一辙都是这样的:Method threw 'org.apache.ibatis.binding.BindingException' exception.Invalid bound s ...

  5. Windos消息驱动

    当Window是向程序发送消息时,它调用程序中的一个函数,这个函数用来描述Windows发送的消息,成为窗口函数或消息处理函数.他是一个自定义的回调函数: LRESULT CALLBACK Windo ...

  6. ajax提交不进入后台报415错误

    Unsupported Media Type错误 问题所在为后台缺包和xml配置文档缺配置或配置不正确: Jackson的依赖问题,spring3.x和spring4.x是不同的: spring3.x ...

  7. vmware12启动centos6.8报错ACPI:memory_hp:Memory online failed

    报错信息 打开后出现黑屏上只显示 ACPI:memory_hp:Memory online failed for 0x10000000 - 0x80000000 BUG: soft lockup - ...

  8. python web 2

    思路整理 过程:请求豆瓣电影 top 250 url='https://movie.douban.com/' 结果:得到网页的html 源码 (保存为hml文件 就可以用浏览器打开) 提示: Loca ...

  9. zookeeper应用与原理学习总结

    一.什么是zookeeper Zookeeper 分布式服务框架是Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务.状态同步服务.集群 ...

  10. ng-packagr 打包报错 Public property X of exported class has or is using name 'Observable' from external module “/rxjs/internal/Observable” but cannot be named

    old import { Injectable } from '@angular/core'; import { BehaviorSubject } from 'rxjs'; @Injectable( ...