【转】Eureka集群
Eureka作为SpringCloud的服务发现与注册中心,在整个的微服务体系中,处于核心位置。单一的eureka服务,显然不能满足高可用的实际生产环境,这就要求我们配置一个能够应对各种突发情况,具有较强容灾能力的eureka集群服务。
首先,参考eureka服务端7001的模块,分别创建eureka7002和eureka7003模块,另外还要做如下修改。还记得我们在7001中配置的eureka.instance.hostname为localhost,那么现在在集群的环境中,如果还是这样的话,就没法区分三个服务端,所以我们需要在hosts文件中添加映射,以及在对应模块中修改服务名。
127.0.0.1 eureka7001.com 127.0.0.1 eureka7002.com 127.0.0.1 eureka7003.com
eureka7001模块的application.yml
server: port: 7001 eureka: instance: hostname: eureka7001.com #eureka服务端的名称 client: register-with-eureka: false #不在注册中心注册自己 fetch-registry: false #表示自己就是注册中心,不需要检索服务,只需要维护服务实例 service-url: defaultZone: http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
eureka7002模块的application.yml
server: port: 7002 eureka: instance: hostname: eureka7002.com #eureka服务端的名称 client: register-with-eureka: false #不在注册中心注册自己 fetch-registry: false #表示自己就是注册中心,不需要检索服务,只需要维护服务实例 service-url: defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7003.com:7003/eureka/
eureka7003模块的application.yml
server: port: 7003 eureka: instance: hostname: eureka7003.com #eureka服务端的名称 client: register-with-eureka: false #不在注册中心注册自己 fetch-registry: false #表示自己就是注册中心,不需要检索服务,只需要维护服务实例 service-url: defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/
另外需要注意,我们之前在服务提供者8001中的配置是,将服务注册到服务端7001上,那么现在是集群环境,有三个服务端,所以需要将提供的服务注册到三个EurekaServer上,所以需要修改服务提供者8001的注册地址。
eureka: client: service-url: defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
以上eureka的集群配置基本完成,然后我们测试一下,启动三个EurekaServer,并将服务提供者8001启动,访问eureka7001.com:7001。
我们看到,服务提供者已经将服务注册到注册中心了,而且我们访问的是7001,上面挂载着另外两个7002和7003。这里我相信大家都明白了,如果我们访问eureka7002.com:7002,同样的服务已经注册进来,而且挂载着7001和7003,那么访问eureka7003.com:7003亦是如此。
作者:蔡先森_caiyq
链接:https://www.jianshu.com/p/c9330b450050
来源:简书
本人补充:
在服务消费者注册到注册中心的时候,有两种做法,一种是:全部注册到注册中心集群的每一台机器上,示例做法如下:defaultZone: http://admin:123456@localhost:8888/eureka/,http://admin:123456@localhost:8889/eureka/,另外一种做法为,只将服务消费者注册到注册中心集群的其中一台机器上,两种做法均可。从可靠性角度说,第一种做法好些,提高了系统调用的可靠性。