Docker Swarm运行Spring Cloud应用(二):Eureka高可用

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 本文章为大家介绍如何在Docker swarm-mode集群部署一个Eureka集群,并配置应用服务访问Eureka。通过这样的方式可以很方便地做到基础服务和应用分开部署,并且可以保证了基础服务的高可用。

在上篇文章中介绍了如何如何在Docker Swarm集群中部署Spring Cloud应用。本文章为大家介绍如何实现Eureka的高可用。

Docker Swarm运行Spring Cloud应用(一):部署

Docker Swarm运行Spring Cloud应用(二):Eureka高可用(本文)

基础服务独立部署

把所有服务一次性部署好非常方便,但是在生产环境中使用的时候需要考虑这样一些因素:

  • 在生产环境中的基础服务,如Eureka由于更新不频繁,应该和频繁更新应用服务分开部署
  • 作为基础服务的Eureka需要考虑高可用

我们可以把部署描述文件分成两部分,eureka.yml 用来部署作为基础服务的Eureka Server,是包含三各节点的集群。

eureka.yml

version: '3'
services:
  eureka1:
    image: binblee/demo-eurekaserver
    networks:
      springcloud-overlay:
        aliases:
          - eureka
    ports:
      - "8761:8761"
    environment:
      - ADDITIONAL_EUREKA_SERVER_LIST=http://eureka2:8761/eureka/,http://eureka3:8761/eureka/
    ...
  eureka2:
    image: binblee/demo-eurekaserver
    networks:
      springcloud-overlay:
        aliases:
          - eureka
    ports:
      - "8762:8761"
    environment:
      - ADDITIONAL_EUREKA_SERVER_LIST=http://eureka1:8761/eureka/,http://eureka3:8761/eureka/
    ...
  eureka3:
    image: binblee/demo-eurekaserver
    networks:
      springcloud-overlay:
        aliases:
          - eureka
    ports:
      - "8763:8761"
    environment:
      - ADDITIONAL_EUREKA_SERVER_LIST=http://eureka1:8761/eureka/,http://eureka3:8761/eureka/
    ...
networks:
  springcloud-overlay:
    external:
      name: springcloud-overlay

Eureka部署到的网络springcloud-overlay需要手动创建,命令如下:

docker network create -d overlay springcloud-overlay

从部署模版中可以看出这三个Eureka实例在网络上的别名(alias)都是eureka,对于客户端可以在配置文件中指定这个别名即可,不必指定三个示例的名字。

application.yml

eureka.client.serviceUrl.defaultZone=http://${EUREKA_SERVER_ADDRESS}:8761/eureka/

Eureka Server的地址通过${EUREKA_SERVER_ADDRESS} 环境变量传入。

services:
  web:
    image: binblee/demo-web
    ...
    environment:
      - EUREKA_SERVER_ADDRESS=eureka

另外要注意的是所有依赖于Eureka的应用服务都要挂到springcloud-overlay网络上,否则无法和Eureka Server通信。下面是比较完整的部署描述文件的示例:

version: '3'
services:
  web:
    image: binblee/demo-web
    networks:
      - springcloud-overlay
    environment:
      - EUREKA_SERVER_ADDRESS=eureka
    ports:
      - "8080"
    ...

  bookservice:
    image: binblee/demo-bookservice
    networks:
      - springcloud-overlay
    environment:
      - EUREKA_SERVER_ADDRESS=eureka
    ...

networks:
  springcloud-overlay:
    external:
      name: springcloud-overlay

部署这几个服务需要3个步骤,首先创建overlay网络,然后部署Eureka,最后再部署应用服务。命令如下:

docker network create -d overlay springcloud-overlay
cd compose/
docker stack deploy -c eureka.yml
docker stack deploy -c demoweb.yml

访问Swarm集群中的任意节点的8761端口,可以看到Eureka实例1有两个副本,eureka2和eureka3,2个应用服务已经注册上去了。访问8762和8763,可以看到另外两个Eureka的管理界面,内容类似。

eureka_cluster

小结

本文章为大家介绍如何在Docker swarm-mode集群部署一个Eureka集群,并配置应用服务访问Eureka。通过这样的方式可以很方便地做到基础服务和应用分开部署,并且可以保证了基础服务的高可用。本文的示例代码在github上。

另外,了解更多阿里云容器服务内容,请访问 https://www.aliyun.com/product/containerservice

相关文章
|
6天前
|
人工智能 API 数据安全/隐私保护
使用 Docker 一键免费部署 63.8k 的私人 ChatGPT 网页应用
NextChat 是一个可以在 GitHub 上一键免费部署的私人 ChatGPT 网页应用,支持 GPT3、GPT4 和 Gemini Pro 模型。该项目在 GitHub 上获得了 63.8k 的 star 数。部署简单,只需拉取 Docker 镜像并运行容器,设置 API Key 后即可使用。此外,NextChat 还提供了预设角色的面具功能,方便用户快速创建对话。
54 22
使用 Docker 一键免费部署 63.8k 的私人 ChatGPT 网页应用
|
15天前
|
人工智能 前端开发 Java
基于开源框架Spring AI Alibaba快速构建Java应用
本文旨在帮助开发者快速掌握并应用 Spring AI Alibaba,提升基于 Java 的大模型应用开发效率和安全性。
基于开源框架Spring AI Alibaba快速构建Java应用
|
5天前
|
监控 持续交付 Docker
Docker 容器化部署在微服务架构中的应用有哪些?
Docker 容器化部署在微服务架构中的应用有哪些?
|
5天前
|
监控 持续交付 Docker
Docker容器化部署在微服务架构中的应用
Docker容器化部署在微服务架构中的应用
|
7天前
|
运维 开发者 Docker
Docker Compose:简化容器化应用的部署与管理
Docker Compose:简化容器化应用的部署与管理
|
13天前
|
JavaScript 持续交付 Docker
解锁新技能:Docker容器化部署在微服务架构中的应用
【10月更文挑战第29天】在数字化转型中,微服务架构因灵活性和可扩展性成为企业首选。Docker容器化技术为微服务的部署和管理带来革命性变化。本文探讨Docker在微服务架构中的应用,包括隔离性、可移植性、扩展性、版本控制等方面,并提供代码示例。
51 1
|
7天前
|
前端开发 开发者 Docker
深入探索Docker Compose:简化多容器应用的部署
深入探索Docker Compose:简化多容器应用的部署
27 0
|
6月前
|
安全 Linux 数据安全/隐私保护
docker运行报错docker: Error response from daemon: AppArmor enabled on system but the docker-default prof
docker运行报错docker: Error response from daemon: AppArmor enabled on system but the docker-default prof
414 0
|
1月前
|
安全 Docker 容器
Docker中运行容器时Operation not permitted报错问题解决
【10月更文挑战第2天】Docker中运行容器时Operation not permitted报错问题解决
289 3
|
关系型数据库 MySQL Devops
docker容器刚启动就停止 — 运行mysql 报错 mysqld: [ERROR] Fatal error in defaults handling. Program aborted!
docker容器刚启动就停止 — 运行mysql 报错 mysqld: [ERROR] Fatal error in defaults handling. Program aborted!
943 0