前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >服务注册组件——Eureka高可用集群搭建

服务注册组件——Eureka高可用集群搭建

作者头像
Noneplus
发布2019-09-24 16:05:55
5240
发布2019-09-24 16:05:55
举报
文章被收录于专栏:开发笔记开发笔记

什么是Eureka?

服务注册组件:将微服务注册到Eureka中。

为什么需要服务注册?

微服务开发重点在一个"微"字,大型应用拆分成微型服务,意味着服务的数量不可能少。

服务之间存在调用关系,假设没有服务注册,微服务之间的调用关系就会是这个样子:

1566142251076
1566142251076

微服务的部署可能不会在同一台服务器上,而是需要通过远程调用,然后就涉及到IP地址了。理论上来说,直接通过IP地址直接通信也没有什么问题。 但是如果服务出问题,需要换一台服务器部署,ip地址就需要更改了。同时如果该服务被多个其他服务依赖,那么每一个IP地址都需要重置。

服务注册可以形象的理解为一张表,表的左边写着服务名称,而右侧对应的是IP地址。服务的调用使用名称来替代IP地址,那么当IP地址发生改变,直接修改服务注册中心的名称与IP的映射关系。其他服务由于是用名称来远程调用,所以并不需要更改。

1566142633779
1566142633779

Eureka与Zookeeper的区别

Eureka满足Ap原则,而Zookeeper满足CP原则。

(CAP定理,指的是在一个分布式系统中,Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者最多同时满足俩)

Eureka三个角色

Eureka Server 提供服务注册和发现

Service Provider服务提供方将自身服务注册到Eureka,从而使服务消费方能够找到

Service Consumer服务消费方从Eureka获取注册服务列表,从而能够消费服务

消费方与提供方:调用另一个服务称为消费。被另一个服务调用称为提供。

所以,同一个服务可能既是消费方也是提供方。

【注】:Eureka隐藏IP地址的功能体现在整个微服务的内部。

搭建Eureka集群

创建工程

  • 创建文件夹Eureka Cluster,用IDEA打开:
1566144926784
1566144926784
  • 创建msc-eureka-6001,msc-eureka-6002,msc-eureka-6003工程【jdk1.8】,
1566145227822
1566145227822
1566145305544
1566145305544
1566145472114
1566145472114

导入pom依赖

代码语言:javascript
复制
 <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.7.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Greenwich.SR2</spring-cloud.version>
    </properties>

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

配置application.yaml

  • 配置地址映射

C:\Windows\System32\drivers\etc

1566147466705
1566147466705
1566147557267
1566147557267

msc-eureka-6001,

代码语言:javascript
复制
server:
  port: 6001

eureka:
  instance:
    hostname: eureka6001.com  #eureka服务端的实例名称
  client:
    register-with-eureka: false   #false表示不向注册中心注册自己。
    fetch-registry: false      #false表示自己是注册中心,职责是维护服务,而不是调用服务
    service-url:
      defaultZone: http://eureka6003.com:6003/eureka/,http://eureka6002.com:6002/eureka/ # 注册到eureka6003和eureka6002里

msc-eureka-6002,

代码语言:javascript
复制
server:
  port: 6002

eureka:
  instance:
    hostname: eureka6002.com  #eureka服务端的实例名称
  client:
    register-with-eureka: false   #false表示不向注册中心注册自己。
    fetch-registry: false      #false表示自己是注册中心,职责是维护服务,而不是调用服务
    service-url:
      defaultZone: http://eureka6001.com:6001/eureka/,http://eureka6003.com:6003/eureka/

msc-eureka-6003

代码语言:javascript
复制
server:
  port: 6003

eureka:
  instance:
    hostname: eureka6003.com  #eureka服务端的实例名称
  client:
    register-with-eureka: false   #false表示不向注册中心注册自己。
    fetch-registry: false      #false表示自己是注册中心,职责是维护服务,而不是调用服务
    service-url:
      defaultZone: http://eureka6001.com:6001/eureka/,http://eureka6002.com:6002/eureka/

创建主启动类并添加注解@EnableEurekaServer

代码语言:javascript
复制
package zkrun.top;


import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@EnableEurekaServer // EurekaServer服务器端启动类,接受其它微服务注册进来
@SpringBootApplication
public class App_msc_eureka_6001
{
    public static void main(String[] args)
    {
        SpringApplication.run(App_msc_eureka_6001.class, args);
    }
}

启动Eureka集群

1566148589864
1566148589864

访问任意一个端口,都会显示另外两个Eureka服务

1566148651864
1566148651864

创建注册服务测试Eureka集群的高可用性

  • 新建工程msc-provider-5001
  • 导入pom依赖 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.7.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <java.version>1.8</java.version> <spring-cloud.version>Greenwich.SR2</spring-cloud.version> </properties> <dependencies> <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> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency> <!-- Eureka客户端启动需要依赖web模块--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> <dependencyManagement> <dependencies> <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>
  • 配置application.yaml
代码语言:javascript
复制
server:
  port: 5001
spring:
  application:
    name: msc-provider  #应用名称
eureka:
  client:
    service-url:
      defaultZone: http://eureka6001.com:6001/eureka/,http://eureka6002.com:6002/eureka/,http://eureka6003.com:6003/eureka/
  instance:
    instance-id: msc-provider-5001
    prefer-ip-address: true     #访问路径可以显示IP地址
  • 创建主启动类添加注解@EnableEurekaClient
代码语言:javascript
复制
package zkrun.top;


import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

@SpringBootApplication
@EnableEurekaClient
public class App_msc_provider_5001
{
    public static void main(String[] args)
    {
        SpringApplication.run(App_msc_provider_5001.class, args);
    }
}
1566150379362
1566150379362
  • 测试Eureka集群高可用

手动停掉eureka6001,

1566150405399
1566150405399

eureka6001无法访问:

1566150455835
1566150455835

6002和6003仍然提供注册服务:

1566150489889
1566150489889
1566150527456
1566150527456

小结:

  • 三个Eureka和注册服务都没有继承父工程,其pom依赖都是独立的。其中注册服务依赖spring-boot-starter-web。今后在设计父工程的pom时,应该考虑到每个子工程的依赖。
  • 与Eureka同级别的服务注册组件还有Zookeeper,Consul等。根据具体的应用场景和组件的优势来决定技术选取是软件开发更应该注意的。(除了Eureka之外,同级别的其他组件也需要了解)

代码参考:https://github.com/HCJ-shadow/Eureka-Cluster

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-08-19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是Eureka?
  • 为什么需要服务注册?
  • Eureka与Zookeeper的区别
  • Eureka三个角色
  • 搭建Eureka集群
    • 创建工程
      • 导入pom依赖
        • 配置application.yaml
          • 创建主启动类并添加注解@EnableEurekaServer
            • 启动Eureka集群
              • 创建注册服务测试Eureka集群的高可用性
              • 小结:
              相关产品与服务
              微服务引擎 TSE
              微服务引擎(Tencent Cloud Service Engine)提供开箱即用的云上全场景微服务解决方案。支持开源增强的云原生注册配置中心(Zookeeper、Nacos 和 Apollo),北极星网格(腾讯自研并开源的 PolarisMesh)、云原生 API 网关(Kong)以及微服务应用托管的弹性微服务平台。微服务引擎完全兼容开源版本的使用方式,在功能、可用性和可运维性等多个方面进行增强。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档