SpringCloud组件:Eureka高可用集群部署

高可用集群部署 Eureka 服务注册中心。java

构建项目

使用 idea 开发工具建立一个 SpringBoot 项目,添加 Eureka Server 依赖便可, pom.xml 配置文件以下所示:node

......
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.5.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
    <spring-cloud.version>Finchley.SR1</spring-cloud.version>
</properties>

<dependencies>
    <!--Eureka Server-->
    <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>
......

咱们本章主要是完成 Eureka Server 的集群配置,因此只须要添加 spring-cloud-starter-netflix-eureka-server 依赖便可。spring

启用Eureka Server

在入口类 XxxApplication 上添加 @EnableEurekaServer 注解来启用 Eureka Server 服务以及实例化一些依赖,修改以下所示:sql

@SpringBootApplication
@EnableEurekaServer
public class SpringCloudEurekaHighApplication {
    //....
}

Eureka服务配置

依赖已经添加完成,接下来咱们就须要在 application.yml 内编写相关配置信息,由于测试环境都在咱们本机,有两种方式能够模拟测试同时运行:windows

spring.profiles.active

为了方便演示,咱们使用的第二种方式,主要是感受再去建立一个项目没有必要,那咱们的 profiles 环境该怎么配置呢?请继续往下看。架构

Profile多环境配置

咱们在 src/main/resources 目录下建立名为 application-node1.yml 的配置文件,在该配置文件内添加以下配置:并发

# Eureka 客户端配置
eureka:
  client:
    service-url:
      defaultZone: http://node2:10002/eureka/
  instance:
    # 配置经过主机名方式注册
    hostname: node1
    # 配置实例编号
    instance-id: ${eureka.instance.hostname}:${server.port}:@project.version@
  # 集群节点之间读取超时时间。单位:毫秒
  server:
    peer-node-read-timeout-ms: 1000
# 服务端口号
server:
  port: 10001

继续在 src/main/resources 下建立一个名为 application-node2.yml 的配置文件,内容以下所示:app

# Eureka 客户端配置
eureka:
  client:
    service-url:
      defaultZone: http://node1:10001/eureka/
  instance:
    # 配置经过主机名方式注册
    hostname: node2
    # 配置实例编号
    instance-id: ${eureka.instance.hostname}:${server.port}:@project.version@
  # 集群节点之间读取超时时间。单位:毫秒
  server:
    peer-node-read-timeout-ms: 1000
server:
  port: 10002

下面咱们先来讲下 node1 、 node2 主机名的配置方式,而后再说下为何实现了集群的效果?maven

主机名设置

  • Mac 或者 Linux 配置方式分布式

    若是你使用的是 osx 系统。能够找到 /etc/hosts 文件并添加以下内容:

127.0.0.1       node1
127.0.0.1       node2

通常状况下配置完成后就会生效,若是你的配置并无生效,你能够尝试重启。

  • Windows 配置方式

    若是你使用的是 windows 系统,你能够修改 C:\Windows\System32\drivers\etc\hosts 文件,添加内容与 Mac 方式一致。

Eureka Sever相互注册

  • application-node1.yml

eureka.client.service-url.defaultZone 这个配置参数的值,配置的是 http://node2:10002/eureka/ ,那这里的 node2 是什么呢?其实一看应该能够明白,这是们在 hosts 文件内配置的 hostname ,而 端口号 咱们配置的则是 10002 ,根据 hostname 以及 port 咱们能够看出,环境 node1 注册到了 node2 上。

  • application-node2.yml

在 node2 环境内配置 eureka.client.service-url.defaultZone 是指向的 http://node1:10001/eureka/ ,一样 node2 注册到了 node1 上。

经过这种相互注册的方式牢靠的把两个 服务注册中心 绑定在了一块。

运行测试

咱们先来运行测试下 Eureka Server 的集群是否可行?下一章节咱们再来说解 把服务提供者注册到Eureka集群 ,测试步骤以下:

  1. clean && package 本项目(diea工具自带maven经常使用操做命令快捷方式,右侧导航栏 Maven Projects -> Lifecycle )
  2. 打开终端 cd 项目 target 目录
  3. 经过以下命令启动 node1 环境:
java -jar hengboy-spring-cloud-eureka-high-0.0.1-SNAPSHOT.jar --spring.profiles.active=node1
  1. 再打开一个终端,一样是 cd 项目的 target 目录下,经过以下命令启动 node2 环境:
java -jar hengboy-spring-cloud-eureka-high-0.0.1-SNAPSHOT.jar --spring.profiles.active=node2
  1. 访问 http://node1:10001 查看 node1 环境的 Eureka 管理中心
  2. 访问 http://node2:10002 查看 node2 环境的 Eureka 管理中心

效果以下图所示:

集群相互注册效果

欢迎工做一到五年的Java工程师朋友们加入Java架构开发: 855835163 群内提供免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)合理利用本身每一分每一秒的时间来学习提高本身,不要再用"没有时间“来掩饰本身思想上的懒惰!趁年轻,使劲拼,给将来的本身一个交代!

相关文章
相关标签/搜索