高可用服务注册中心(Eureka-Cluster)
在实际生产中,我们需要高可用的集群方案,本章就是基于SpringBoot1.5.4 Cloud(Dalston.SR2) 的高可用
Eureka Cluster
,以及生产中需要注意的事项…
- Eureka Cluster
本教程用1个项目(battcn-cloud-discovery),多环境方式演示
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。- pom.xml
1 |
<dependencies> |
- Application.java
1 |
@SpringBootApplication |
- application.yml
1 |
server: |
- 启动集群
命令:mvn clean package (先打成jar包)
1 |
peer1:java -jar battcn-cloud-discovery.jar --spring.profiles.active=peer1 |
1.点击蓝色加号
2.点击Spring Boot
3.填写 Name:peer1 Program arguments:–spring.profiles.active=peer1(启动2个操作2次,记得改名字和激活环境,Eclipse太简单了application.yml 直接修改内容启动就行了)
启动成功分别访问
1 |
http://peer1:7001 |
1 |
http://peer2:7002 |
如出现上图所示,代表我们集群启动成功
- 高可用测试
1.创建battcn-cloud-h1
和 battcn-cloud-h2
2个项目,基本大同小异
就这2个包够了,跟 h1 代码唯一的区别就是 h2 做调用 h1写好接口就行了
- pom.xml
1 |
<dependencies> |
- application.yml
1 |
server: |
- H2Application.java
1 |
@SpringBootApplication |
- 测试
分别启动 battcn-cloud-h1
和 battcn-cloud-h2
访问:http://localhost:7012/h2?email=1837307557@qq.com
浏览器:My Name's :battcn-cloud-h1 Email:1837307557@qq.com
代表请求成功,然后我们断掉 peer1
或者 peer2
继续请求依旧可用,只是日志会抛异常,通过日志我们可以发现peer2
time out 因为它被杀掉了,但是这并不影响我们服务调用(高可用),只要在启动peer2
错误就不会在出现,在生产中如果集群都挂了 直接 运维下岗就是了(如果peer1
peer2
同时挂掉,在启动服务会自动注册上去.)
1 |
2017-07-31 23:01:03.314 ERROR 14792 --- [-target_peer2-8] c.n.e.cluster.ReplicationTaskProcessor : Network level connection to peer peer2; retrying after delay |
- 注意事项
EurekaClientConfigBean.java 默认构造方法,如果serviceUrl.defaultZone = null 那么 就注册到 http://localhost:8761/eureka/
中去(日志会输出改地址,起初我是看的一脸懵逼),所以其他的Key都可以以 杠(-) 或者全大写方式,该处不行,因为人家源码是Map不是对象
1 |
public EurekaClientConfigBean() { |
- 小谈
其实我是比较倾向于 consul
这种零侵入式的,但是consul
在做高可用比较操蛋,它对外暴露的是 agent
如果你这个 agent
挂了,那么后面服务就GG思密达了,cloud service 不允许配置多个agent
,个人没找到好的解决方案,有好方案的可以交流…..
