第一篇:SpringCloud之服务的注册与发现(Eureka)介绍了服务注册与发现,其中服务注册中心Eureka Server,是一个实例,当成千上万个服务向它注册的时候,它的负载是非常高的,这在生产环境上是不太合适的,本文主要介绍怎么将Eureka Server集群化。
准备工作
Eureka通过运行多个实例,使其更具有高可用性。事实上,这是它默认的属性,你需要做的就是给对等的实例一个合法的关联Service Url。这篇文章我们基于第一篇文章的工程,来做修改。
改造工作
在sso-server工程中resources文件夹下,创建配置文件application-server1.yml:
server:
port: 8088
spring:
profiles: server1
eureka:
instance:
hostname: server1
client:
registerWithEureka: false
fetchRegistry: false
serviceUrl:
defaultZone: http://server2:8089/eureka/
并且创建另外一个配置文件application-server2.yml:
server:
port: 8089
spring:
profiles: server2
eureka:
instance:
hostname: server2
client:
registerWithEureka: false
fetchRegistry: false
serviceUrl:
defaultZone: http://server1:8088/eureka/
这时eureka-server就已经改造完毕。
根据官方文档的指示,需要改变etc/hosts,linux系统通过vim /etc/hosts ,加上:
127.0.0.1 peer1
127.0.0.1 peer2
windows电脑,在c:/windows/systems/drivers/etc/hosts 修改。
这时需要改造下sso-serviceA:
启动工程
启动sso-server:
java -jar sso-server-1.0-SNAPSHOT.jar --spring.profiles.active=server1
java -jar .\sso-server-1.0-SNAPSHOT.jar --spring.profiles.active=server2
启动sso-serviceA:
java -jar .\sso-serviceA-1.0-SNAPSHOT.jar
访问:localhost:8088,如图:
你会发现注册了serviceA,并且有个server2节点,同理访问localhost:8089你会发现有个server1节点。
client只向8088注册,但是你打开8089,你也会发现,8089也有 client的注册信息。
此时的架构图:
Eureka-server server1 8088,Eureka-server server2 8089相互感应,当有服务注册时,两个Eureka-server是对等的,它们都存有相同的信息,这就是通过服务器的冗余来增加可靠性,当有一台服务器宕机了,服务并不会终止,因为另一台服务存有相同的数据。
源码下载:https://github.com/chenjary/SpringCloud/tree/master/springcloud-eureka-cluster