Eureka分区集群部署

简介: Eureka分区集群部署

1、简介

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

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

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

Region和Zone的关系图:


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-宝安):

这里搭建的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已经正常启动了。


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中。


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

修改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

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下的服务。

目录
相关文章
|
SQL IDE Java
datagrip2022最新版安装破解与激活教程,亲测可用
Datagrip 应该是目前最好用的一款数据库连接工具,拥有智能查询控制台,搞笑的架构导航
11282 92
|
弹性计算 JavaScript Linux
ElasticSearch备份与恢复-elasticdump工具
ElasticSearch备份与恢复-elasticdump工具
|
弹性计算 Ubuntu Linux
阿里云服务器一键安装Docker社区版教程,基于系统运维管理OOS
阿里云服务器一键安装Docker社区版教程,基于系统运维管理OOS自动化部署。支持Ubuntu 22.04/20.04、CentOS 7.7-7.9及Alibaba Cloud Linux 3.2104 LTS。前提条件:ECS实例需运行中且有公网。步骤:选择Docker扩展并安装,验证成功通过命令`docker -v`查看版本号。
1155 79
|
安全 数据建模 应用服务中间件
SSL证书怎么获得?获得后如何安装到服务器?
在当今互联网时代,SSL证书是保障网站安全的重要工具,实现HTTPS加密和身份认证,防止数据劫持或篡改,提升SEO效果。获取SSL证书需选择可信的CA机构、选择证书类型、生成CSR、验证域名及企业信息并获取证书。安装SSL证书到服务器(如Nginx)涉及上传证书文件、配置Nginx并重启服务。具体步骤可参考详细教程。 简介:SSL证书对网站安全至关重要,涵盖获取与安装流程,包括选择CA、生成CSR、验证信息、配置服务器等关键步骤。
|
存储 大数据 对象存储
ClickHouse 如何实现数据一致性
本文探讨了在 ClickHouse 中实现数据一致性的方法,主要关注 `ReplacingMergeTree` 引擎。该引擎允许更新已有数据,通过定期合并操作删除重复并保持最终一致性。然而,由于合并时间不可预测,单纯依赖此引擎无法确保实时一致性。为解决此问题,文章提出了四种策略:1)手动触发合并,但不建议频繁使用;2)使用 `FINAL` 查询,但在查询时合并数据,效率较低;3)通过标记和 `GroupBy` 查询实现一致性;4)在允许一定偏差的情况下,直接使用 `ReplacingMergeTree` 保持最终一致性。在实践中,推荐结合标记列和 `GroupBy` 以保证数据一致性。
1459 0
|
JSON 数据格式 索引
实际使用Elasticdump工具对Elasticsearch集群进行数据备份和数据还原
就可以通过Elasticsearch的导入导出工具Elasticdump来实现,可以将Elasticsearch不同集群的数据进行索引备份和还原。
743 0
|
安全 网络协议 网络安全
黑客10种绕过防火墙方法
黑客10种绕过防火墙方法
2405 7
|
存储 缓存 数据处理
简述计算机X86架构
【10月更文挑战第3天】本文介绍了计算机的基本工作原理,重点阐述了CPU(中央处理器)及其组成部分:运算单元、数据单元和控制单元的功能。文中解释了CPU通过总线与内存等设备通信的过程,并详细描述了指令执行的步骤,包括指令获取、数据处理和结果存储。此外,还介绍了地址总线和数据总线的作用,以及段寄存器在内存管理中的应用。最后,提供了一些基本的CPU指令示例。文中配有多幅插图帮助理解。
|
XML JSON 缓存
Spring Cloud灰度发布方案
Spring Cloud灰度发布方案
1141 0
Spring Cloud灰度发布方案
|
关系型数据库 测试技术 API
SqlAlchemy 2.0 中文文档(二十八)(3)
SqlAlchemy 2.0 中文文档(二十八)
448 1