【生意多】-免费发布分类信息
当前位置: 首页 » 新闻 » 教程 » 操作系统 » 正文

大数据集群部署(java集群部署)

放大字体  缩小字体 发布日期:2022-07-02 17:18:41    浏览次数:23
  • 故事背景

最近因为产线使用的服务与发现服务,使用的是Spring Cloud Eureka集群部署,为了以后调试产线的问题,想在本地搭建和产线一样的环境。产线的所有服务都是基于K8s和Docker部署,所以本地也想将Eureka部署到本地的Docker环境。

  • Eureka介绍

Eureka 属于 Spring Netflix的一个子项目,主要是为了实现服务的注册与发现,如果我们做微服务开发,这个功能是必不可少的。具有类似功能的 Spring 子项目还有 Spring Consul、Zookeeper 和 阿里的 Nacos,后面如果使用到再做介绍。

  • Spring配置

首先,我们要创建一个Spring boot项目,建议使用Idea去创建,比较方便,如下图:

 

 

 直接Next,然后设置自己项目信息,然后选择pom的依赖项,如下图:

 

 

直接Next,然后finished, 这里推荐使用父子module的项目管理方式。项目创建完成以后,进行服务的配置,首先,需要在Application启动类上加注解 @EnableEurekaServer,如下图:

 

 然后,进行yml文件的配置,因为我们要部署集群,所以我们创建3个yml文件,然后文件中设置不同的端口来启动,如下图:

 

 yml文件内容如下:

application-eureka01.yml------------------------------------------------------------spring:  application:    name: eurekaserver:  port: 7001eureka:  instance:    #eureka服务端的实例名称    hostname: eureka01  client:    # false表示不向注册中心注册自己    register-with-eureka: true    # false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务    fetch-registry: true    service-url:      #设置与Eureka Server交互的地址查询服务和注册服务都需要依赖这个地址(单机)。      defaultZone:  http://eureka02:7002/eureka/,http://eureka03:7003/eureka/application-eureka02.yml------------------------------------------------------------spring:  application:    name: eurekaserver:  port: 7002eureka:  instance:    #eureka服务端的实例名称    hostname: eureka02  client:    # false表示不向注册中心注册自己    register-with-eureka: true    # false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务    fetch-registry: true    service-url:      #设置与Eureka Server交互的地址查询服务和注册服务都需要依赖这个地址(单机)。      defaultZone: http://eureka01:7001/eureka/,http://eureka03:7003/eureka/application-eureka03.yml------------------------------------------------------------spring:  application:    name: eurekaserver:  port: 7003eureka:  instance:    #eureka服务端的实例名称    hostname: eureka03  client:    # false表示不向注册中心注册自己    register-with-eureka: true    # false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务    fetch-registry: true    service-url:      #设置与Eureka Server交互的地址查询服务和注册服务都需要依赖这个地址(单机)。      defaultZone: http://eureka01:7001/eureka/,http://eureka02:7002/eureka/

然后,在Serives View里面创建3个启动配置,并且分别设置 Active profiles,如下图:

 

 最后,也是比较容易忘记的一步,记得修改本地的hosts文件,添加一行 :

127.0.0.1 eureka01 eureka02 eureka03

启动3个Eureka 服务,然后访问:http://localhost:7001/,你会看到如下页面,说明你已经配置成功:

 

 

  • Docker配置

 我本地是安装的windows版本docker,主要是为了节省内存,如果在linux下安装还需要装一个虚拟机工具。而且windows版本的docker用起来也蛮方便的,很多操作可以在Dashboard里面操作,省去了很多不断重复的命令,特别是看日志和进入容器。具体安装过程很简单,这里就不作说明。在这里首先我们要制作Dockerfile,制作好放到和pom文件的同目录下,内容如下图:

# 指定基础镜像,这是分阶段构建的前期阶段FROM openjdk:8u212-jdk-stretch as builder# 执行工作目录WORKDIR application# 配置参数ARG JAR_FILE=target/*.jar# 将编译构建得到的jar文件复制到镜像空间中COPY ${JAR_FILE} application.jar# 通过工具spring-boot-jarmode-layertools从application.jar中提取拆分后的构建结果RUN java -Djarmode=layertools -jar application.jar extract# 正式构建镜像FROM openjdk:8u212-jdk-stretchWORKDIR application# 前一阶段从jar中提取除了多个文件,这里分别执行COPY命令复制到镜像空间中,每次COPY都是一个layerCOPY --from=builder application/dependencies/ ./COPY --from=builder application/spring-boot-loader/ ./COPY --from=builder application/snapshot-dependencies/ ./COPY --from=builder application/application/ ./ENTRYPOINT ["java", "org.springframework.boot.loader.JarLauncher"]

然后,编译打包项目:

mvn clean package -U -DskipTests

这时会在target目录下看到 eureka-0.0.1-SNAPSHOT.jar 。接下来我们需要构建docker image,我们默认在Dockerfile的目录下,命令如下:

docker build -t eureka:0.0.8 .

此时我们可以用 Windows PowerShell 执行如下命令,去看一下我们构建的image,并且依次启动3个eureka服务:

 #查看所有镜像
 docker images

 #启动3个eureka服务
 docker run --name eureka01 -d -p 7001:7001 eureka:0.0.1 --spring.profiles.active=eureka01
 docker run --name eureka02 -d -p 7002:7002 eureka:0.0.1 --spring.profiles.active=eureka02
 docker run --name eureka03 -d -p 7003:7003 eureka:0.0.1 --spring.profiles.active=eureka03

此时我们可以在Docker Dashboard看到,我们启动的容器,但是此时容器之间是无法通过服务名相互访问的,所以在容器console中我们可以看到拒绝连接的报错:

接下来有重要一步骤就是,需要创建自己的一个bridge network,然后将eureka服务连接这个network中,因为默认docker的containers相互是可以通过IP相互访问,但是不能够通过hostname相互访问,docker的containers经常会动态改变,所以在这里我们就需要用到一个自定义bridge网路,它在容器之间提供了自动DNS解析的功能,具体原因可以参考这篇文章:https://juejin.im/post/6844903847383547911 。

# 创建一个自定义的 bridge network,指定网段的时候注意,别和其它网卡的网段冲突docker network create --subnet=172.19.0.0/16 mynetwork#查看创建的network信息docker network inspect mynetwork#删除网卡命令#docker network rm mynetwork# 将eureka服务加入mynetwork网络中docker network connect mynetwork eureka01docker network connect mynetwork eureka02docker network connect mynetwork eureka03#再次查看network的信息,你会看到每个eureka服务在 mynetwork 中分配的IP信息docker network inspect mynetwork

此时,我们再次查看容器的控制台,错误就会消失,我们再次访问 http://localhost:7001/ 可以看到eureka cluster已经正常运行起来。

 

 

在开发中有同样需求的同学,如果遇到什么问题可以留言交流!

 
(文/小编)
打赏
免责声明
• 
本文为小编原创作品,作者: 小编。欢迎转载,转载请注明原文出处:http://www.31duo.com/news/show-3609849.html 。本文仅代表作者个人观点,本站未对其内容进行核实,请读者仅做参考,如若文中涉及有违公德、触犯法律的内容,一经发现,立即删除,作者需自行承担相应责任。涉及到版权或其他问题,请及时联系我们。
 

(c)2016-2019 31DUO.COM All Rights Reserved浙ICP备19001410号-4

浙ICP备19001410号-4