spring-cloud|springcloud之高可用eureka集群搭建

至于eureka,这里就不做详细介绍了,有兴趣的可以去参阅下spring官网或某度上找找相关资料。今天我们这里主要说下eureka高可用集群式如何搭建的。
eureka是Netflix的子模块之一,也是一个核心的模块,eureka里有2个组件,一个是EurekaServer(一个独立的项目) 这个是用于定位服务以实现中间层服务器的负载平衡和故障转移,另一个便是EurekaClient(我们的微服务) 它是用于与Server交互的,可以使得交互变得非常简单:只需要通过服务标识符即可拿到服务。
话不多说,直接上代码。首先先搭建环境,工程代码如下(备注:以下所有代码均是基于spring-cloud:Finchley.SR2 版本,spring-boot:2.1.2.RELEASE版本):
spring-cloud|springcloud之高可用eureka集群搭建
文章图片

根据工程名称,三个eureka-server便是需要集群搭建的eureka服务了,两个order-server和user-server作为链接测试用。
在说eureka集群搭建前,还是先来说说eureka常见相关配置参数。
当然搭建eureka集群之前首先当然还是需要引入eureka相关依赖了。
eureka客户端依赖:

org.springframework.cloud spring-cloud-starter-netflix-eureka-client

eureka服务端依赖:
org.springframework.cloud spring-cloud-starter-netflix-eureka-server

服务端yml配置入下(基本配置,不再多说,不明白的好去好好看看官网了,相关重要配置见如下注释):
spring-cloud|springcloud之高可用eureka集群搭建
文章图片

当然对于我们的启动类,需要加上eureka的启动开关了,@EnableEurekaServer注解
spring-cloud|springcloud之高可用eureka集群搭建
文章图片

然今访问localhost:8001,即可看见eureka服务监控页面,说明或者单机的eureka服务已经启动完成了。下面可尝试添加下服务。
spring-cloud|springcloud之高可用eureka集群搭建
文章图片

spring-cloud|springcloud之高可用eureka集群搭建
文章图片

客户端 配置如下:配置好对应的eureka服务端url即可。
spring-cloud|springcloud之高可用eureka集群搭建
文章图片

我们来去注册一个user的服务,当然对于客户端服务,我们需要在启动类上增加@EnableEurekaClient注解
spring-cloud|springcloud之高可用eureka集群搭建
文章图片

启动一下,看到如下效果说明服务已经注册成功了。
spring-cloud|springcloud之高可用eureka集群搭建
文章图片

好,单机版的eureka已经注册完了,下面进入正题,我们来搭建高可用eureka集群。
集群原理是服务启动后向Eureka注册,Eureka Server会将注册信息向其他Eureka Server进行同步,当服务消费者要调用服务提供者,则向服务注册中心获取服务提供者地址,然后会将服务提供者地址缓存在本地,下次再调用时,则直接从本地缓存中取,完成一次调用。
搭建模型如下图(依次相互注册即可):
spring-cloud|springcloud之高可用eureka集群搭建
文章图片

为了便于展示,我们先配置几个本地域名,改下host文件即可:如下
spring-cloud|springcloud之高可用eureka集群搭建
文章图片

下面我们便来配置eureka服务,配置文件很明显,相互配置即可,自己配别人的,三个服务的详细配置如下:
spring-cloud|springcloud之高可用eureka集群搭建
文章图片

spring-cloud|springcloud之高可用eureka集群搭建
文章图片

spring-cloud|springcloud之高可用eureka集群搭建
文章图片

同时设置不注册自己
至于为什么不注册自己了呢?,回到最上面我们说过,eureka的server会把自己的注册信息与其他的server同步,所以这里我们不需要注册到自己身上,因为另外两台服务器会配置本台服务器。(这里可能有点绕,可以参考一下刚刚那张集群环境的图,或者自己动手配置一下,另外两台eureka的配置与这个是差不多的,就不发出来了,只要注意是注册到其他的服务上面就好了)
registerWithEureka: true #不把自己作为一个客户端注册到自己身上
fetchRegistry: true #不需要从服务端获取注册信息(因为在这里自己就是服务端,而且已经禁用自己注册了)
好了,下面我们来启动下我们的集群:
spring-cloud|springcloud之高可用eureka集群搭建
文章图片

spring-cloud|springcloud之高可用eureka集群搭建
文章图片

spring-cloud|springcloud之高可用eureka集群搭建
文章图片

看到如上信息,便说明我们的eureka集群已经搭建好了,那么我们现在向eureka集群注册一下我们的user服务,当然现在注册方式写法也要变一下了,就是 原来是注册到那一个地址上面,现在是要写三个eureka注册地址,但是不是代表他会注册三次,因为我们eureka server的注册信息是同步的,这里只需要注册一次就可以了,但是为什么要写三个地址呢。因为这样就可以做到高可用的配置:打个比方有3台服务器。但是突然宕机了一台, 但是其他2台还健在,依然可以注册我们的服务,换句话来讲, 只要有一台服务还建在,那么就可以注册服务,具体如下:
spring-cloud|springcloud之高可用eureka集群搭建
文章图片

spring-cloud|springcloud之高可用eureka集群搭建
文章图片

可以看到我们的user服务已经注册上去了,下面来验证下集群的可用性。
spring-cloud|springcloud之高可用eureka集群搭建
文章图片

如上图,我们先停掉8003,模拟下服务宕机,发现我们的user服务还是可以正常访问的。
spring-cloud|springcloud之高可用eureka集群搭建
文章图片

当然后面我停掉另外两个的一个,服务也还是可以继续访问的,有兴趣的可以自己做下实验
至此,我们的一个简单的高可用eureka集群就搭建好了,当然生产上真正使用的时候就没这么简单的了, 这只能说给大家一个基础的思路和认知,帮我们后面更好的去深入了解我们的spring-cloud体系。
【spring-cloud|springcloud之高可用eureka集群搭建】今天就到这了,有问题请指正。

    推荐阅读