使用Docker在本地搭建调试高可用Eureka集群

白昼怎懂夜的黑 提交于 2019-12-10 06:29:26

写在前面的话

Hi,小伙伴们。继上期分享了如何用Docker部署自己的第一个SpringBoot应用之后,爱折腾的Storm还是耐不住性子,又折腾了一下SpringCloud应用的部署。在不使用Docker部署的时候呢,在本地模拟搭建一个高可用的Eureka集群是相当简单的。但是使用Docker部署的时候遇到了节点无法通信的问题,折腾半天终于完美解决这个问题,以此记录一下。

原因猜测

在项目中,我使用的是域名来区分不同的Eureka服务,本地Host绑定这些域名解析为127.0.0.1 但是部署到容易当中的时候就无法进行通信了,因此需要使用其他方法来建立通信。更改配置,使用ip并不是我的意图,虽然在实际生产环境是可以的,但是硬编码的风格显然不是最好的方案。

解决方案

经过资料的收集和整理,发现docker-compose能够解决这个问题,它能够自定义编排要发布的容易,包括容器依赖和通信并且统一部署。因此我在此使用它来解决上述的部署问题。

准备工作

首先我们需要构建Eureka服务,使用不同的端口,具体源码见我的开源项目

  • SpringBoot-Cloud-Learning:
    分别绑定配置文件中的三个域名到host,解析到127.0.0.1
    尝试直接启动这单个SpringBoot应用,是可以直接发布成分布式高可用Eureka集群的。
    进入http://eureka-server-01:1001/eureka/可以看到相应的监控界面
    接下来我们用Docker单独构建这三个应用,具体方法可以看我上一期的文章。
  • 使用Docker部署SpringBoot应用:

主要工作

我们需要在项目根目录下新建一个docker文件夹,用于存储Docker部署相关的文件,在此文件夹下新建一个docker-compose.yml文件,内容如下

version: "2.1"
services:
  eureka-server-01:
    image: eureka-server-01
    hostname: eureka-server-01
    networks:
      - eureka-net
    ports:
      - "1001:1001"

  eureka-server-02:
    image: eureka-server-02
    hostname: eureka-server-02
    networks:
      - eureka-net
    ports:
      - "1002:1002"

  eureka-server-03:
    image: eureka-server-03
    hostname: eureka-server-03
    networks:
      - eureka-net
    ports:
      - "1003:1003"

这里的配置主要是编排我们将要发布的三个容器基本信息,包括容器的名称,镜像名称,host名称,端口等等。这样我们统一发布这些应用,应用之间就可以相互通信了,而不是网络隔离的状态。

最后我们在idea中运行这个文件,不出意外的话,我们就可以看到三个容器正常部署并且输出打印日志。同样的,访问http://eureka-server-01:1001/eureka/ 查看是否有挂载3个节点,并且都处于正常状态。到这里高可用Eureka高可用服务注册与发现中心得Docker部署搭建就完成啦,这个也是同样可以用于Feign等Eureka客户端的部署使用过程当中的,大家可以自行尝试。我的项目当中已经为大家准备好了Demo,可以自行查看。我们下期见吧。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!