SpringCloud-11-搭建Eureka Server 集群

在人生的道路上,不管是潇洒走一回,或者是千山独行,皆须是自己想走的路,虽然,有的人并不是很快就能找到自己的方向和道路,不过,只要坚持到底,我相信,就一定可以找到自己的路,只要找到路,就不必怕路途遥远了。

导读:本篇文章讲解 SpringCloud-11-搭建Eureka Server 集群,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

5.7 Eureka Server 集群

  • 在微服务架构中,一个系统往往由大量的服务组成,若将这些服务全部注册到一个Eureka Server 中,就极有可能导致Eureka Server 因不堪重负而崩溃,最终导致整个系统瘫痪。解决这个问题最直接的办法就是部署 Eureka Server 集群。

  • 在 Eureka 实现服务注册与发现时一共涉及了 3 个角色:服务注册中心、服务提供者以及服务消费者,这三个角色分工明确,各司其职。但在 Eureka 中,所有服务都既是服务消费者也是服务提供者,服务注册中心 Eureka Server 也不例外。

  • 在搭建服务注册中心时,在 microservice-cloud-eureka-7001包的application.yml 中涉及了这样的配置:

eureka:
  instance:
    hostname:  localhost  #eureka7001.com eureka服务端的实例名称,主机名是否可以在配置时确定(否则将从操作系统原语中猜测)
  client:
    register-with-eureka: false #false表示不向注册中心注册自己。
    fetch-registry: false #指示此客户端是否应从 eureka 服务器获取 eureka 注册表信息
    service-url: #监控页面地址
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ #发布的服务注册中心地址
  • 这样设置的原因是 microservice-cloud-eureka-7001 本身自己就是服务注册中心,服务注册中心无法将自己注册到自己身上的,但服务注册中心是可以将自己作为服务向其他的服务注册中心注册自己的。如:A Eureka Server不能将自己注册到自己上,但可以作为一个服务把自己注册到 B Eureka Server上的,

  • 这样就可以形成一组互相注册的 Eureka Server 集群,当服务提供者发送注册请求到 Eureka Server 时,Eureka Server 会将请求转发给集群中所有与之相连的 Eureka Server 上,以实现 Eureka Server 之间的服务同步。

  • 通过服务同步,服务消费者可以在集群中的任意一台 Eureka Server 上获取服务提供者提供的服务。这样,即使集群中的某个服务注册中心挂掉,服务消费者仍然可以从集群中的其他 Eureka Server 中获取服务信息并调用,而不会导致系统的整体瘫痪,这就是 Eureka Server 集群的高可用性。

  • 接下来我们基于基础工程,构建一个拥有 3 个 Eureka Server 实例的集群,除了已经构建的microservice-cloud-eureka-7001再创建两个 Eureka Server:microservice-cloud-eureka-7002,microservice-cloud-eureka-7003,这 3 个 Eureka Server 无论是 Maven 依赖、代码还是配置都是一模一样的。项目结构如图:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • pom.xml 中引入以下依赖

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <artifactId>spring-cloud-microservice</artifactId>
        <groupId>org.example</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <groupId>com.example</groupId>
    <artifactId>microservice-cloud-eureka-7001</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>microservice-cloud-eureka-7001</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.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-web</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-tomcat</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!--jetty-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jetty</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </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>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>
  • 修改 microservice-cloud-eureka-7001、microservice-cloud-eureka-7002、microservice-cloud-eureka-7003 中 application.yml 的配置,具体配置如下。主要是修改eureka.instance.hostname和eureka.client.service-url.defaultZone

  • microservice-cloud-eureka-7001 中 application.yml 的配置如下。

    server:
      port: 7001
    eureka:
      instance:
        hostname:  eurekaserver7001.com  #eureka7001.comeureka服务端的实例名称,主机名是否可以在配置时确定(否则将从操作系统原语中猜测)
      client:
        register-with-eureka: false #false表示不向注册中心注册自己。
        fetch-registry: false #指示此客户端是否应从 eureka 服务器获取 eureka 注册表信息
        service-url: #监控页面地址
          #defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ #发布的服务注册中心地址,单机
          defaultZone: http://eurekaserver7002.com:7002/eureka/,http://eurekaserver7003.com:7003/eureka/ #集群版 将当前的 Eureka Server 注册到 7003 和 7003 上,形成一组互相注册的 Eureka Server 集群
    
  • microservice-cloud-eureka-7002 中 application.yml 的配置如下。

server:
  port: 7002
