目录
- SpringCloud微服务入门(零),开篇
- SpringCloud微服务入门(一),Eureka注册中心
- SpringCloud微服务入门(二),Eureka Client
- SpringCloud微服务入门(三),Eureka高可用集群
- SpringCloud微服务入门(四),创建服务
- SpringCloud微服务入门(五),Feign实现服务通信
- SpringCloud微服务入门(六),负载均衡Ribbon
- SpringCloud微服务入门(七),服务网关Zuul
- SpringCloud微服务入门(八),服务熔断组件Hystrix
- SpringCloud微服务入门(九),统一配置中心Config
- SpringCloud微服务入门(十),完结篇,是结束也是开始
- 番外篇 - 安装Docker,运行RabbitMQ镜像)
正文
在Eureka中高可用的最简单体现就是集群。简单说,就是一个相同的应用部署N次在不同的服务器中,然后在把这些相同的应用按一定规则去轮流调用,保证其中一个挂掉后,另外一个能够快速的顶替上。
(图一)
图一就是一个最简单的集群架构,将一个应用部署多份,通过代理软件将访问地址暴露给外部,这就是集群。我们常用的代理软件是Nginx。可能有些人容易把集群跟分布式搞混淆,下面我们在看看图二中的分布式架构是怎样的。
(图二)
从图二可以看到,所谓的分布式就是把应用模块拆分,部署在不同的服务器中,再通过分布式代理软件提供给外部调用。
总结:
一个应用部署多次,是集群。一个应用按模块拆分部署是分布式。
有了上面的一系列铺垫,现在跟着笔者进入正题。EurekaServer集群是怎么实现的。其实非常简单,改一改application.properties配置就可以了。
笔者在第一节、第二节的分享中都有提到,EurekaServer自身也是一个EurekaClient,有了这个特性后,EurekaServer可以向另外一个EurekaServer把自己注册成Client。当他们之间相互注册后,就是一个集群了。
按图一的思路,同一个应用部署多次,就是集群。说明我们要把EurekaServer部署多次。为了演示方便,况且笔者也没那么多服务器部署,就在单机上启动两次EurekaServer,然后让它们达到集群的目的。
现在笔者约定,部署两次的Server端口,分别为8761和8762。那么可以得到两个Server的注册地址分别是:http://localhost:8761/eureka/
和http://localhost:8762/eureka/
1、编译8761
修改application.properties文件,添加以下内容:
eureka.client.service-url.defaultZone=http://localhost:8762/eureka/
这个配置表示8761端口的EurekaServer将向8762端口的EurekaServer注册。
(图三)
其它什么也不要做,跟着笔者从命令行进入到eureka-server的根目录。执行以下命令,编译并打包eureka-server
mvn compile package
mv target/eureka-server-0.0.1-SNAPSHOT.jar target/eureka-server-8761.jar
2、编译8762
修改application.properties文件,添加以下内容:
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
这个配置表示8762端口的EurekaServer将向8761端口的EurekaServer注册。这样就达到了相互注册的目的。
(图四)
其它什么也不要做,再一次跟着笔者从命令行进入到eureka-server的根目录。执行以下命令,编译并打包eureka-server
mvn compile package
mv target/eureka-server-0.0.1-SNAPSHOT.jar target/eureka-server-8762.jar
3、运行EurekaServer集群
跟着步骤1、步骤2的一番操作,8761、8762端口的EurekaServer应用都打包好了。现在再次回到命令行的项目根目录下分别启动两个打包好的应用。
打开两个命令行窗口,都cd到项目的根目录,在第一个启动8761,命令如下:
java -Dserver.port=8761 -jar ./target/eureka-server-8761.jar
在第二个启动8762,命令如下:
java -Dserver.port=8762 -jar ./target/eureka-server-8762.jar
打开浏览器,分别访问http://localhost:8761
和http://localhost:8762
,都可以打开,并且在应用列表会看到了个EUREKA-SERVER,就表示集群成功了。
(图五)
4、将EurekaClient注册到集群中
这个同样非常简单,修改eureka-client项目的application.properties文件,在eureka.client.service-url.defaultZone后面在追加一个地址就可以了。
(图六)
5、运行EurekaClient,验证成果
在eureka-client项目的启动类中,直接右键运行。再去浏览器中看EurekaServer的界面,发现应用列表中已经出现EUREKA-CLIENT,不管是8761还是8762两个的应用列表都是一样的,才表示注册到集群中成功了。
(图七)
为了验证集群带来的好处,可以停止8761的应用,会发现8762依然注册着EUREKA-CLIENT。这时再重启eureka-client,会发现只有8762一个端口的应用,eureka-client依然可以注册成功。 当再次启动8761的时候,8761会自动与8762同步,EUREKA-CLIENT又出现在8761的应用列表中了。这就是集群带来的好处,一个节点死掉后,另外一个会顶上,保证客户端应用正常的注册使用。