Eureka分区集群部署-阿里云开发者社区

开发者社区> 李子捌> 正文

Eureka分区集群部署

简介: Eureka分区集群部署
+关注继续查看

1、简介

Eureka集群提供了分区功能,这种功能设计理念来源于亚马逊云AWS创造的两个基础概念region(地域)和zone(可用区)

  • region:地域就是物理意义上的不同地域,在服务部署时会选择在用户需求大的区域建设多个机房并部署服务,这样可以减少网络不稳定带来的问题
  • zone:一个region下可以划分为多个zone。也就是说一个区域的多个机房服务器,按照一定规则划分为不同的可用区(比如说一个区域有三个机房,这三个机房就可以划分为三个zone)。通过划分zone,可以达到容灾的效果,如果一个zone故障,其他zone仍然可以对外提供服务。

结合上面两个概念可知,当公司存在Eureka Server分地域部署的时候,我们可以采用Eureka集群提供的分区功能。这样可以保证某一个region中的zone注册的服务优先于另一个zone中注册的服务被调用,当前者不可用时,再去选择其他zone中注册的服务发起调用,这样可以保证服务调用的延迟降低。

Region和Zone的关系图:

image


2、集群部署

2.1 资源清单

本次一共搭建四台Eureka Server服务,其资源清单如下所示:

application-name

zone

instance-hostname

prot

Eureka-Ynatian

zone-yantian

eureka18881.com

18881

Eureka-Luohu

zone-luohu

eureka18882.com

18882

Eureka-Nanshan

zone-yantian

eureka18883.com

18883

Eureka-Baoan

zone-baoan

eureka18884.com

18884

Eureka Server Cluster集群图(Region-深圳、zone-罗湖、zone-盐田、zone-南山、zone-宝安):

image

这里搭建的Eureka Server Cluster 是单个Region,包含四个zone,如果公司的需要的Eureka Server高可用要求特别高,可以在Region的每个zone中部署多个Eureka Server服务器。需要做分区域,参照Region Shenzhen配置多个Region即可。


2.2 配置文件

Eureka-Ynatian的Eureka Server配置文件

server:

  port: 18881


spring:

  application:

    name: Eureka-Ynatian


eureka:

  instance:

    hostname: eureka18881.com

  client:

    prefer-same-zone-eureka: true

    register-with-eureka: true

    region: shenzhen

    availability-zones:

      shenzhen: zone-yantian,zone-luohu,zone-nanshan,zone-baoan

    fetch-registry: true

    service-url:

      zone-yantian: http://eureka18881.com:18881/eureka/

      zone-luohu: http://eureka18882.com:18882/eureka/

      zone-nanshan: http://eureka18883.com:18883/eureka/

      zone-baoan: http://eureka18884.com:18884/eureka/

Eureka-Luohu的Eureka Server配置文件

server:

  port: 18882


spring:

  application:

    name: Eureka-Luohu


eureka:

  instance:

    hostname: eureka18882.com

  client:

    prefer-same-zone-eureka: true

    register-with-eureka: true

    region: shenzhen

    availability-zones:

      shenzhen: zone-luohu,zone-yantian,zone-nanshan,zone-baoan

    fetch-registry: true

    service-url:

      zone-yantian: http://eureka18881.com:18881/eureka/

      zone-luohu: http://eureka18882.com:18882/eureka/

      zone-nanshan: http://eureka18883.com:18883/eureka/

      zone-baoan: http://eureka18884.com:18884/eureka/

Eureka-Nanshan的Eureka Server配置文件

server:

  port: 18883


spring:

  application:

    name: Eureka-Nanshan


eureka:

  instance:

    hostname: eureka18883.com

  client:

    prefer-same-zone-eureka: true

    register-with-eureka: true

    region: shenzhen

    availability-zones:

      shenzhen: zone-nanshan,zone-luohu,zone-yantian,zone-baoan

    fetch-registry: true

    service-url:

      zone-yantian: http://eureka18881.com:18881/eureka/

      zone-luohu: http://eureka18882.com:18882/eureka/

      zone-nanshan: http://eureka18883.com:18883/eureka/

      zone-baoan: http://eureka18884.com:18884/eureka/

Eureka-Baoan的Eureka Server配置文件

server:

  port: 18884


spring:

  application:

    name: Eureka-Baoan


eureka:

  instance:

    hostname: eureka18884.com

  client:

    prefer-same-zone-eureka: true

    register-with-eureka: true

    region: shenzhen

    availability-zones:

      shenzhen: zone-baoan,zone-nanshan,zone-luohu,zone-yantian

    fetch-registry: true

    service-url:

      zone-yantian: http://eureka18881.com:18881/eureka/

      zone-luohu: http://eureka18882.com:18882/eureka/

      zone-nanshan: http://eureka18883.com:18883/eureka/

      zone-baoan: http://eureka18884.com:18884/eureka/

