Eureka高可用集群服务端和客户端配置
微服务应用中,生产环境一般都需要保障服务注册中心的高可用!高可用也分好几个等级,例如:同数据中心(可用Zone区)高可用——》同地域(Region)跨数据中心(可用Zone区)高可用——》全国跨地域(Region)跨数据中心(可用Zone区)高可用——全球跨地域(Region)跨数据中心(可用Zone区)高可用,常规应用基本上中间两种就能满足了!当然也会有国际型应用要进行全球部署。不同部署要求,如果是自己搭建部署环境,那么服务器的选购就要做好规划。下面的截图是阿里云ECS的选购界面,切它出来不是为了打广告,是借用它的数据中心分布来说明本文的主角Eureka的高可用集群部署(我们这里演示Eureka的 同地域(Region)跨数据中心(可用Zone区)高可用 部署;全国版也是类似的,只是将全国范围看成一个region,再在华北、华东、华南等各选一个zone,然后每个zone内部再做多一层 同数据中心(可用Zone区)高可用 部署即可,全国版需要考虑成本和远距离服务注册列表数据同步延迟的问题!),截图可以放大来看:

从阿里云的服务器选购界面我们可以看到:有点实力的服务器供应商一般都会从全球范围内建设数据中心(机房)。但打包这些服务器供用户选择购买时,使用两级标签就能唯一确定服务器的位置——地域(region)和可用区(zone),这个分配标准是与国际接轨的!
我们在Spring官网Eureka主题下高可用一节也看到了region和zone的概念,另外,在Eureka的Github仓库Eureka架构图上也看到区(zone)的概念,为了防止连接失效,我把相关内容截图过来了:


Eureka的高可用部署架构图官方已经给出来了,而且跟阿里云上可用区(zone)的划分是一样的,那么该怎么来配置和使用呢?接下来我们就来实操一下!
首先用IDEA创建好Eureka工程,我这里采用Maven多模块(module)的结构,将Eureka Server和Eureka Client端放在一个主工程下了:

这里要用到IDEA多实例运行的功能来模拟多区(zone)部署的情况(用端口的不同来模拟分区),该功能默认是关闭的,按下面截图方法打开它:

然后我们在相应应用的主配置文件application.yml里修改 spring:profiles:active: <目标配置> 并启动应用就可以了,每个目标配置里的端口不一样,用于模拟多机器的情况(真实环境是端口一样,IP不一样),先看一下效果截图,然后我会在后面贴出所有配置文件,配置文件里会有详细的说明,就不在正文说怎么配置了:



