Eureka Server的高可用

这一节我们接着上一节说。

有分布式应用开发经验的朋友应该发现,前文编写的单节点Eureka Server并不适合线上生产环境。Eureka Client会定时连接Eureka Server,获取服务注册表中的信息并缓存到本地。微服务在消费远程API时总是使用本地缓存中的数据。因此一般来说,即使Eureka Server发生宕机,也不会影响服务之间的调用。但如果Eureka Server宕机时,某些微服务也发生了不可用的情况,Eureka Client中的缓存若不被更新,就可能会影响微服务调用,甚至影响整个应用系统的高可用性。因此,在生产环境中,通常会部署一个高可用的Eureka Server集群。

编写高可用Eureka Server

Eureka Server可以通过运行多个实例并相互注册的方式实现高可用部署,Eureka Server 实例会彼此增量地同步信息,从而确保所有节点数据一致。事实上,节点之间相互注册是Eureka Server的默认行为,还记的前文我们提到过的:

  eureka.client.registerWithEureka = false

  eureka.client.fetchRegistry = false

这俩都是默认true的。

这里我们在前文的基础上,构建一个双节点Eureka Server集群。

1.复制项目micrservice-discovery-eureka,将ArtifactId修改为microservice-discovery-eureka-ha。

2.配置系统的hosts,Window系统的hosts文件路径是C:\Windows\System32\drivers\etc\hosts;Linux及Mac OS等系统的文件路径是/etc/hosts。

    127.0.0.1 peer1 peer2

3.将application.yml修改如下,让两个节点的Eureka Server相互注册。

spring:
application:
name: microservice-discovery-eureka-ha
---
spring:
#指定profile=peer1
profiles: peer1
server:
port: 8761
eureka:
instance:
#指定当profile=peer1时,主机名是peer1
hostname: peer1
client:
serviceUrl:
# 将自己注册到peer2这个Eureka上面去
defaultZone: http://peer2:8762/eureka/
---
spring:
profiles: peer2
server:
port: 8762
eureka:
instance:
hostname: peer2
client:
serviceUrl:
defaultZone: http://peer1:8761/eureka/

如上,使用连字符(---)将该application.yml文件分为三段。第二段和第三段分别为spring.profiles指定了一个值,该值表示它所在的那段内容应用在哪个profile里。第一段由于并未指定spring.profiles,因此这段内容会对所有profile生效。

经过以上分析,不难理解,我们定义了peer1和peer2这两个profile。当应用以peer1这个profile启动时,配置该Eureka Server的主机名为peer1,并将其注册到http://peer2:8762/eureka/;反之,当应用以profile=peer2启动时,Eureka Server会注册到peer1节点的Eureka Server。

测试

1.打包项目,并使用以下命令启动两个EurekaServer节点。

java -jar microservice-discovery-eureka-ha-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer1

java -jar microservice-discovery-eureka-ha-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer2

  通过spring.profiles.active指定使用哪个profile启动。

2.访问http://peer1:8761,会发现“registered-replicas”中已有peer2节点;同理,访问http://peer2:8762,也能发现其中的“registered-replicas”中有peer1节点。

最后

还没结束,在说几句。

我们要将应用注册到Eureka Server集群上,我们只需要配置多个Eureka Server地址即可,例如:

defaultZone: http://peer1:8761/eureka/,http://peer2:8762/eureka/

直接用逗号隔开即可。

其实我们完全不用这样,就只配置一个就行,因为你eureka server集群不是数据同步的吗!!!

