文档章节

spring cloud & docker 多宿主机,多节点扩展部署

wwlleo123
 wwlleo123
发布于 2017/02/16 19:35
字数 421
阅读 121
收藏 0

业务场景描述:

     微服务情况下,需要随时可以启动任意多个docker实例来进行分布式负载。(比如抢红包,活动秒杀等)

需要解决的问题如下:

  1. 多宿主机情况,即docker实例可以在多台机器上任意部署。
  2. 使用spring cloud作为微服务方案。(如果不用spring cloud的话,直接使用docker swarm已经基本能满足要求)

遇到的问题:

  1. docker直接注册IP为容器IP,跨宿主机时无法访问,或需要使用第三方来link,很烦。
  2. 如果使用hostname来注册,则需要维护hostname表,更烦。

 

之前由于大部分业务直接跑docker swarm解决了,也没有深究下去,今年准备弄一个简单的基于spring boot的监控玩玩,结果发现去年的技术债还是要解决,跨宿主机docker无法注册。

 

其实解决的方法很简单,就是把需要动态的值都当参数传递给spring boot 和 docker

docker run -d --name auxplat-helloworld --expose=6999 -p 6999:6999 -e "EUREKA_INSTANCE_IP-ADDRESS=100.100.20.214" -e "SERVER_PORT=6999" aux/auxplat-helloworld

docker run -d --name auxplat-helloworld-1 --expose=6998 -p 6998:6998 -e "EUREKA_INSTANCE_IP-ADDRESS=100.100.20.214" -e "SERVER_PORT=6998" aux/auxplat-helloworld

docker run -d --name auxplat-helloworld --expose=6999 -p 6999:6999 -e "EUREKA_INSTANCE_IP-ADDRESS=100.100.20.212" -e "SERVER_PORT=6999" aux/auxplat-helloworld

前两条在 100.100.20.214 上 跑两个 6999 和 6998 的docker实例。

第三条在 100.100.20.212 上跑个 6999的实例。

执行效果如下:

本地跑了一个测试

@RequestMapping("/registered")
	public List<String> getRegistered() {
		List<ServiceInstance> list = discoveryClient.getInstances("STORES");
		
		List<String> showList = new ArrayList<String>();

		for (String s : discoveryClient.getServices()) {
			System.out.println("services " + s);
			List<ServiceInstance> serviceInstances = discoveryClient.getInstances(s);
			for (ServiceInstance si : serviceInstances) {

				showList.add(si.getHost()+" : "+si.getPort());

			}

		}

		return showList;
	}

本例子基于spring boot 1.4.4.RELEASE,spring cloud  Camden.SR5 。

 

 

© 著作权归作者所有

共有 人打赏支持
wwlleo123
粉丝 5
博文 9
码字总数 6677
作品 0
宁波
使用 Docker 部署 Spring Boot之项目的构建

Docker通常用于如下场景: web应用的自动化打包和发布; 自动化测试和持续集成、发布; 在服务型环境中部署和调整数据库或其他的后台应用; 从头编译或者扩展现有的OpenShift或Cloud Foundry...

qq_28089993
04/21
0
0
Spring Cloud(二) Consul 服务治理实现

Spring Cloud Consul 项目是针对Consul的服务治理实现。Consul是一个分布式高可用的系统,具有分布式、高可用、高扩展性。 Consul 简介 Consul 是 HashiCorp 公司推出的开源工具,用于实现分...

lemonLove
08/11
0
0
服务发现之consul的介绍、部署和使用

什么是服务发现 微服务的框架体系中,服务发现是不能不提的一个模块。我相信了解或者熟悉微服务的童鞋应该都知道它的重要性。这里我只是简单的提一下,毕竟这不是我们的重点。我们看下面的一...

sunsky303
06/15
0
0
基于docker部署的微服务架构(二): 服务提供者和调用者

前言 前一篇 基于docker部署的微服务架构(一):服务注册中心 已经成功创建了一个服务注册中心,现在我们创建一个简单的微服务,让这个服务在服务注册中心注册。然后再创建一个调用者,调用...

月冷X心寒
2016/11/17
455
0
如何使用Spring Cloud实现高并发微服务设计

本文根据dbaplus社群第161期线上分享整理而成。 大家好,今天我们主要是分享一下我写作的《Spring Cloud与Docker高并发微服务架构设计实施》这本书的一些心得,也可以说是我近几年从事微服务...

陈韶健
09/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

如何通过 J2Cache 实现分布式 session 存储

做 Java Web 开发的人多数都会需要使用到 session (会话),我们使用 session 来保存一些需要在两个不同的请求之间共享数据。一般 Java 的 Web 容器像 Tomcat、Resin、Jetty 等等,它们会在...

红薯
今天
3
0
C++ std::thread

C++11提供了std::thread类来表示一个多线程对象。 1,首先介绍一下std::this_thread命名空间: (1)std::this_thread::get_id():返回当前线程id (2)std::this_thread::yield():用户接口...

yepanl
今天
3
0
Nignx缓存文件与动态文件自动均衡的配置

下面这段nginx的配置脚本的作用是,自动判断是否存在缓存文件,如果有优先输出缓存文件,不经过php,如果没有,则回到php去处理,同时生成缓存文件。 PHP框架是ThinkPHP,最后一个rewrite有关...

swingcoder
今天
2
0
20180920 usermod命令与用户密码管理

命令 usermod usermod 命令的选项和 useradd 差不多。 一个用户可以属于多个组,但是gid只有一个;除了gid,其他的组(groups)叫做扩展组。 usermod -u 1010 username # 更改用户idusermod ...

野雪球
今天
3
0
Java网络编程基础

1. 简单了解网络通信协议TCP/IP网络模型相关名词 应用层(HTTP,FTP,DNS等) 传输层(TCP,UDP) 网络层(IP,ICMP等) 链路层(驱动程序,接口等) 链路层:用于定义物理传输通道,通常是对...

江左煤郎
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部