您的位置:首页 > 编程语言 > Java开发

Spring Cloud Eureka——注册中心集群

2017-04-12 19:40 519 查看
前面我们介绍了Spring Cloud Eureka的简单使用。

但前面的例子中,这个服务注册中心是单点的,显然这并不适合应用于线上生产环境。服务注册中心是服务的中心位置,如果服务注册中心崩了,显然是灾难性的,不符合微服务架构的高可用性特点。

那么如何搭建高可用的服务注册中心集群呢?

我们可以通过Eureka Server互相注册的方式来实现高可用的部署。所以我们仅仅需要在配置文件中配置defaultZone为其他的注册中心即可。

服务注册中心Eureka Server:

使用前面的示例。

创建配置文件:application-peer1.properties

内容:

spring.application.name=eureka-server
server.port=1111
eureka.instance.hostname=peer1
eureka.client.serviceUrl.defaultZone=http://peer2:1112/eureka/创建另外一个配置文件:application-peer2.properties
内容:

spring.application.name=eureka-server
server.port=1112
eureka.instance.hostname=peer2
eureka.client.serviceUrl.defaultZone=http://peer1:1111/eureka/
显然这里的url中的peer1和peer2我们是无法访问的,所以需要在hosts文件中添加:

127.0.0.1 peer1
127.0.0.1 peer2
配置defaultZone相互注册。注意:这里的url需要使用对方的hostname,即http://peer1:1111/eureka/中,需要使用peer1,而不能使用localhost或者127.0.0.1,否则Eureka注册中心会认为另外一个注册中心是unavailable的。这里的原因笔者认为是通过hostname来进行判断的,并没有深入了解。不过如果不这样使用,的确会出现问题。

最后application.properties:

spring.profiles.active=peer2通过profiles.active来分别使peer1和peer2生效。

两个配置对应的服务注册中心启动之后,可以看到:



可以看到,在下面的Info中,另外一个注册中心分片的信息,是registered和available的。注:如果前面的defaultZone注册的配置,不是用hostname,这里就会变成unavailable,显然这是不符合实际情况的,影响我们的判断。

当其中一个服务注册中心关闭之后,可以看到,信息从available变成了unavailable。

服务Eureka Service:

还是使用前面的实例。

配置文件:

spring.application.name=service-B
server.port=3333
eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/注意,这里我们只向其中一个注册中心peer1中注册服务,我们会看到什么呢?



当我们访问另外一个注册中心peer2的时候,发现,在这个注册中心中,也有这个服务的信息!!

而当我们将peer1关闭了之后,我们发现,在peer2中仍然是可以访问到这个服务的。这就实现了服务注册中心的高可用。

不过这里的缺点就是,如果peer1被关闭了,虽然peer2可以访问到peer1上的服务,但是却是不能实时监控的,因为这个毕竟不是向peer2中注册的服务,所以当服务down之后,peer2中仍然会认为是up的。

深入:

在实际开发中,服务注册中心旺旺不单单只有2个节点,而是存在多个节点。但从上面的例子当中,我们可以知道:

Eureka Server的同步遵循着一个非常简单的原则:只要有一条边将节点连接,就可以进行信息传播与同步。

所以,如果存在多个节点,我们只需要将节点之间两两连接起来,形成通路,那么他们之间的所有服务都可以共享。



我们的服务只需要向集群中的任意一个注册中心中注册,即可被所有注册中心所共享,任意一个注册中心崩溃,都不会影响这个服务被调用。

实现了注册中心集群的高可用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息