2.3 启动集群

依次启动集群中四个Eureka Server服务,等待集群之间稳定后,访问Eureka Server的Dashboard,此时在四台Eureka Server中的任意一台都可以看到相同的服务注册信息Instance currently registered with Eureka,以及DS Replicaes信息(这个不相同哦,不需要复制自己……),此时说明Eureka Server Cluster已经正常启动了。

image


2.4 服务注册

Eureka Server分区本质上除了达到高可用之外,最主要是为了给客户端提供最优的服务,以此来达到服务的最快响应。在Eureka Server中注册两个服务Server-01和Server-02,Server-01中metadata-map zone选择zone-yantian,Server-02中metadata-map zone选择zone-louhu。(注意两个服务的服务名均为Server)

Server-01配置文件

server:

  port: 19991


spring:

  application:

    name: Server


eureka:

  instance:

    prefer-ip-address: true

    metadata-map:

      zone: zone-yantian

  client:

    region: shenzhen

    availability-zones:

      shenzhen: zone-yantian,zone-luohu,zone-nanshan,zone-baoan

    service-url:

      zone-yantian: http://eureka18881.com:18881/eureka/

      zone-luohu: http://eureka18882.com:18882/eureka/

      zone-nanshan: http://eureka18883.com:18883/eureka/

      zone-baoan: http://eureka18884.com:18884/eureka/

    fetch-registry: true

    register-with-eureka: true

    prefer-same-zone-eureka: true

Server-01中提供一个Rest Api端点

@RestController

@RequestMapping("/zone")

public class ZoneController {


    @GetMapping

    public String zone() {

        return "Server zone-yantian";

    }


}

Server-02配置文件

server:

  port: 19992


spring:

  application:

    name: Server


eureka:

  instance:

    prefer-ip-address: true

    metadata-map:

      zone: zone-luohu

  client:

    region: shenzhen

    availability-zones:

      shenzhen: zone-luohu,zone-yantian,zone-nanshan,zone-baoan

    service-url:

      zone-yantian: http://eureka18881.com:18881/eureka/

      zone-luohu: http://eureka18882.com:18882/eureka/

      zone-nanshan: http://eureka18883.com:18883/eureka/

      zone-baoan: http://eureka18884.com:18884/eureka/

    fetch-registry: true

    register-with-eureka: true

    prefer-same-zone-eureka: true

Server-02中提供一个Rest Api端点

@RestController

@RequestMapping("/zone")

public class ZoneController {


    @GetMapping

    public String zone() {

        return "Server zone-luohu";

    }


}


此时访问Eureka dashboard可以看到Server 有两个实例注册到了Eureka Server Cluster中。

image


2.4 服务消费

创建一个服务消费者Consumer-01,用于测试服务调用分发的具体情况。

Consumer-01配置文件,其中指定metadata-map.zone为zone-luohu

server:

  port: 17771


spring:

  application:

    name: Consumer-01


eureka:

  instance:

    prefer-ip-address: true

    metadata-map:

      zone: zone-luohu

  client:

    region: shenzhen

    availability-zones:

      shenzhen: zone-luohu,zone-yantian,zone-nanshan,zone-baoan

    service-url:

      zone-yantian: http://eureka18881.com:18881/eureka/

      zone-luohu: http://eureka18882.com:18882/eureka/

      zone-nanshan: http://eureka18883.com:18883/eureka/

      zone-baoan: http://eureka18884.com:18884/eureka/

    fetch-registry: true

    register-with-eureka: true

    prefer-same-zone-eureka: true

提供一个Rest Api访问端点:

@RestController

@RequestMapping("/consumer")

public class ZoneController {


    @Autowired

    private RestTemplate restTemplate;


    @GetMapping

    public String zone() {

        return restTemplate.getForObject("http://server/zone", String.class);

    }


}

在浏览器访问该端点,无论怎么刷新都会输出Server zone-louhu,说明请求一直打到了Server-02

image修改Consumer-01的配置文件,修改metadata-map:zone为zone-yantian

server:

  port: 17771


spring:

  application:

    name: Consumer-01


eureka:

  instance:

    prefer-ip-address: true

    metadata-map:

      zone: zone-yantian

  client:

    region: shenzhen

    availability-zones:

      shenzhen: zone-luohu,zone-yantian,zone-nanshan,zone-baoan

    service-url:

      zone-yantian: http://eureka18881.com:18881/eureka/

      zone-luohu: http://eureka18882.com:18882/eureka/

      zone-nanshan: http://eureka18883.com:18883/eureka/

      zone-baoan: http://eureka18884.com:18884/eureka/

    fetch-registry: true

    register-with-eureka: true

    prefer-same-zone-eureka: true

