赞
踩
搭建Eureka注册中心集群
说明
:网上的基本是使用本地改Host文件来搭建多个虚拟域名指向本机。先使用两台阿里云主机来搭建Eureka集群。
eureka搭建集群其实就是把N个eureka节点进行相互注册(Eureka can be made even more resilient and available by running multiple instances and asking them to register with each other).
<?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>2.1.4.RELEASE</version> <relativePath/> </parent> <groupId>com.ooyhao.cloud</groupId> <artifactId>cloud_eureka_1</artifactId> <version>0.0.1-SNAPSHOT</version> <name>cloud_eureka</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> <spring-cloud.version>Finchley.SR1</spring-cloud.version> </properties> <dependencies> <!--添加SpringMVC插件--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--添加Eureka服务器端依赖--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <dependencyManagement> <dependencies> <!--添加Springcloud依赖--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
@SpringBootApplication
@EnableEurekaServer //标志为Eureka服务
public class CloudEurekaApplication {
public static void main(String[] args) {
SpringApplication.run(CloudEurekaApplication.class, args);
}
}
# 应用端口号 server.port=8081 # 应用名 spring.application.name=eureka_server # eureka实例名 eureka.instance.appname=center # eureka实例的主机名 eureka.instance.hostname=120.79.167.88 # 不要向注册中心注册自己(因为正常业务中只是把当前应用作为一个服务注册中心) # 表示是否将自己注册在EurekaServer上,默认为true。由于当前应用就是EurekaServer,所以置为false eureka.client.register-with-eureka=false # 表示表示是否从EurekaServer获取注册信息(服务列表,这里作为注册中心,不需要拉取服务列表) # 默认为true。单节点不需要同步其他的EurekaServer节点的数据 eureka.client.fetch-registry=false # 注册中心地址(服务彼此注册) #eureka.client.service-url.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka eureka.client.service-url.defaultZone=http://47.101.47.127:8080/eureka # 关闭自我保护 eureka.server.enable-self-preservation=false
以上,就可以启动,作为单个节点的注册中心了。但是,在实际开发中,为了实现高可用,我们需要搭建多节点的服务注册中心,由于eureka对端口不敏感,所以不能通过端口来部署不同的注册中心节点,所以我这是通过两台aliyun服务器来搭建两个节点的注册中心集群,如下。
其他不需要改变,主要是两个服务的配置文件不同,如下:
# 应用端口号 server.port=8081 # 应用名 spring.application.name=eureka_server # eureka实例名 eureka.instance.appname=center # eureka实例的主机名 eureka.instance.hostname=120.79.167.88 # 不要向注册中心注册自己(因为正常业务中只是把当前应用作为一个服务注册中心) # 表示是否将自己注册在EurekaServer上,默认为true。由于当前应用就是EurekaServer,所以置为false eureka.client.register-with-eureka=true # 表示表示是否从EurekaServer获取注册信息(服务列表,这里作为注册中心,不需要拉取服务列表) # 默认为true。单节点不需要同步其他的EurekaServer节点的数据 eureka.client.fetch-registry=true # 注册中心地址(服务彼此注册) #eureka.client.service-url.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka eureka.client.service-url.defaultZone=http://47.101.47.127:8080/eureka # 关闭自我保护 eureka.server.enable-self-preservation=false
server.port=8080 spring.application.name=eureka_server eureka.instance.appname=center eureka.instance.hostname=47.101.47.127 # 不要向注册中心注册自己(因为正常业务中只是把当前应用作为一个服务注册中心) # 表示是否将自己注册在EurekaServer上,默认为true。由于当前应用就是EurekaServer,所以置为false eureka.client.register-with-eureka=true # 表示表示是否从EurekaServer获取注册信息(服务列表,这里作为注册中心,不需要拉取服务列表) # 默认为true。单节点不需要同步其他的EurekaServer节点的数据 eureka.client.fetch-registry=true # 注册中心地址 #eureka.client.service-url.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka eureka.client.service-url.defaultZone=http://120.79.167.88:8081/eureka # 关闭自我保护 eureka.server.enable-self-preservation=false
注意:为了保证集群中每一个节点都有其他节点信息,在集群搭建时,配置文件中eureka.client.service-url.defaultZone属性通过逗号分隔来配置多个节点,保证两两互相注册(例如3个节点:节点1中注册节点2和节点3;节点2中注册节点1和节点3;节点3中注册节点1和节点2)。
在启动过程中如果发现先启动的服务器中报找不到主机异常是正常现象,因为在集群搭建的过程中,不管是先启动哪一个节点,在其他节点未启动的情况下,节点在检测其他节点不存在是都会报出异常。
通过修改Host文件或是多个主机搭建的集群效果图(以两个不同主机作为集群节点为例)
replica:副本,由于Eureka集群中的Eureka实例之间相互同步注册信息,Eureka实例称其他Eureka实例为自己的replica。
这个下面的信息是这个Eureka 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>2.1.4.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.ooyhao.cloud</groupId> <artifactId>eureka-client</artifactId> <version>0.0.1-SNAPSHOT</version> <name>eureka-client</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> <spring-cloud.version>Finchley.SR1</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--添加Eureka客户端端依赖--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <dependencyManagement> <dependencies> <!--SpringCloud的项目--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
@SpringBootApplication
@EnableEurekaClient //标注为当前程序为eureka客户端
public class EurekaClientApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaClientApplication.class, args);
}
}
#应用程序端口
server.port=8084
#应用程序的名称
spring.application.name=feign-consumer
#注册处中心地址 (注册时,只需要将自身注册到注册中心集群中的任一一个节点即可,其他节点会自动复制)
eureka.client.service-url.defaultZone=http://47.101.47.127:8080/eureka
#服务以IP地址的形式显示
eureka.instance.prefer-ip-address=true
效果:
47.101.47.127主机控制台信息。
120.79.167.88主机控制台信息
虽然上面client客户端只注册到一个节点上,但是eureka集会自动进行复制,可以复制到其他节点上,但是不建议只注册到单个节点上,因为如果当前客户端注册的节点宕机了,则客户端无法注册到集群中,导致无法提供服务。推荐的方式是每一个服务(eureka客户端)都注册到每一个集群节点上。这样可以保证服务正常的注册到注册中心集群中,从而提供服务。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。