SpringCloud搭建eureka注册中心集群

eureka搭建集群就是搭建好几个eureka,然后将彼此之间相互注册,并且将其他服务注册到所有eureka中

一、idea下配置eureka一个服务的两个实例**

下列步骤请严格按照我的步骤来,后面会解释:

1、Edit configuration,复制一份EurekaServer

VEX8F1.md.png

将Name改为EurekaServer2

2、启动服务

  • 先将EurekaServer的配置按照如下图修改:修改端口号为10087,service-url:的值中的端口号为10086

VEXoYq.md.png

  • 然后启动EurekaServer,UserApplication,ConsumerApplication三个服务(启动顺序可以是先启动EurekaServer,在启动其他两个,也可以随便启动)
  • 然后再次修改EurekaServer的application.yml配置文件,将端口号改为10086,service-url:的值中的端口号为10087

VEjtNn.md.png

  • 启动EurekaServer2

访问eureka

http://localhost:10087/
http://localhost:10086/

VEjXgf.md.png
VEjO8P.md.png

可以发现eureka-server中有两个实例。

如果刚开始没有,就等一会儿,eureka注册中心注册是有时间的,可以到控制台看EurekaServer的打印日志信息,在不停的变,就说明在注册,一般过30s就刷新就能出现。

解释

  • Q:我们复制了两份configuration,为什么在左侧文件导航栏中,cloud-demo中只有一个EurekaServer呢?

  • A:不论你复制多少分Configuration,文件都只有一个,我么把另一个名字改为EurekaServer2,是这个配置的名字,但是在application.yml这个服务的名字还是叫eureka-server,这是一个服务的多个实例(这里是eureka-server服务的两个实例),这一点在http://localhost:10086/页面也能显示出来:UP (2)

  • Q:我们为什么总是修改一个配置文件,不是有两个实例吗

  • A:这个记住就行了,两个实例(配置)用的同一份文件,配置文件按照启动的时候是什么样子,那这个实例的配置就是什么样子。我们编辑配置文件application.yml的内容后,启动服务EurekaServer;再修改配置文件application.yml,再启动EurekaServer2服务,那第二个服务实例就跟第一个服务实例的application.yml配置信息不同了

二、将服务注册到多个注册州中心上,对Eureka做集群,做高可用的注册中心

上面的步骤之后,就要将其他服务注册都注册到所有注册中心中,这样一个注册中心意外挂了之后,也不会影响系统运行。(将来Eureka服务是要部署到不同服务器上的)

  • 在user-service的application.yml中修改,添加新的eureka服务
eureka:
  client:
    service-url:
      defaultZone: http://localhost:10086/eureka,http://localhost:10087/eureka
  • 在consumer-service的application.yml中修改,添加新的eureka服务
eureka:
  client:
    service-url:
      defaultZone: http://localhost:10086/eureka,http://localhost:10087/eureka
  • 将两个eureka注册中心也相互注册。

启动所有服务(注意,先启动一个eureka,然后修改配置文件,再启动另一个eureka)

VVEWo6.md.png

这样看不出来有什么好处,我们将eureka挂掉一台,选择EurekaServer,右键,停掉。

VVEqeI.md.png

然后再访问http://localhost:8080/consumer/111

VVEOTP.md.png

在一个Eureka服务停掉(down机)的情况下,依旧能够访问到服务。

其他

在注册服务完成后,服务提供者会维持一个心跳(定时向EurekaServer发起Rest请求),告诉EurekaServer:“我还活着”。我们称为服务的续约(renew);

有两个重要的参数可以修改服务续约行为:

(修改服务提供者的配置,user-service的配置文件)

eureka:
  instance:
    lease-renewal-interval-in-seconds: 30
    lease-expiration-duration-in-seconds: 90

最大续约周期 单位 秒 默认30s (每隔30秒发送一次续约请求,如果周期太短,将会给eureka带来很大压力)
最小过期时长 单位 秒 默认90s (超过90秒没有发送续约请求,意味着这个服务出现意外挂了,那么注册中心将会剔除该服务)

当一个服务90s没有向Eureka发送续约请求时,Eureka就认为这个服务失效了,会从注册中心剔除此服务(这叫失效剔除),但这个剔除不是立即执行,Eureka发现一个服务挂了之后,再过60s才会剔除该服务

这个60s是默认,也可以配置,在Eureka服务中配置

eureka:
  server:
    eviction-interval-timer-in-ms: 60

VVekGT.md.png

insist,on the road
-------------本文结束感谢您的阅读-------------