欢迎来到菜鸟SpringCloud入门实战系列(SpringCloudForNoob),该系列通过层层递进的实战视角,来一步步学习和理解SpringCloud。
本系列适合有一定Java以及SpringBoot基础的同学阅读。
每篇文章末尾都附有本文对应的Github源代码,方便同学调试。
Github仓库地址:
https://github.com/qqxx6661/springcloud_for_noob
你还可以 通过以下两种途径查看菜鸟SpringCloud入门实战系列 :
简单的服务注册中心Eureka Server与服务提供者Eureka Client的网络拓扑图
这种配置方式有以下致命缺陷:
为了方便学习集群eureka,我们创建单独的子模块eureka-ha
修改其application.yml
--- # 高可用节点1的配置 server: port: 8771 spring: # 节点1的标签 profiles: peer1 # 服务名保持一致 application: name: eureka-ha eureka: instance: hostname: peer1 client: # 进行注册(高可用配置、默认配置) # registerWithEureka: true # 获取注册信息(高可用配置、默认配置) # fetchRegistry: true serviceUrl: # 节点1向节点2/3进行服务注册 defaultZone: http://localhost:8772/eureka/,http://localhost:8773/eureka/ --- # 高可用节点2的配置 server: port: 8772 spring: # 节点2的标签 profiles: peer2 # 服务名保持一致 application: name: eureka-ha eureka: instance: hostname: peer2 client: # 进行注册(高可用配置、默认配置) # registerWithEureka: true # 获取注册信息(高可用配置、默认配置) # fetchRegistry: true serviceUrl: # 节点2向节点1/3进行服务注册 defaultZone: http://localhost:8771/eureka/,http://localhost:8773/eureka/ --- # 高可用节点3的配置 server: port: 8773 spring: # 节点3的标签 profiles: peer3 # 服务名保持一致 application: name: eureka-ha eureka: instance: hostname: peer3 client: # 进行注册(高可用配置、默认配置) # registerWithEureka: true # 获取注册信息(高可用配置、默认配置) # fetchRegistry: true serviceUrl: # 节点3向节点1/2进行服务注册 defaultZone: http://localhost:8771/eureka/,http://localhost:8772/eureka/ 复制代码
代码重点:
和eureka一养,添加@EnableEurekaServer
因为是集群,所以要启动三个端口不同的实例,端口已经在yml文件中进行了设置。
在Run configuration里自行设置三个运行配置,分别对应三个配置文件,注意图中箭头的设置。
你也可以使用复制配置按钮:
如果你发现Run configuration里没有eureka-ha,请手动添加:
最后,分别运行三个eureka-ha:
打开网页,输入 http://localhost:8771/ , http://localhost:8772/ ,http://localhost:8773/
可以看到,Instances里有了三个注册的实例
你以为大功告成了,然而,你发现有一个问题,所有的服务显示在了unavailable-replicas之下。
经过搜索,看见了如下解释,
参考:Eureka高可用,节点均出现在unavailable-replicas下:
https://www.jianshu.com/p/59c54ccc6ba6
eureka.client.serviceUrl.defaultZone配置项的地址,不能使用localhost,要使用域名,DNS解析请自行配置。
由于我们在yml文件里设置了类似 defaultZone: http://localhost:8771/eureka/,http://localhost:8772/eureka/
, 符合上述问题, 所以这里的注册url不能设置为localhost
看来,还是需要自己搞定DNS,对应我Windows的环境,也就是要修改host设置。
修改HOST请自行谷歌,在host文件下添加三行:
127.0.0.1 peer1 127.0.0.1 peer2 127.0.0.1 peer3 复制代码
重新启动三个实例,大功告成:
我们新建子模块eureka-hi-ha,用来作为高可用集群下的服务提供者
修改application.yml,设置为8783端口
# 服务地址 server: port: 8783 # 服务名称 spring: application: name: service-hi-ha eureka: client: serviceUrl: # 这里只需要执行其中一个服务注册中心节点即可 defaultZone: http://peer1:8771/eureka/ 复制代码
这里只需要执行其中一个服务注册中心节点即可,其他两个eureka会自动收到来自peer1的客户端记录信息,进行同步。
启动eureka-hi-ha,同时刚才的三个eureka server 不要关闭
查看网页: http://localhost:8771/ , http://localhost:8772/ ,http://localhost:8773/
可以看到,8773也成功显示了服务。
我们来实验让一个节点停机,我们关闭peer1的进程
注意:
高可用的服务注册中心Eureka Server与服务提供者Eureka Client的网络拓扑图,可以总结如下:
当前其中任意节点宕机之后,其他节点上还保存着所有的服务注册信息。
springcloud(二):注册中心Eureka:
http://www.ityouknow.com/springcloud/2017/05/10/springcloud-eureka.html
Spring-Cloud笔记03:服务注册中心Eureka Server的简单配置、访问控制配置以及高可用配置
https://blog.csdn.net/hanchao5272/article/details/80561199