- 用Spring Cloud Eureka 搭建集群高可用的服务的时候,借用网友的一个定义词就是 "直觉bug" , 就是我们直觉上认为这是一个BUG,是一个错误,而实际并没有出错。如下图:(借用网友的图)
虽然出现报错信息,但是,整个程序并没有出错。至于原因,图片上的文字已经很好的解释了。
在此,再简单的说一下。
出现这种情况的原因是,我们的程序已经启动(已经出现红框中此条日志,代表程序已经启动,所以程序本身没有问题。),为什么会出现错误呢?
是因为在此系统中,我们要搭建的是集群环境, 每一台服务器在自己启动之后,都要去连接集群中的其他服务器,以便于相互之间通讯传递信息。
但是,我们肯定是按照次序启动服务器,我们不管先启动哪一台服务器,其他的服务器都还没有准备就绪,所以肯定会出现找不到要连接的服务器,所以会报错。
这个错误根本不需要解决, 把所有的服务器全部启动,整个集群就可以正常运行(因为出现的是连接错误,现在所有的服务器已经准备就绪,所以不会再一次出现连接错误,除非某台服务器down掉。)
>接下来讲一下搭建eureka的集群过程
1. 根据翟永超的《SpringCloudEureka微服务实战》一书中第二章第三章搭建的服务,分为eureka-serve(注册中心),eureka-client(客户端),eureka-consume(消费者),主要讲eureka集群实现,跟书中内容有点区别就是这里使用的配置文件是
application.yaml,eureka的集群配置全部在这个文件中添加:如下图
2. 在服务的启动类头部添加Eureka注解
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@EnableEurekaServer
@SpringBootApplication
public class Application {
public static void main(String[] args){
new SpringApplicationBuilder(Application.class) .web(true).run (args);
}
}
3. 在idea配置启动项 ,这里的红线框中的peer1保持一致,如果是peer2,就在--spring.profiles.active=改成peer2
ps:这里有必要提醒一下,在微服务一书中使用的properties文件配置,而启动的是把服务都打包成jar来启动的,不是用idea,请读者留意
4. 因为实在一台机器上实验,所以修改host文件(windows系统下、C:\Windows\System32\drivers\etc)
127.0
.
0.1
peer1
127.0
.
0.1
peer2
PS:官方文档中说到这个配置在生产环境当中(线上服务器开发)没有太大作用,这里仅供本地使用
5.启动两个配置好的启动项peer1和peer2,正常启动成功后就会出现各自的端口号:下图是成功启动效果
至此,在本机配置的eureka的集群完成
二、实现eureka高可用集群的优缺点
优点:也即是我们实现的目的,先来看(借用)下图:
在实际开发中,注册中心是存在多个节点。但从上面的例子当中,我们可以知道:
Eureka Server的同步遵循着一个非常简单的原则:只要有一条边将节点连接,就可以进行信息传播与同步。
所以,如果存在多个节点,我们只需要将节点之间两两连接起来,形成通路,那么他们之间的所有服务都可以共享。
而我们的服务只需要向集群中的任意一个注册中心中注册,即可被所有注册中心所共享,任意一个注册中心崩溃,都不会影响这个服务被调用。
缺点:不过这里的缺点就是,如果peer1被关闭了,虽然peer2可以访问到peer1上的服务,但是却是不能实时监控的,因为这个不是向peer2中注册的服务,所以当服务down之后,peer2中仍然会认为是up的。
总结
以上内容均通过自身实践和参考博友的部分来编写,会有所认识不足,请看友多多提出,欢迎指正!分享技术,共同参与