eureka:
  instance:
    hostname:  eurekaserver7002.com  #eureka7001.com.eureka服务端的实例名称,主机名是否可以在配置时确定(否则将从操作系统原语中猜测)
  client:
    register-with-eureka: false #false表示不向注册中心注册自己。
    fetch-registry: false #指示此客户端是否应从 eureka 服务器获取 eureka 注册表信息
    service-url: #监控页面地址
      #defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ #发布的服务注册中心地址,单机
      defaultZone: http://eurekaserver7001.com:7001/eureka/,http://eurekaserver7003.com:7003/eureka/ #集群版 将当前的 Eureka Server 注册到 7003 和 7003 上,形成一组互相注册的 Eureka Server 集群
  • microservice-cloud-eureka-7003 中 application.yml 的配置如下。
server:
  port: 7003
eureka:
  instance:
    hostname:  eurekaserver7003.com  #eureka7001.comeureka服务端的实例名称,主机名是否可以在配置时确定(否则将从操作系统原语中猜测)
  client:
    register-with-eureka: false #false表示不向注册中心注册自己。
    fetch-registry: false #指示此客户端是否应从 eureka 服务器获取 eureka 注册表信息
    service-url: #监控页面地址
      #defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ #发布的服务注册中心地址,单机
      defaultZone: http://eurekaserver7001.com:7001/eureka/,http://eurekaserver7002.com:7002/eureka/ #集群版 将当前的 Eureka Server 注册到 7003 和 7003 上,形成一组互相注册的 Eureka Server 集群
  • 由于我们是在本地搭建的 Eureka Server 集群,因此我们需要修改本地的 host 文件,Windows 操作系统的电脑在 C:/Windows/System/drivers/etc/hosts 中修改,Mac 系统的电脑则需要在 vim/etc/hosts 中修改,修改内容如下。
#Spring Cloud eureka 集群
127.0.0.1 eurekaserver7001.com
127.0.0.1 eurekaserver7002.com
127.0.0.1 eurekaserver7003.com
  • 修改 microservice-cloud-provider-dept-8001(服务提供者)配置文件 application.yml 中 eureka.client.service-url.defaultZone 的取值,将服务注册到 Eureka Server 集群上,具体配置如下。
#eureka配置,Spring cloud 自定义服务名称和 ip 地址
eureka:
  client:
    service-url:
      #defaultZone: http://localhost:7001/eureka/  #这个地址是 7001注册中心在 application.yml 中暴露出来额注册地址 (单机版)
      defaultZone: http://eurekaserver7001.com:7001/eureka/,http://eurekaserver7002.com:7002/eureka/,http://eurekaserver7003.com:7003/eureka/ #将服务注册到 Eureka Server 集群
    fetch-registry: true
  instance:
    instance-id: microservice-provider-dept-8001 #自定义服务名称描述信息
    prefer-ip-address: true           #显示访问路径的 ip 地址
    #zookeeper需要配置那些服务service被扫描,eureka则是将整个服务包注册进去了
  • 启动 microservice-cloud-eureka-7001,使用浏览器访问“http://eureka7001.com:7001/”,结果如下图。
    在这里插入图片描述

  • 由此可以看到, 服务提供者(microservice-cloud-provider-dept-8001)的服务已经注册到了 Eureka Server 7001,并且在 DS Replicas 选项中也显示了集群中的另外两个 Eureka Server:Eureka Server 7002 和 Eureka Server 7003。

  • 启动 microservice-cloud-eureka-7002,使用浏览器访问“http://eureka7002.com:7002/”,结果如下图。
    在这里插入图片描述

  • 由此可以看到, 服务提供者(microservice-cloud-provider-dept-8001)的服务已经注册到了 Eureka Server 7002,并且在 DS Replicas 选项中也显示了集群中的另外两个 Eureka Server:Eureka Server 7001 和 Eureka Server 7003。

  • 启动 microservice-cloud-eureka-7003,使用浏览器访问“http://eureka7003.com:7003/”,结果如下图。
    在这里插入图片描述

  • 由此可以看到, 服务提供者(microservice-cloud-provider-dept-8001)的服务已经注册到了 Eureka Server 7003,并且在 DS Replicas 选项中也显示了集群中的另外两个 Eureka Server:Eureka Server 7001 和 Eureka Server 7002。

  • 至此我们就完成了 Eureka Server 集群的搭建和使用

下一篇:SpringCloud-12-Eureka:自我保护机制

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/123816.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!