【SpringCloud】SpringCloud搭建Eureka集群

搭建SpringCloud 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).

单个集群节点:

1.依赖

<?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>

2.主程序注解信息

@SpringBootApplication
@EnableEurekaServer //标志为Eureka服务
public class CloudEurekaApplication {

    public static void main(String[] args) {
        SpringApplication.run(CloudEurekaApplication.class, args);
    }

}

3.application.properties

# 应用端口号
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

4.(复制第一个节点)修改配置文件

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文件或是多个主机搭建的集群效果图(以两个不同主机作为集群节点为例)

1.120.79.167.88节点

2.47.101.47.127节点

replica:副本,由于Eureka集群中的Eureka实例之间相互同步注册信息,Eureka实例称其他Eureka实例为自己的replica。

这个下面的信息是这个Eureka Server相邻节点,互为一个集群。

SpringCloud Eureka控制台信息解释:

启动一个服务,并注册到其中一个节点上:

服务客户端:

1.依赖信息

<?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>

2. 主程序注解标注为eureka客户端

@SpringBootApplication
@EnableEurekaClient //标注为当前程序为eureka客户端
public class EurekaClientApplication {

    public static void main(String[] args) {
        SpringApplication.run(EurekaClientApplication.class, args);
    }
}

3.application.properties配置文件

#应用程序端口
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客户端)

都注册到每一个集群节点上。这样可以保证服务正常的注册到注册中心集群中,从而提供服务。

------------------------------------------------

关注小编微信公众号获取更多资源

 ------------------------------------------------

猜你喜欢

转载自blog.csdn.net/ooyhao/article/details/89553303