以下是重点内容,Eureka Server端的配置文件:
#Eureka Server的application.yml内容
spring:
application:
name: EurekaServer
profiles:
#多实例启动就改下这里(分别切换为eureka1、eureka2、eureka3)
active: eureka1
#Eureka Server的application-eureka1.yml内容
server:
port: 8761
#Eureka专用配置Begin
eureka:
instance:
metadata-map:
#声明自己所属的区
zone: zoneA
#自己是zoneA区的Eureka Server节点(取个容易识别的hostname)
hostname: eureka1.zonea.cn-shenzhen
#自己的IP,多块网卡时最好指定,多网卡自动绑定很容易出错(例如装了VMWare虚拟机的情况)
ip-address: 127.0.0.1
#优先使用IP
prefer-ip-address: true
client:
#声明自己所属的地区Region
region: cn-shenzhen
#列明可用的区Zone(注意顺序,优先将自己的区排前面)
availability-zones:
cn-shenzhen: zoneA,zoneB,zoneC
service-url:
#设置可用区Zone地址
zoneA: http://eureka1.zonea.cn-shenzhen:8761/eureka/
zoneB: http://eureka1.zoneb.cn-shenzhen:8762/eureka/
zoneC: http://eureka1.zonec.cn-shenzhen:8763/eureka/
#显示设置优先考虑请求同区Zone注册中心
prefer-same-zone-eureka: true
#自己作为服务端的客户端不需要像普通客户端一样去fetch服务列表,也不需要向任何服务端注册自己
fetch-registry: false
register-with-eureka: false
#Eureka Server的application-eureka2.yml内容
server:
port: 8762
#Eureka专用配置Begin
eureka:
instance:
metadata-map:
#声明自己所属的区
zone: zoneB
#自己是zoneB区的Eureka Server节点(取个容易识别的hostname)
hostname: eureka1.zoneb.cn-shenzhen
#自己的IP,多块网卡时最好指定,多网卡自动绑定很容易出错(例如装了VMWare虚拟机的情况)
ip-address: 127.0.0.1
#优先使用IP
prefer-ip-address: true
client:
#声明自己所属的地区Region
region: cn-shenzhen
#列明可用的区Zone(注意顺序,优先将自己的区排前面)
availability-zones:
cn-shenzhen: zoneB,zoneA,zoneC
service-url:
#设置可用区Zone地址
zoneA: http://eureka1.zonea.cn-shenzhen:8761/eureka/
zoneB: http://eureka1.zoneb.cn-shenzhen:8762/eureka/
zoneC: http://eureka1.zonec.cn-shenzhen:8763/eureka/
#显示设置优先考虑请求同区Zone注册中心
prefer-same-zone-eureka: true
#自己作为服务端的客户端不需要像普通客户端一样去fetch服务列表,也不需要向任何服务端注册自己
fetch-registry: false
register-with-eureka: false
#Eureka Server的application-eureka3.yml内容
server:
port: 8763
#Eureka专用配置Begin
eureka:
instance:
metadata-map:
#声明自己所属的区
zone: zoneC
#自己是zoneC区的Eureka Server节点(取个容易识别的hostname)
hostname: eureka1.zonec.cn-shenzhen
#自己的IP,多块网卡时最好指定,多网卡自动绑定很容易出错(例如装了VMWare虚拟机的情况)
ip-address: 127.0.0.1
#优先使用IP
prefer-ip-address: true
client:
#声明自己所属的地区Region
region: cn-shenzhen
#列明可用的区Zone(注意顺序,优先将自己的区排前面)
availability-zones:
cn-shenzhen: zoneC,zoneA,zoneB
service-url:
#设置可用区Zone地址
zoneA: http://eureka1.zonea.cn-shenzhen:8761/eureka/
zoneB: http://eureka1.zoneb.cn-shenzhen:8762/eureka/
zoneC: http://eureka1.zonec.cn-shenzhen:8763/eureka/
#显示设置优先考虑请求同区Zone注册中心
prefer-same-zone-eureka: true
#自己作为服务端的客户端不需要像普通客户端一样去fetch服务列表,也不需要向任何服务端注册自己
fetch-registry: false
register-with-eureka: false
以下是重点内容,Eureka Client端的配置文件:
#Eureka Client的application.yml内容
spring:
application:
name: EurekaClient
profiles:
#多实例启动就改下这里(分别切换为clientA、client2、client3)
active: clientA
main:
banner-mode: console #配置SpringBoot Actuator,开启服务信息和健康汇报接口(方便从Eureka Server界面直接点进相应服务查看服务信息)
management:
endpoints:
web:
exposure:
include: "*"
endpoint:
health:
show-details: always
shutdown:
enabled: true
#Eureka Client的application-clientA.yml内容
server:
port: 8081 #Eureka专用配置Begin
eureka:
instance:
metadata-map:
#声明自己所属的区Zone
zone: zoneA
client:
#声明自己所属的地区Region
region: cn-shenzhen
#列明可用的区Zone(注意顺序)
availability-zones:
cn-shenzhen: zoneA,zoneB,zoneC
service-url:
#设置可用区Zone地址
zoneA: http://eureka1.zonea.cn-shenzhen:8761/eureka/
zoneB: http://eureka1.zoneb.cn-shenzhen:8762/eureka/
zoneC: http://eureka1.zonec.cn-shenzhen:8763/eureka/
#显示设置优先考虑请求同区Zone注册中心
prefer-same-zone-eureka: true
#Eureka Client的application-clientB.yml内容
server:
port: 8082 #Eureka专用配置Begin
eureka:
instance:
metadata-map:
#声明自己所属的区Zone
zone: zoneB
client:
#声明自己所属的地区Region
region: cn-shenzhen
#列明可用的区Zone(注意顺序)
availability-zones:
cn-shenzhen: zoneB,zoneA,zoneC
service-url:
#设置可用区Zone地址
zoneA: http://eureka1.zonea.cn-shenzhen:8761/eureka/
zoneB: http://eureka1.zoneb.cn-shenzhen:8762/eureka/
zoneC: http://eureka1.zonec.cn-shenzhen:8763/eureka/
#显示设置优先考虑请求同区Zone注册中心
prefer-same-zone-eureka: true
#Eureka Client的application-clientC.yml内容
server:
port: 8083 #Eureka专用配置Begin
eureka:
instance:
metadata-map:
#声明自己所属的区Zone
zone: zoneC
client:
#声明自己所属的地区Region
region: cn-shenzhen
#列明可用的区Zone(注意顺序)
availability-zones:
cn-shenzhen: zoneC,zoneA,zoneB
service-url:
#设置可用区Zone地址
zoneA: http://eureka1.zonea.cn-shenzhen:8761/eureka/
zoneB: http://eureka1.zoneb.cn-shenzhen:8762/eureka/
zoneC: http://eureka1.zonec.cn-shenzhen:8763/eureka/
#显示设置优先考虑请求同区Zone注册中心
prefer-same-zone-eureka: true
客户端配置 availability-zones 时一定要注意顺序,要优先将自己所属的区(zone)排在前面,这样Eureka Client在发起续约(Renew)请求时,从所有可用区(zone)里第一个拿到的就是自己所在区(zone)的目标Eureka Server,否则就变成在其他服务器上续约,会导至自己区(zone)里的Eureka Server的Renews (last min)值永远达不到要求而报出以下错误(这个错误是由于前来本Eureka Server续约的服务低于指定的自我保证阈值(默认85%)了,触发了Eureka自我保护机制,Eureka Server不再剔除服务注册表里的条目):
EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.
附上几张我自己画的Eureka Server常用部署架构图:



