天天看点

spring cloud (八) 服务注册中心 eureka 高可用集群配置搭建server端以及client端搭建eureka集群client客户端

目录

为啥用eureka集群

分布式和集群有啥区别?

搭建eureka集群

创建server端项目

pom文件配置

配置application.yml

还要注意:配置hosts文件  位置  C:\Windows\System32\drivers\etc

启动类上添加@EnableEurekaServer 注解

配置两个server,分别启动

client客户端

pom文件

配置application.yml

 启动类

启动项目

为啥用eureka集群

Eureka,作为spring cloud的服务发现与注册中心,在整个的微服务体系中,处于核心位置。单一的eureka服务,显然不能满足高可用的实际生产环境,这就要求我们配置一个能够应对各种突发情况,具有较强容灾能力的eureka服务。

分布式和集群有啥区别?

所以分布式的每一个节点,完成的是不同的业务,一个节点挂了,那么这个业务功能就无法访问了,甚至可能会影响到其他业务。而集群是一个比较有组织的架构,正因为有组织性,一个服务节点挂了,其他服务节点可以顶上来,从而保证了服务的健壮性。你中有我,我中有你,手拉手肩并肩,一起保证服务的健壮性。

搭建eureka集群

创建server端项目

spring cloud (八) 服务注册中心 eureka 高可用集群配置搭建server端以及client端搭建eureka集群client客户端

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

spring cloud (八) 服务注册中心 eureka 高可用集群配置搭建server端以及client端搭建eureka集群client客户端
127.0.0.1        server1
127.0.0.1        server2 
           
spring cloud (八) 服务注册中心 eureka 高可用集群配置搭建server端以及client端搭建eureka集群client客户端

启动类上添加@EnableEurekaServer 注解

spring cloud (八) 服务注册中心 eureka 高可用集群配置搭建server端以及client端搭建eureka集群client客户端

启动服务

配置两个server,分别启动

spring cloud (八) 服务注册中心 eureka 高可用集群配置搭建server端以及client端搭建eureka集群client客户端
spring cloud (八) 服务注册中心 eureka 高可用集群配置搭建server端以及client端搭建eureka集群client客户端
spring cloud (八) 服务注册中心 eureka 高可用集群配置搭建server端以及client端搭建eureka集群client客户端

然后分别启动这两个服务就可以了。当启动第一个服务的时候,因为第二个服务没有启动,所以,会一直报错。但不影响。虽然报错,项目依然正常启动,然后启动第二个项目。

注:EUREKA_CLIENT 是我写的的一个客户端client项目,client项目停掉后,并不会消失

spring cloud (八) 服务注册中心 eureka 高可用集群配置搭建server端以及client端搭建eureka集群client客户端
spring cloud (八) 服务注册中心 eureka 高可用集群配置搭建server端以及client端搭建eureka集群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.
           
spring cloud (八) 服务注册中心 eureka 高可用集群配置搭建server端以及client端搭建eureka集群client客户端

这里eureka  AMIs n/a(2)

因为我们没有为这两个注册中心进行命名,所以系统默认了名称,所以会出现两个。

当我们给两个配置文件各自给一个名字。

server 1

spring:
  application:
    name: spring-cloud-eureka1
           

server2

spring:
  application:
    name: spring-cloud-eureka2
           
spring cloud (八) 服务注册中心 eureka 高可用集群配置搭建server端以及client端搭建eureka集群client客户端
spring cloud (八) 服务注册中心 eureka 高可用集群配置搭建server端以及client端搭建eureka集群client客户端

这样我们也可以更明显的看出来没有配置

# 表示是否注册自身到eureka服务器
# register-with-eureka: false
# 是否从eureka上获取注册信息
# fetch-registry: false
           

的结果是,会将自己当成客户端进行注册。

以上就是server端的搭建配置

client客户端

搭建项目

spring cloud (八) 服务注册中心 eureka 高可用集群配置搭建server端以及client端搭建eureka集群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

spring cloud (八) 服务注册中心 eureka 高可用集群配置搭建server端以及client端搭建eureka集群client客户端

启动项目

刷新server1和server2管理界面。会发现两个注册中心都能发现,client项目

spring cloud (八) 服务注册中心 eureka 高可用集群配置搭建server端以及client端搭建eureka集群client客户端
spring cloud (八) 服务注册中心 eureka 高可用集群配置搭建server端以及client端搭建eureka集群client客户端

 这样的话,无论那一个server停掉宕机,都不会造成多大的影响。当我们停掉server1时,server2同样还能发现client客户端。

继续阅读