创建一个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
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。