spring cloud (八) 服务注册中心 eureka 高可用集群配置搭建server端以及client端
目录为啥用eureka集群分布式和集群有啥区别?搭建eureka集群创建server端项目pom文件配置配置application.yml还要注意:配置hosts文件 位置 C:\Windows\System32\drivers\etc启动类上添加@EnableEurekaServer 注解配置两个server,分别启动client客户端pom...
目录
还要注意:配置hosts文件 位置 C:\Windows\System32\drivers\etc
为啥用eureka集群
Eureka,作为spring cloud的服务发现与注册中心,在整个的微服务体系中,处于核心位置。单一的eureka服务,显然不能满足高可用的实际生产环境,这就要求我们配置一个能够应对各种突发情况,具有较强容灾能力的eureka服务。
分布式和集群有啥区别?
所以分布式的每一个节点,完成的是不同的业务,一个节点挂了,那么这个业务功能就无法访问了,甚至可能会影响到其他业务。而集群是一个比较有组织的架构,正因为有组织性,一个服务节点挂了,其他服务节点可以顶上来,从而保证了服务的健壮性。你中有我,我中有你,手拉手肩并肩,一起保证服务的健壮性。
搭建eureka集群
创建server端项目
pom文件配置
注意:要写 dependencyManagement spring-cloud-starter-eureka-server server端需要加server
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.13.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.lgh</groupId>
<artifactId>eurekapeer1</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>eurekapeer1</name>
<description>Demo project for Spring Boot</description>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Dalston.SR5</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Greenwich.SR1</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
配置application.yml
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/
还要注意:配置hosts文件 位置 C:\Windows\System32\drivers\etc
127.0.0.1 server1
127.0.0.1 server2
启动类上添加@EnableEurekaServer 注解
启动服务
配置两个server,分别启动
然后分别启动这两个服务就可以了。当启动第一个服务的时候,因为第二个服务没有启动,所以,会一直报错。但不影响。虽然报错,项目依然正常启动,然后启动第二个项目。
注: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端的搭建配置
client客户端
搭建项目
pom文件
和上面的一样,就是把eureka-server去掉server
<properties>
<java.version>1.8</java.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Dalston.SR5</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
配置application.yml
这里只需要配置一个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客户端。
更多推荐
所有评论(0)