docker swarm部署高可用eureka服务

本文介绍了如何使用Docker Swarm搭建集群,并在私有镜像库Harbor中注册服务,然后详细阐述了配置daemon.json、创建overlay网络、编写stack文件以及部署Eureka服务的过程,确保了跨主机容器的网络互通。最后,验证了各服务实例分布于不同节点并能正常通信。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.docker swarm搭建

1.比较简单,自行百度

2.查看swarm集群下面的节点

本人将所有的节点都promote成了manager

192.168..1.119作为私有镜像库服务(harbor私有镜像库搭建与使用见上篇博客

将需要在镜像库中的服务在daemon.json文件中注册

保存daemon.json文件后,刷新配置:systemctl daemon-reload

在110、111、112下分别注册私有镜像库服务

执行命令:vi /usr/lib/systemd/system/docker.service 修改docker.service文件,在三台服务器上分别添加红框内容:--insecure-registry=192.168.1.119 \

保存文件后分别执行:systemctl daemon-reload && systemctl restart docker.service

修改代码中eureka的application.yml文件

maven clean -> package -> 构建镜像 ->推送镜像到harbor(详细见上篇博客)

 harbor镜像位置:

分别在三台服务器上拉取eureka镜像:docker pull 192.168.1.119/demo/eureka:latest

在manager节点上创建一个overlay网络:docker network create -d overlay spring-cloud-overlay

查看网络列表:docker network ls

创建overlay网络的目的是:用来保证在不同主机上的容器网络互通的网络模式

编写swarm的stack文件

在manager节点任意位置创建一个eureka.yml 内容如下:

version: '3'
services:
  eureka1:
    image: 192.168.1.119/demo/eureka:latest
    networks:
     spring-cloud-overlay:
        aliases:
          - eureka
    ports:
      - "8761:8082"
    environment:
      - eureka.instance.hostname=eureka1 #指定当前启动服务的hostname
      - spring.cloud.inetutils.preferred-networks=192.168.1
      - EUREKA_SERVICE_LIST=http://eureka2:8082/eureka,http://eureka3:8082/eureka
  eureka2:
    image: 192.168.1.119/demo/eureka:latest
    networks:
      spring-cloud-overlay:
        aliases:
          - eureka
    ports:
      - "8762:8082"
    environment:
      - eureka.instance.hostname=eureka2 #指定当前启动服务的hostname
      - spring.cloud.inetutils.preferred-networks=192.168.1
      - EUREKA_SERVICE_LIST=http://eureka1:8082/eureka,http://eureka3:8082/eureka 
  eureka3:
    image: 192.168.1.119/demo/eureka:latest
    networks:
      spring-cloud-overlay:
        aliases:
          - eureka
    ports:
      - "8763:8082"
    environment:
      - eureka.instance.hostname=eureka3 #指定当前启动服务的hostname
      - spring.cloud.inetutils.preferred-networks=192.168.1
      - EUREKA_SERVICE_LIST=http://eureka1:8082/eureka,http://eureka2:8082/eureka
networks:
  spring-cloud-overlay:
    external:
      name: spring-cloud-overlay

保存eureka.yml后执行:docker stack deploy -c eureka.yml eureka(随意取名)

查看服务

 查看eureka_eureka2服务落在那个服务器上:docker service ps eureka_eureka2

登录浏览器,任一打开一个eureka查看

通过docker service ps XXXX查看各服务都落在不同的节点上,验证各节点是否可以相互通信:

上图eureka_eureka2落在112、eureka1落在110、eureka3落在111

查看110上运行的容器:docker ps

登录容器:docker exec -it 052a44f42f2e /bin/bash

都可以ping通其他服务的服务 说明跨主机通讯成功!

ps:如果拉取镜像失败,可以在拉取失败的节点上登录harbor镜像库,如果返回404或80 connect refused 请登录harbor服务器查看harbor是否正常运行

如果非上述状态 在harbor目录下执行:docker-compose restart 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值