重新访问浏览器,请求Consumer-01提供的端点,此时无论怎么刷新都会输出Server zone-yantian,说明请求一直打到了Server-01

image

2.5 配置详解

在服务注册和服务消费中有几个非常重要的配置项prefer-same-zone-eureka和eureka.instance.metadata-map.zone

prefer-same-zone-eureka

eureka:

  client:

    region: shenzhen

    availability-zones:

      shenzhen: zone-luohu,zone-yantian,zone-nanshan,zone-baoan

    service-url:

      zone-yantian: http://eureka18881.com:18881/eureka/

      zone-luohu: http://eureka18882.com:18882/eureka/

      zone-nanshan: http://eureka18883.com:18883/eureka/

      zone-baoan: http://eureka18884.com:18884/eureka/

  • true:获取eureka.client.availability-zones下的zone列表,选择第一个zone进行服务注册,如果第一个注册失败,依次选择其他zone进行服务注册
  • false:获取eureka.client.service-url列表,选择第一个service-url地址进行服务注册,如果第一个地址注册失败,依次选择其他service-url服务地址注册

eureka.instance.metadata-map.zone

eureka:

  instance:

    metadata-map:

      zone: zone-yantian

eureka.instance.metadata-map.zone配置项用于标识服务提供者和服务消费者属于那个zone,服务消费者通过ribbon在Eureka Server中拉去服务列表。如果一个zone中有多个服务,则轮询每个zone中的服务列表;如果zone中的服务均不能访问,则尝试访问其他zone下的服务。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
ECS使用感受
阿里云服务器初体验
3 0
Java 强、弱、软、虚,你属于哪一种?
Java中的四种引用 Java中有四种引用类型:强引用、软引用、弱引用、虚引用。
3 0
ECS初体验
esc简单的初体验
4 0
微服务架构 | *2.3 Spring Cloud 启动及加载配置文件源码分析(以 Nacos 为例)
Spring Cloud 要实现统一配置管理,需要解决两个问题:如何获取远程服务器配置和如何动态更新配置;在这之前,我们先要知道 Spring Cloud 什么时候给我们加载配置文件;
3 0
Java 强、弱、软、虚,你属于哪一种?
Java中的四种引用 Java中有四种引用类型:强引用、软引用、弱引用、虚引用。
3 0
阿里云使用体验
经过进一步的体验云服务器我感受到阿里云提供的性能卓越、稳定可靠、弹性扩展的IaaS(Infrastructure as a Service)级别云计算服务。云服务器ECS免去了采购IT硬件的前期准备,就像是使用水、电、天然气等公共资源一样便捷、高效地使用服务器,实现计算资源的即开即用和弹性伸缩,在使用期间给阿里云我最大的印象就是方便,快捷。使用界面简单明了,通过不断地尝试,我了解到了更多的特殊概念,专业名词,也了解到了如快照等容灾备份能力的实际用途,现实生活中,如果我们的电脑磁盘出现了故障,数据出现了损坏就无能为力了,或者只能够找专业的人把数据能够找回来,但是不能够保证说所有的数据都能找回来。
4 0
微服务架构 | *2.4 Nacos 获取配置与事件订阅机制的源码分析
为方便理解与表达,这里把 Nacos 控制台和 Nacos 注册中心称为 Nacos 服务器(就是 web 界面那个),我们编写的业务服务称为 Nacso 客户端; 由于篇幅有限,这里将源码分析分为上下两篇,其中上篇讲获取配置与事件订阅机制,下篇讲长轮询定时机制;
4 0
ECS使用体验
使用阿里云服务器搭建个人博客网站
4 0
冬季实战营第一期学习报告
1月17至22日,我有幸参加了阿里云组织的“冬季实战营第一期:从零到一上手玩转云服务器”抱着期待和学习的心情,我参与其中,经过训练,收益良多、颇有收获
5 0
C# 同步 异步 回调 状态机 async await Demo
C# 同步 异步 回调 状态机 async await Demo 我们项目的客户端和服务端通信用的是WCF,我就想,能不能用异步的方式调用WCF服务呢?或者说能不能用async await的方式调用WCF服务呢?
6 0
+关注
李子捌
简介: CSDN优秀作者、华为云专家 领域: Java框架、并发编程、分布式、微服务、Redis、HarmonyOS、中间件等技术
240
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载