1. 回顾

  上一篇博客中,实现了单节点的Eureka Server。Eureka Client会定时连接Eureka Server,获取注册表中的信息并缓存到本地。微服务在消费远程API时总是使用本地缓存中的数据。因此一般来说,即使Eureka Server发生宕机,也不会影响到服务之间的调用。但如果Eureka Server宕机时,某些微服务也出现了不可用的情况,Eureka Server中的缓存若不被刷新,就可能会影响到微服务的调用,甚至影响到整个应用系统的高可用。因此,在生成环境中,通常会部署一个高可用的Eureka Server集群。

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

2. 构建一个双节点的Eureka Server集群

  > 复制项目microservice-discovery-eureka,将ArtifactId修改为microservice-discovery-eureka-ha01

  > 复制项目microservice-discovery-eureka,将ArtifactId修改为microservice-discovery-eureka-ha02

  > 修改hosts文件,在windows平台下,进入目录:C:\Windows\System32\drivers\etc,然后用管理员权限打开hosts文件,添加一条记录

127.0.0.1 peer1 peer2

  > 修改microservice-discovery-eureka-ha01的配置文件application.yml

server:
port:
eureka:
instance:
hostname: peer1
client:
service-url:
defaultZone: http://peer2:8763/eureka # 设置与Eureka Server交互的地址,查询服务和注册服务都需要依赖这个地址。
spring:
application:
name: microservice-discovery-eureka-ha

  > 修改microservice-discovery-eureka-ha02的配置文件application.yml

server:
port:
eureka:
instance:
hostname: peer2
client:
service-url:
defaultZone: http://peer1:8762/eureka # 设置与Eureka Server交互的地址,查询服务和注册服务都需要依赖这个地址。
spring:
application:
name: microservice-discovery-eureka-ha

  > 两个项目的spring.application.name必须相同,eureka.instance.hostname必须不同,否则都会失败。(至少我测试的是这样)

  > 启动两个项目,访问:http://peer1:8762/http://peer2:8763/ ,此时registered-replicas(已注册分片)都有另一个系统的url地址,并且都在available-replicase(可用分片)中

3. 将微服务注册到Eureka Server集群上 

  > 修改microservice-provider-user中的配置文件application.yml,将eureka.client.service-url.defaultZone改为http://peer1:8762/eureka/。

eureka:
client:
service-url:
defaultZone: http://peer1:8762/eureka/

  > 修改microservice-consumer-movie中的配置文件application.yml,将eureka.client.service-url.defaultZone改为http://peer1:8762/eureka/,http://peer2:8763/eureka/。

eureka:
client:
service-url:
defaultZone: http://peer1:8762/eureka/,http://peer2:8763/eureka

  > 先启动Eureka Server集群,再启动这两个微服务。访问:http://peer1:8762/http://peer2:8763/。发现这两个微服务都注册在了集群里。

    说明即使微服务只配置Eureka Server集群中的某个节点,也能正常注册到Eureka Server集群,因为多个Eureka Server之间的数据会相互同步。

    不过为适应某些极端场景,建议在客户端配置多个Eureka Server节点。

4.  总结

  前面几篇博客讲的Eureka Server都是允许匿名访问的。

  下一篇博客将讲解为Eureka Server添加用户认证。敬请期待~~~

5. 参考

  周立 --- 《Spring Cloud与Docker微服务架构与实战》

最新文章

  1. [Django]模型学习记录篇--基础
  2. struts2一些概念介绍和标签的使用
  3. Winform开发框架之参数配置管理功能实现-基于SettingsProvider.net的构建
  4. Python类的实例属性详解
  5. samba的简单用法总结
  6. Linq的简单查询
  7. 插件和过滤器装饰器开发中的感悟-python-django
  8. [LeetCode][Python]17: Letter Combinations of a Phone Number
  9. linuxsvn源代码版本库建立
  10. python学习05
  11. 微信小程序 页面跳转方式
  12. MySQL面试题中:主从同步的原理
  13. ES 6 系列 - 变量声明
  14. POJ1251(Kruskal水题)
  15. IP地址查询接口API
  16. Delphi: TGraphicControl支持PaintTo方法
  17. How to temporally disable IDE tools (load manually)
  18. linux 配置阿里云yum库
  19. 《Linux内核分析》第三周学习笔记
  20. flume在windows环境下的使用

热门文章

  1. Codeforces Gym 101775D Mr. Panda and Geometric Sequence(2017-2018 ACM-ICPC Asia East Continent League Final,D题,枚举剪枝)
  2. 磁盘镜像工具Guymager
  3. 程设刷题 | 编译C++文件出现to_string is not a member of std 或者 to_string was not declared in this scope的解决方法
  4. Jackson反序列JSON为实体对象出现:no String-argument constructor/factory method to deserialize from String value的问题
  5. sqlserver 出现sql被锁时,查看加锁和被锁的sql
  6. MSSQL收缩事务日志&日志文件过大无法收缩
  7. Matlab中ismember用法
  8. Springboot默认加载application.yml原理以及扩展
  9. andriod 读取通讯录
  10. 查看sqlserver的端口号