SpringCloud项目之Eureka高可用集群

创建一个Eureka高可用集群:

编写这个集群非常简单,只需修改单实例Eureka Server的配置即可:先搭建一个Eureka server,然后更改application.yml配置如下:

spring:
  application:
    name: EurekaServer  # 指定注册到eureka server上的服务名称
---
#yml文件中支持使用三个短横线分割文档块  不同的文档块表示不同的配置
spring:
  profiles: peer1
server:
  port: 8761
eureka:
  instance:
    hostname: peer1 #指定当profile=peer1时,主机名是peer1
  client:
    serviceUrl:
      defaultZone: http://peer2:8762/eureka  # 将自己注册到peer2这个Eureka上面去 指定eureka server通信地址

---
spring:
  profiles: peer2
server:
  port: 8762
eureka:
  instance:
    hostname: peer2
  client:
    serviceUrl:
      defaultZone: http://peer1:8761/eureka/

  

其中的---代码不同的文档块,与写成两份yml配置文件功能相同。

为系统配置主机名:

  • 如果两个Eureka Server实例在同一台机器上启动,那么配置hosts的这一步不能少。原因:Eureka Server对端口是不敏感的,这意味着,如果直接用IP的形式(例如地址写成http://127.0.0.1:8761/eureka/)相互注册,Eureka Server误认为两个Eureka Server实例是一个实例——这会造成Eureka Server首页显示不正常等一系列问题!!
  • vim /etc/hosts
    # 添加如下内容
    127.0.0.1 peer1 peer2

    对于Windows系统,则修改C:windowssystem32driversetchosts文件

          Eureka Server对端口是不敏感的,这意味着,如果直接用IP的形式(例如地址写成http://127.0.0.1:8761/eureka/)相互注册,Eureka Server误认为两个Eureka Server实例是一个实例——这会造成Eureka Server首页显示不正常等一系列问题!!

启动Eureka Server服务

IDEA 点击下图所示图标,点击Edit Configurations,添加多个应用,通过设置--spring.profiles.active=?来表示读取哪一份配置文件:

 两个应用,peer1 读取配置是peer1的,peer2读取配置是peer2的:

分别启动两个应用:

 在浏览器输入http://localhost:8762/ 与 http://localhost:8761/

可见两个应用都启动成功:

集群已经创建好了,那么怎么将应用注册集群上呢?

将应用注册到Eureka Server集群上

创建一个Eureka Client服务,只须修改eureka.client.serviceUrl.defaultZone,配置上面的多个Eureka Server地址,就可以将其注册到Eureka Server集群了。

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

微服务即使只配置Eureka Server集群中的某个节点,也能正常注册到Eureka Server集群,因为多个Eureka Server之间的数据会相互同步,正常情况下,这种方式与配置多个Server节点的效果是一样的。但是需要注意的是,如果所有的client 都是只通过一个Server进行注册,如果注册的那台server挂掉了,那么后续的client就无法再注册上来,重启Client后也无法再注册到eureka上来。容易造成单点故障。

到此Eureka的高可用集群就完成了。

下面再解释一下Eureka Server 与Eureka Client:

Eureka 包含server和client两个基本组件,以下摘自Netflix的描述 
引用

Eureka 提供两种组件,
一是基于REST形式,用来提供负载均衡和中间层服务故障转移的Eureka server;
二是一个基于Java的客户端,可以用来更好的server交互,Eureka client包含一个內建的基于round-robin(轮询)的负载均衡策略。

对于我们的微服务应用,除了Eureka之外的都可配置eureka client属性,也就是说它们都是eureka client。

原文地址:https://www.cnblogs.com/yunyunde/p/11195296.html