最后一张是针对官方的改进版,自己想一下这几张图服务端和客户端要怎么配!!!
Eureka高可用集群服务端和客户端配置的更多相关文章
- spring cloud 服务注册中心eureka高可用集群搭建
spring cloud 服务注册中心eureka高可用集群搭建 一,准备工作 eureka可以类比zookeeper,本文用三台机器搭建集群,也就是说要启动三个eureka注册中心 1 本文三台eu ...
- SpringCloud全家桶学习之服务注册与发现及Eureka高可用集群搭建(二)
一.Eureka服务注册与发现 (1)Eureka是什么? Eureka是NetFlix的一个子模块,也是核心模块之一.Eureka是一个基于REST的服务,用于定位服务,以实现云端中间层服务发现和故 ...
- SpringCloud(四):服务注册中心Eureka Eureka高可用集群搭建 Eureka自我保护机制
第四章:服务注册中心 Eureka 4-1. Eureka 注册中心高可用集群概述在微服务架构的这种分布式系统中,我们要充分考虑各个微服务组件的高可用性 问题,不能有单点故障,由于注册中心 eurek ...
- SpringCloud之Eureka高可用集群环境搭建
注册中心集群 在微服务中,注册中心非常核心,可以实现服务治理,如果一旦注册出现故障的时候,可能会导致整个微服务无法访问,在这时候就需要对注册中心实现高可用集群模式. Eureka集群相当简单:相互注册 ...
- 分布式架构高可用架构篇_02_activemq高可用集群(zookeeper+leveldb)安装、配置、高可用测试
参考: 龙果学院http://www.roncoo.com/share.html?hamc=hLPG8QsaaWVOl2Z76wpJHp3JBbZZF%2Bywm5vEfPp9LbLkAjAnB%2B ...
- 分布式架构高可用架构篇_activemq高可用集群(zookeeper+leveldb)安装、配置、高可用测试
原文:http://www.iteye.com/topic/1145651 从 ActiveMQ 5.9 开始,ActiveMQ 的集群实现方式取消了传统的Master-Slave 方式,增加了基于Z ...
- 服务注册组件——Eureka高可用集群搭建
服务注册组件--Eureka高可用集群搭建 什么是Eureka? 服务注册组件:将微服务注册到Eureka中. 为什么需要服务注册? 微服务开发重点在一个"微"字,大型应用拆分成微 ...
- openstack高可用集群15-后端存储技术—GlusterFS(分布式存储)
- Eureka高可用集群搭建
就是搭建Eureka的集群. 每个Eureka Server需要相互注册,确保数据一致. 我这里准备两个Eureka Server 他两的POM文件配置是一样的 <dependencies&g ...
- 高可用集群(HA)之Keeplived原理+配置过程
原理--> 通过vrrp协议,定义虚拟路由,在多个服务节点上进行转移. 通过节点优先级,将初始虚拟路由到优先级高的节点上,checker工作进程检测到主节点出问题时,则降低此节点优先级,从而实现 ...
随机推荐
- 【Hadoop学习】补充:优化、新特性
一.数据压缩 1.概述 原则:IO密集而不是计算密集的job 压缩算法选择 2.压缩位置选择 通过参数进行配置 3.压缩实例: 数据流的压缩和解压缩 Map输出端采用压缩 Reduce输出端采用压缩 ...
- C++日期和时间编程总结
一,概述 二,C-style 日期和时间库 2.1,数据类型 2.2,函数 2.3,数据类型与函数关系梳理 2.4,时间类型 2.4.1,UTC 时间 2.4.2,本地时间 2.4.3,纪元时间 2. ...
- ChatGPT能做什么?ChatGPT保姆级注册教程
最近 OpenAI 发布的 ChatGPT 聊天机器人很火,该聊天机器人可以在模仿人类说话风格的同时回答大量的问题. 在现实世界之中,例如数字营销.线上内容创作.回答客户服务查询,甚至可以用来帮助调试 ...
- JavaScript:操作符:比较运算符及其隐式转换数据类型
不等关系 即大于>:大于等于>=:小于<:小于等于<= 当比较的两个变量,有非数字时,会隐式转换为数字再比较,转换情况同算术运算符: 当两个变量均为字符串时,不会进行转换,而是 ...
- python与数值计算环境安装
数值计算的编程的软件很多种,也见过一些编程绘图软件的对比. 利用Python进行数值计算,需要用到numpy(矩阵) ,scipy(公式符号), matplotlib(绘图)这些工具包. 1.Linu ...
- 什么是RPC? (全面了解)
一:RPC 1.什么是RPC? RPC 是指远程过程调用,也就是说两台服务器,A 和 B,一个应用部署在A 服务器上,想要调用B 服务器上应用提供的函数或方法,由于不在一个内存空间,不能直接调用,需要 ...
- 再聊一下那 SQLSERVER 行不能跨页的事
一:背景 1. 讲故事 上一篇写完了之后,马上就有朋友留言对记录行的 8060byte 限制的疑惑,因为他的表记录存储了大量的文章,存储文章的字段类型用的是 nvarchar(max),长度很显然是超 ...
- tempdb日志文件暴增分析
背景 某医院信息科接到CIS系统磁盘空间不足告警,通过排查发现tempdb的日志文件暴增,已经涨到了130G左右,并且还在持续增长中.需要我们紧急排查原因. 现象 登陆到服务器里,确实看到了如上所说, ...
- Atcoder Beginner Contest ABC 284 Ex Count Unlabeled Graphs 题解 (Polya定理)
题目链接 弱化版(其实完全一样) u1s1,洛谷上这题的第一个题解写得很不错,可以参考 直接边讲Polya定理边做这题 问题引入:n颗珠子组成的手串,每颗珠子有两种不同的颜色, 如果两个手串能够在旋转 ...
- Vue双向绑定原理梳理
简介 vue数据双向绑定主要是指:数据变化更新视图,视图变化更新数据. 实现方式:数据劫持 结合 发布者-订阅者 模式. 数据劫持通过 Object.defineProperty()方法. 对对象的劫 ...