springcloud(四)-Eureka Server集群的更多相关文章

  1. SpringCloud升级之路2020.0.x版-20. 启动一个 Eureka Server 集群

    本系列代码地址:https://github.com/HashZhang/spring-cloud-scaffold/tree/master/spring-cloud-iiford 我们的业务集群结构 ...

  2. (2-2)SpringCloud-服务注册到Eureka Server集群并消费

    服务注册到Eureka Server集群 在(2-1)SpringCloue-Eureka实现高可用注册中心中我们搭建好了高可用的Eureka注册中心,下面我们要把服务注册到Eureka Server ...

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

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

  4. SpringCloud创建Eureka模块集群

    1.说明 本文详细介绍Spring Cloud创建Eureka模块集群的方法, 基于已经创建好的Spring Cloud Eureka Server模块, 请参考SpringCloud创建Eureka ...

  5. 配置 Eureka Server 集群

    简介 为了使 Eureka Server 实现高可用,我们需要为它配置集群.这样当有一台 Eureka Server 有故障时,集群中的其他 Server 可以进行代替.Eureka 集群之中的 No ...

  6. Spring Cloud之微服务注册到Eureka Server集群

    在Spring Cloud之服务注册中心搭建Eureka Server服务注册中⼼ - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)中已经搭建好了Eureka Server集群,本文就利用 ...

  7. SpringCloud之Eureka:集群搭建

    上篇文章<SpringCloud之Eureka:服务发布与调用例子>实现了一个简单例子,这次对其进行改造,运行两个服务器实例.两个服务提供者实例,服务调用者请求服务,使其可以进行集群部署. ...

  8. Spring Cloud Eureka Server集群Demo级搭建

    将上篇随笔Spring Cloud Eureka服务Demo级搭建进行改造,改造成一个在本机的伪集群 1.修改hosts文件(windows10 hosts文件位置:C:\Windows\System ...

  9. 3、Spring Cloud - Eureka(高可用Eureka Server集群)

    在实际的项目中,可能有几十个或者几百个的微服务实例,这时 Eureka Server 承担了非 常高的负载.由于 Eureka Server 在微服务架构中有着举足重轻的作用,所以需要对 Eureka ...

随机推荐

  1. Dom4j入门

    一.Dom4j API生成xml文件 @Test public void bulidXmlByDom4j(){ //创建document对象 Document document = DocumentH ...

  2. Java® Language Specification

    Java™ Platform, Standard Edition 8 API Specification http://docs.oracle.com/javase/8/docs/api/ The J ...

  3. SpringMvc与Struts2的对比

    目前企业中使用SpringMvc的比例已经远远超过Struts2,那么两者到底有什么区别,是很多初学者比较关注的问题,下面我们就来对SpringMvc和Struts2进行各方面的比较: 1.核心控制器 ...

  4. MySQL简单实现多字段模糊查询

    我所做的商城项目前些时提了新需求,要求前台搜索商品除了能通过商品名称搜索到以外,还可以通过别个信息搜索,比如:商品编号.详情内容描述等等,类似于全文搜索了.我首先想到的就是lucene,但是对代码这样 ...

  5. iperf 指令

    1. 测试UDP丢包率 30个现成以5Mbps速度测试60s iperf -u -c 目的IP -b 5M -P 30 -t 60 测试TCP丢包率 iperf -c 目的IP -b 5M -P 30 ...

  6. Cenots 7 Configure static IP

    For example: # cd /etc/sysconfig/ifcfg-enp3s0 # cat ifcfg-enp3s0 TYPE=EthernetBOOTPROTO=staticIPADDR ...

  7. [转载]MVC、MVP以及Model2(下)

    通过采用MVC模式,我们可以将可视化UI元素的呈现.UI处理逻辑和业务逻辑分别定义在View.Controller和Model中,但是对于三者之间的交互,MVC并没有进行严格的限制.最为典型的就是允许 ...

  8. 切图,css注意事项

    1.文字尽量不要独立放在div中,一般放在p,span中(显得不专业) 2.div给了width就不要用padding-left,padding-right:给了height就不给padding-to ...

  9. web api 跨域问题的解决办法

    在APP_Start文件夹下面的WebApiConfig.cs文件夹配置跨域 public static class WebApiConfig { public static void Registe ...

  10. Git命令行学习积累

    1.远程分支拉取到本地 $ git checkout -b develop origin/develop //检出远程的develop分支到本地 2.本地分支推送到远程 $ git checkout ...