前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >docker化包含两个实例的HA eureka服务

docker化包含两个实例的HA eureka服务

原创
作者头像
技术蓝海
发布2018-04-24 17:17:19
2.2K3
发布2018-04-24 17:17:19
举报
文章被收录于专栏:wannshan(javaer,RPC)wannshan(javaer,RPC)

环境资源

1,192.186.64.132 centos7 服务器一台,上面已安装docker18 ce版

2,本地ide是idea2017

目的

想在centos7上使用docker技术,用最新版本的spring-clould搭建一个(包含有两个Eureka实例)HA Eureka服务,以供个人学习用

本地的工作

根据官网上给出https://github.com/spring-cloud-samples/eureka例子,clone到本地后可以跑一个eureka服务

但它存在以下不令我满意的地方

1,是两年之前的版本做的。

2,是单实例的服务模式

3,服务注册上,再失效后,不能感知自动擦除注册信息

这里针对以上问题,做下改造。

用spring-boot2.0和Finchley.M9版本

   <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.0.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Finchley.M9</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

这里注意,由于spring-clould Finchley.M9版本把spring-cloud-starter-eureka-serve

作为spring-clou-netflix的一个子项目,所以原来的对

spring-cloud-starter-eureka-server的依赖

要改成spring-cloud-starter-netflix-eureka-server

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

配置成能相互发现注册的多实例模式,并能感知自动擦除无效的注册信息

改写application.yml相关配置

eureka:
#  client:
#    registerWithEureka: false  这部分注释掉,默认是true,能互相注册发现
#    fetchRegistry: false
  server:
    waitTimeInMsWhenSyncEmpty: 0
    enable-self-preservation: false # 关闭自保护模式
    eviction-interval-timer-in-ms: 4000 #注册信息自擦除 4s
  instance:
    preferIpAddress: true

#服务监听端口
server:
  port: 8760

spring:
  application:
    name: EUREKA-SERVER-DOCKER  # 服务名称

#利用spring的profiles 来指定启动服务实例的不同的配置
---
spring:
  profiles: peer1

eureka:
  client:
    serviceUrl:
      defaultZone: http://192.168.64.132:8762/eureka/ #服务实例的1的备份服务地址指向服务2
  instance:
    hostname: eurekaserver1
    instance-id: eurekaserver1  # 实例名称
---
spring:
  profiles: peer2

eureka:
  client:
    serviceUrl:
      defaultZone: http://192.168.64.132:8761/eureka/ #服务实例的2的备份服务地址指向服务1
  instance:
    hostname: eurekaserver2
    instance-id: eurekaserver2

由于要在docker上运行,首先要构建镜像,所以还要改造pom文件的docker-maven-plugin配置

<plugin>
	<groupId>com.spotify</groupId>
	<artifactId>docker-maven-plugin</artifactId>
<!--版本也换新的-->
	<version>1.0.0</version>
	<configuration>
<!--远程docker服务地址,这需要docker服务能接受远程连接,后面提到-->
<dockerHost>http://192.168.64.132:2375</dockerHost>
<!--构建镜像的基础镜像java 8-->
		<baseImage>java:8</baseImage>
<!--指定镜像的名称和版本-->
		<imageName>${docker.image.prefix}/${project.artifactId}:1.3</imageName>
		<!--<exposes>8761</exposes>-->
		<entryPoint>["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/${project.build.finalName}.jar"]</entryPoint>
		<resources>
			<resource>
				<targetPath>/</targetPath>
				<directory>${project.build.directory}</directory>
				<include>${project.build.finalName}.jar</include>
			</resource>
		</resources>

	</configuration>
</plugin>

以上本地的工作基本做完了,下面就是在centos上的工作了。

centos上的工作

启动docker服务

dockerd -H  tcp://0.0.0.0:2375

这种方式以tcp协议在2375端口上对外提供服务,这样就可以接口远程请求了。

构建镜像

在项目目录下执行mvn命令

mvn clean package docker:build

直到提示sucessful

第一次构建可能会比较慢,应为要下载基础镜像

这个命令实际执行是在centos7上,mvn这里只是发送一个构建的命令和jar包的上传。

镜像构建完成后,centos7上通过 images命令可以看到我们打包好的镜像

docker -H  0.0.0.0:2375  images
REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE
wannshan/eureka-server      1.3                 e770b2f50f7f        About an hour ago   688MB

最后,编写编排文件docker-compose.yml,内容如下

version: "3"
services:
  eurekaserver1:
    image: wannshan/eureka-server:1.3
    ports:
      - "8761:8760"
    environment:
      - spring.profiles.active=peer1

  eurekaserver2:
    image: wannshan/eureka-server:1.3
    ports:
      - "8762:8760"
    environment:
      - spring.profiles.active=peer2

意思是用镜像wannshan/eureka-server:1.3部署两个服务实例,并制定映射端口。启动时用不同的spring.profiles.active值

现在镜像和编排文件都有了,只要用编排文件启动容器就可以了。

编排文件的执行,可以用docker-compose工具。
但需要单独安装docker-compose工具,https://github.com/docker/compose有相关的文档。
你可以在docker-compose.yml文件所在目录,执行命令
docker-compose up
我是用 
docker -H  0.0.0.0:2375  stack deploy -c docker-compose.yml eureka

执行的。如果没有swarm配置stack 命令会出错。

因为之前在这个机器上搭建过swarm集群,所以这里用服务栈stack命令执行编排文件。更牛逼。

利用swarm,容器挂了自动帮你重启。

启动后,

docker -H  0.0.0.0:2375  container ls
CONTAINER ID        IMAGE                        COMMAND                  CREATED             STATUS              PORTS               NAMES
8dbdc97b6a26        wannshan/eureka-server:1.3   "java -Djava.securit…"   2 minutes ago       Up 2 minutes                            eureka_eurekaserver1.1.xoca0zk7baofucqfpq1fawdud
9b313a6c217b        wannshan/eureka-server:1.3   "java -Djava.securit…"   2 minutes ago       Up 2 minutes                            eureka_eurekaserver2.1.t54cc1iardgrtb01oymobg4qx

我们把本地8080的服务hollo-wold注册到http://192.168.64.132:8761/eureka后

访问http://192.168.64.132:8761可以看到

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档