目录
为啥用eureka集群
分布式和集群有啥区别?
搭建eureka集群
创建server端项目
pom文件配置
配置application.yml
还要注意:配置hosts文件 位置 C:\Windows\System32\drivers\etc
启动类上添加@EnableEurekaServer 注解
配置两个server,分别启动
client客户端
pom文件
配置application.yml
启动类
启动项目
Eureka,作为spring cloud的服务发现与注册中心,在整个的微服务体系中,处于核心位置。单一的eureka服务,显然不能满足高可用的实际生产环境,这就要求我们配置一个能够应对各种突发情况,具有较强容灾能力的eureka服务。
所以分布式的每一个节点,完成的是不同的业务,一个节点挂了,那么这个业务功能就无法访问了,甚至可能会影响到其他业务。而集群是一个比较有组织的架构,正因为有组织性,一个服务节点挂了,其他服务节点可以顶上来,从而保证了服务的健壮性。你中有我,我中有你,手拉手肩并肩,一起保证服务的健壮性。
注意:要写 dependencyManagement spring-cloud-starter-eureka-server server端需要加server
4.0.0
org.springframework.boot
spring-boot-starter-parent
1.5.13.RELEASE
com.lgh
eurekapeer1
0.0.1-SNAPSHOT
eurekapeer1
Demo project for Spring Boot
org.springframework.cloud
spring-cloud-dependencies
Dalston.SR5
pom
import
1.8
Greenwich.SR1
org.springframework.cloud
spring-cloud-starter
org.springframework.cloud
spring-cloud-starter-eureka-server
org.springframework.boot
spring-boot-starter-test
test
org.springframework.boot
spring-boot-maven-plugin
spring:
application:
name: eureka
profiles:
active: server1
配置application-server1.yml和application-server2.yml
给这两个配置文件两个不同的接口。
instance.hostname是唯一标识。
互相给他们两个对方的url
application-server1.yml
server:
port: 8001
eureka:
instance:
hostname: server1
client:
# 这里是集群,则不需要配置这两个
# 表示是否注册自身到eureka服务器
# register-with-eureka: false
# 是否从eureka上获取注册信息
# fetch-registry: false
service-url:
defaultZone: http://server2:8002/eureka/
application-server2.yml
server:
port: 8002
eureka:
instance:
hostname: server2
client:
service-url:
defaultZone: http://server1:8001/eureka/
127.0.0.1 server1
127.0.0.1 server2
启动服务
然后分别启动这两个服务就可以了。当启动第一个服务的时候,因为第二个服务没有启动,所以,会一直报错。但不影响。虽然报错,项目依然正常启动,然后启动第二个项目。
注:EUREKA_CLIENT 是我写的的一个客户端client项目,client项目停掉后,并不会消失
这时两个注册中心就都有互相的地址了。
解释一下上面的红色的问题
这是Eureka的自我保护模式。如果在Eureka Server的首页看到以下这段提示,则说明Eureka已经进入了保护模式。
保护模式主要用于一组客户端和Eureka Server之间存在网络分区场景下的保护。一旦进入保护模式,Eureka Server将会尝试保护其服务注册表中的信息,不再删除服务注册表中的数据(也就是不会注销任何微服务)。
EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.
这里eureka AMIs n/a(2)
因为我们没有为这两个注册中心进行命名,所以系统默认了名称,所以会出现两个。
当我们给两个配置文件各自给一个名字。
server 1
spring:
application:
name: spring-cloud-eureka1
server2
spring:
application:
name: spring-cloud-eureka2
这样我们也可以更明显的看出来没有配置
# 表示是否注册自身到eureka服务器
# register-with-eureka: false
# 是否从eureka上获取注册信息
# fetch-registry: false
的结果是,会将自己当成客户端进行注册。
以上就是server端的搭建配置
搭建项目
和上面的一样,就是把eureka-server去掉server
1.8
org.springframework.cloud
spring-cloud-dependencies
Dalston.SR5
pom
import
org.springframework.boot
spring-boot-starter
org.springframework.cloud
spring-cloud-starter-eureka
org.springframework.boot
spring-boot-starter-test
test
这里只需要配置一个server1 8001就可以了。然后启动后会发现,server2也能发现这个客户端项目
spring:
application:
name: eureka_client
eureka:
client:
service-url:
defaultZone: http://server1:8001/eureka
添加注解@EnableEurekaClient
刷新server1和server2管理界面。会发现两个注册中心都能发现,client项目
这样的话,无论那一个server停掉宕机,都不会造成多大的影响。当我们停掉server1时,server2同样还能发现client客户端。