Spring Cloud Netflix Eureka服务同步及高可用

本文介绍了Spring Cloud Netflix Eureka作为服务注册和发现组件的工作原理,并通过实例展示了如何配置Eureka服务器集群实现服务同步以及高可用。在集群中,服务器之间相互注册,服务信息得以共享。同时讨论了Eureka的自我保护机制以及如何关闭此机制以确保服务的准确状态。客户端需配置所有Eureka服务器地址以确保在部分节点故障时仍能正常通信。
摘要由CSDN通过智能技术生成

      Spring Cloud Netflix Eureka是服务注册和发现组件,在分布式系统中,为客户端提供服务注册信息,类似于Zookeeper注册中心,首先服务提供者在启动时,将服务信息注册到注册中心,服务消费者在启动时,从注册中心获取服务提供者信息列表,根据特定的规则,选取其中一个服务提供者来发起调用。

     默认情况下,Eureka是服务器同时也是客户端,自己给自己注册,先验证下默认注册到服务器是什么。

server:
  port: 8771

spring:
    application:
      name: eurekaserver
    profiles: node1
eureka:
  instance:
    hostname: node1
    preferIpAddress: true

#  client:
    #自身是否注册到eureka服务器
#    registerWithEureka: false
#    是否从eureka服务器获取注册信息
#    fetchRegistry: false
    #8761这个机器上的实例同步到8771,想相当于备份冗余,实现高可用
#    serviceUrl:
#      defaultZone: http://node2:8772/eureka/

registerWithEureka: false,这里注释掉了,默认是true,它会注册到本身,我们先启动看下。

com.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known server

找不到服务器,为什么呢,不应该是注册到自己8771端口吗,因为我们上面serviceUrl没有指定,那么它默认注册到本机的8761端口,很自然,找不到要注册的服务器,后台会报错,那是因为服务器和客户端间维持着一个心跳线程,当服务器存在了,就不会报错了,但不影响程序的启动和访问。


这里得出的结论是,serviceUrl就是要注册到的服务注册中心的地址,默认是本机的8761端口,当然也可以指定其他机器。

接下来,我配置了3个注册中心node1,node2,node3,他们之间相互注册。


nod1和node2是相互注册,那么node1上有node2服务,node2上有node1服务,由于相互注册的Eureka server,他们之间的服务可以同步,所以node1上有node1服务和node2服务;node2上也有node1服务和node2服务。官方说法是,同伴意识,我的理解是,服务共享,哈哈。

node3服务注册到node2,则node2上有nod1,node2,node3服务了,node2上所有服务也会同步到node1。而node3因为没有和node2相互注册,也没有服务注册到它上面来,所以node3没有服务,node3可以看成是Eureka客户端了。看界面结果(图片在文章显示不正常,欲哭无泪)。

node1:http://node1:8771/


node2:http://node2:8772/


node3:http://node3:8773/


启动类:

@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class, args);
    }
}

application.yml:

#客户端默认连接8761这个端口,如果不指定,则默认启动是8080端口,则客户端也得改为8080端口。
server:
  port: 8771

spring:
    application:
      name: eurekaserver
    profiles: node1
eureka:
  instance:
    hostname: node1
    preferIpAddress: true

  client:
    #自身是否注册到eureka服务器
#    registerWithEureka: false
#    是否从eureka服务器获取注册信息
    fetchRegistry: false
    #8771这个机器上的服务同步到8772,注册中心上的服务信息是相互同步的
    serviceUrl:
      defaultZone: http://node2:8772/eureka/

---
server:
  port: 8772

spring:
    application:
      name: eurekaserver
    profiles: node2
eureka:
  instance:
    hostname: node2
#    preferIpAddress: true

  client:
    #自身是否注册到eureka服务器serviceUrl
#    registerWithEureka: false
#    是否从eureka服务器获取注册信息
    fetchRegistry: false
    #8772这个机器上的服务同步到8771,注册中心上的服务信息是相互同步的
    serviceUrl:
      defaultZone: http://node1:8771/
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值