首页 > 其他分享 >Eureka高可用集群服务端和客户端配置

Eureka高可用集群服务端和客户端配置

时间:2023-02-24 19:11:46浏览次数:54  
标签:http cn eureka1 eureka Eureka 客户端 服务端 shenzhen

  微服务应用中,生产环境一般都需要保障服务注册中心的高可用!高可用也分好几个等级,例如:同数据中心或区(Zone)高可用——》同地区(Region)跨数据中心或区(Zone)高可用——》全国跨地区(Region)跨数据中心或区(Zone)高可用——全球跨地区(Region)跨数据中心或区(Zone)高可用,常规应用基本上中间两种就能满足了!当然也会有国际型应用要用到全球部署的。不同的要求如果是自己搭建部署环境,那么服务器的选购就要做好规划。下面的截图是阿里云ECS的选购界面,切它出来不是为了打广告,是跟我们今天的主角Eureka高可用集群部署有关系:

  从阿里云的服务器选购界面我们可以看到:有点实力的服务器供应商一般都会从全球范围内建设数据中心(机房)。但打包这些服务器供用户选择购买时,使用两级标签就能唯一确定服务器的位置——地域(region)和可用区(zone),这个分配标准是与国际接轨的!

  我们在Spring官网Eureka主题下高可用一节也看到了Region和Zone的概念,另外,在Eureka的Github仓库Eureka架构图上也看到分区的概念,为了防止连接失效,我把相关内容截图过来了:

  Eureka的高可用部署架构图官方已经给出来了,那么该怎么来配置和使用呢?接下来我们就来实操一下!

  首先用IDEA创建好Eureka工程,我这里采用Maven多模块(module)的结构,将Eureka Server和Eureka Client端放在一个主工程下了:

这里要用到IDEA多实例运行的功能,访功能默认是关闭的,按下面截图方法打开它:

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

 

  Eureka Server端配置文件的编写:

#Eureka Server的application.yml内容
spring:
  application:
    name: EurekaServer
  profiles:
  #多实例启动就改下这里 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:
    serviceUrl:
      #其实只需要Peer住其他两个区zoneB和zoneC的Eureka Server节点(我按官网写了三个)
      defaultZone: http://eureka1.zonea.cn-shenzhen:8761/eureka/,http://eureka1.zoneb.cn-shenzhen:8762/eureka/,http://eureka1.zonec.cn-shenzhen:8763/eureka/
    #自己作为服务端的客户端不需要像普通客户端一样去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:
    serviceUrl:
      #其实只需要Peer住其他两个区zoneA和zoneC的Eureka Server节点(我按官网写了三个)
      defaultZone: http://eureka1.zonea.cn-shenzhen:8761/eureka/,http://eureka1.zoneb.cn-shenzhen:8762/eureka/,http://eureka1.zonec.cn-shenzhen:8763/eureka/
    #自己作为服务端的客户端不需要像普通客户端一样去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:
    serviceUrl:
      #其实只需要Peer住其他两个区zoneA和zoneB的Eureka Server节点(我按官网写了三个)
      defaultZone: http://eureka1.zonea.cn-shenzhen:8761/eureka/,http://eureka1.zoneb.cn-shenzhen:8762/eureka/,http://eureka1.zonec.cn-shenzhen:8763/eureka/
    #自己作为服务端的客户端不需要像普通客户端一样去fetch服务列表,也不需要向任何服务端注册自己
    fetch-registry: false
    register-with-eureka: false

  下面是重点,Eureka Client端的配置

#Eureka Client的application.yml内容
spring:
  application:
    name: EurekaClient
  profiles:
#多实例启动就改下这里 active: clientA main: banner-mode: console #配置SpringBoot Actuator 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常用部署架构图:

  自己想一下最后这张图要怎么配!!!

 

标签:http,cn,eureka1,eureka,Eureka,客户端,服务端,shenzhen
From: https://www.cnblogs.com/xuruiming/p/17152240.html

相关文章

  • k8s-新增服务端节点
    本文章是 k8s二进制高可用集群部署 的分支。详细步骤请参考目录。1.etcd扩容**如果etcd通过CA生成的证书不包含当前节点的ip,可能etcd集群需要重新生成证书。1......
  • 获取客户端ip,请求头伪造ip,解决办法
    可以在请求头加入X-Forwarder-For来伪造访问的ip地址  //Nginx支持X-Forwarded-For配置proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;   ......
  • 麒麟客户端vsftp
    #麒麟客户端搭建vsftp,使用被动模式,麒麟客户端关闭防火墙#cp/etc/vsftpd.conf/etc/vsftpd.conf.bak#grep-Ev'^(#|$)'/etc/vsftpd.conf.bak>/etc/vsftpd.conf##li......
  • kettle9.3使用笔记02 客户端配置使用
    下载地址:https://sourceforge.net/projects/pentaho/files/第一次使用,所以就选目前最新版本9.3,服务器端选择pentaho-server-ce-9.3.0.0-428.zip,本地客户端选择pdi-ce-9.3......
  • windows安装syslog日志转发客户端
    一、安装nxlog下载地址 https://nxlog.co/products/nxlog-community-edition/download二、配置windwos的日志客户端,客户端主要做的是配置监听端口,决定采用TCP还是UDP方......
  • Eureka服务治理
    Eureka是由Netflix开发的一款服务治理开源框架,Spring-cloud对其进行了集成。Eureka既包含了服务端也包含了客户端,Eureka服务端是一个服务注册中心(EurekaServer),提供服务......
  • SSE服务端消息推送
    什么是SSE(Serversideevent)服务器端事件SSE是单工模式的,只能服务器端向客户端推送消息。如果需要全双工的双向并行通信,可以用wobsocket。SSE只支持utf8编码的......
  • AnyShare客户端问题排查
    手动安装客户端服务1、cmd窗口创建anyshareservice服务先打开服务,检查服务状态,并开启尝试手动开启以管理员身份打开命令提示符,删除已有Anyshare服务scquery查询所有......
  • Zookeeper原生客户端操作
    在Linux系统中安装了Zookeeper服务器,对Zookeeper命令有一些了解的情况下,学习如何在客户端操作Zookeeper。目前,Zookeeper服务器有三种Java客户端:Zookeeper、Zkclient和Cura......
  • TC胖客户端添加扩展
    缘由:我刚开始是在找这个窗口的类,这样就可以扩展该窗口。  第一次:我通过NewDatasetsforMultipleFiles找到该窗口的扩展。尝试:我尝试用一个类来集成MultipleFiles......