nginx集群部署详解,eureka原理实现负载均衡

什么是Eurake

简单来说,在服务注册和发现的中间组件中,解决的问题是显而易见的,通过用实例名替换IP,可以防止服务所在节点的IP发生变化后,其他服务不能调用的问题。

Eureka的基本体系结构主要有三个作用:

注册服务:服务注册中心。 在Eureka Server上提供服务注册和发现功能。 提供商服务:服务提供者。 这是eureka客户端,提供服务。 另外,服务消费者Consumer Service :是服务消费者,是Eureka Cient,是消费服务,也是服务提供者。 使用欧盟Eurake后,服务间的调用方式略有变化。 服务在启动时向EurekaServer注册自身信息主要是服务名、IP ),如果想访问其他服务,则需要首先用服务名从Eurake Server获取对应服务的IP,并在IP中重新请求。

Eureka相关特性说明

群集: Eureka Server通常以群集模式部署为服务注册中心,群集之间注册并异步复制各自的状态,因此在某个时间点节点之间的数据可能暂时不匹配。 客户端缓存—为了避免每次请求发生两次网络I/O,Eureka客户端通常缓存欧盟Eurake服务器上的服务列表。 客户端在注册自身信息的同时,每30秒从Eureka Server中提取一次服务列表,并启动更新本地缓存的计时器任务。 eureka客户端还与欧盟Eurake Server保持一定的心率并报告自己的最新信息,以便及时发现IP变化。 删除服务:默认情况下,eureka客户端每30秒向eureka服务器开始心跳一次。 如果eureka客户端在90秒钟内未向Eureka Server发送心跳,则Eureka Server会确定服务不可用,并从服务注册列表中删除服务实例。 自我保护机制: Eureka Server认为如果发现与服务的连接中断,这可能是网络波动,因此不适合为网络删除服务。 为了应对这种情况,Eureka提供了一种自我保护机制,在短时间内丢失许多节点后,节点将进入自我保护模式。 进入保护模式后,服务器会保护注册表中的信息,并且不会删除服务。 网络恢复后将退出保护模式。 可以使用eureka.server.enable-self-preservation=false禁止自我保护模式。基于Spring Cloud搭建Eureka集群

群集原理说明: eureka服务器也是客户端,因为eureka服务器在启动时默认注册为自己的服务。 因此配置多个Eureka Server并在它们之间相互进行注册,从而形成一个集群。 当服务提供商在其中一个Eureka中注册服务时,该服务将与其他Eureka共享,以便所有Eureka都具有相同的服务。

Step01:由于每台服务器既是服务器端也是客户端,因此必须同时添加客户端和服务器依赖关系

ependencygroupidorg.spring framework.cloud/groupidartifactidspring-cloud-starter-Netflix-eureka-client/art ification ependencydependencygroupidorg.spring framework.cloud/groupidartifactidspring-cloud-starter-Netflix-euuuuu

spring : application : name : peer 1服务器: port :7001 eureka : # 仪表板相关配置环境: local-test data center : local-cloud dashboard : path :/dashboard #仪表板访问地址启用默认为true。仪表板#instance相关配置instance : perfer-IP-address : true instance-id : $ { spring.application.nadress } 启用: $ { server.port } #客户端相关配置client : serviceurl 3360 default zo

ne: http://localhost:7001/eureka/ # 注册链接 register-with-eureka: false #是否向Eureka Server注册当前服务,默认为true会注册自己。 fetch-registry: false #是否检查其它Eureka Server节点 initial-instance-info-replication-interval-seconds: 40 #最初复制实例信息到eureka服务器延迟的时间,默认为40秒 instance-info-replication-interval-seconds: 30 #复制实例信息到eureka服务器的间隔时间,默认为30秒 registry-fetch-interval-seconds: 30 #从eureka服务器获取注册信息的间隔时间,默认为30秒

    集群情况下,只需要修改上面配置的以下地方:

将defaultZone地址指向其它Eureka Server注册中心将register-with-eureka设置为true(默认就是true,所以可以去掉)将fetch-registry设置为true  (同上)如果是单机伪集群模式,需要修改端口号client: serviceUrl: defaultZone: http://localhost:7002/eureka/,http://localhost:7003/eureka/ # 注册链接

  类似如下:

  Step03:在启动类上添加@EnableEurekaServer注解,依次启动所有节点。结果如下

Eureka Server的5种事件监听    

EurekaInstanceCanceledEvent:服务下线事件EurekaInstanceRegisteredEvent:服务注册事件EurekaInstanceRenewedEvent:服务续约事件EurekaRegistryAvaiableEvent: 注册中心启动事件,该事件会在Eureka Server启动完以后马上发布。EurekaServerStartedEventEureka:服务端启动事件,该事件会在Eureka Server启动完以后马上发布。

  一个简单的监听如下:

@Componentpublic class EurekaEventListener {private final static Logger logger = LoggerFactory.getLoggerEurekaEventListener.class); @EventListener public void listenEurekaInstanceCanceledEvent event) { logger.warn”—服务{}下线”, event.getAppName)); //… } @EventListener public void listenEurekaInstanceRegisteredEvent event) { InstanceInfo instanceInfo = event.getInstanceInfo); logger.info”—-服务{}注册”, instanceInfo.getAppName) + instanceInfo.getHostName) +” “+ instanceInfo.getIPAddr) +” “+ instanceInfo.getPort)); } @EventListener public void listenEurekaInstanceRenewedEvent event) { logger.info”—服务{}续约”, event.getServerId) +” “+ event.getAppName)); } @EventListener public void listenEurekaRegistryAvailableEvent event) { logger.info”—-注册中心启动,{}”, System.currentTimeMillis)); } @EventListener public void listenEurekaServerStartedEvent event) { logger.info”—-注册中心服务端启动,{}”, System.currentTimeMillis)); }}

   结果如下

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注