文档章节

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

wwlleo123
 wwlleo123
发布于 2017/02/16 19:35
字数 421
阅读 135
收藏 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
Nacos发布 v0.2 版本,无缝支持 Spring Cloud 微服务生态及高可用集群模式

近日,阿里巴巴新开源项目Nacos 发布了 v0.2 版本,该版本开始支持完整的Spring生态技术栈,这包括 Spring Framework、Spring Boot和Spring Cloud。 为了让更多的Spring用户可以在生产上基于...

中间件小哥
09/28
0
0
基于docker部署的微服务架构(二): 服务提供者和调用者

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

月冷X心寒
2016/11/17
455
0

没有更多内容

加载失败,请刷新页面

加载更多

小白带你认识netty(三)之NioEventLoop的线程(或者reactor线程)启动(一)

在第一章中,我们看关于NioEventLoopGroup的初始化,我们知道了NioEventLoopGroup对象中有一组EventLoop数组,并且数组中的每个EventLoop对象都对应一个线程FastThreadLocalThread,那么这个...

天空小小
今天
3
0
PHP动态扩展Redis模块

查看已有模块 [root@test-a ~]# /usr/local/php/bin/php -m[PHP Modules]bz2Core...zlib[Zend Modules] 下载包,解压,生成configure文件 [root@test-a ~]# cd /usr/local/src/[ro......

野雪球
今天
4
0
在Ignite中使用线性回归算法

在本系列前面的文章中,简单介绍了一下Ignite的机器学习网格,下面会趁热打铁,结合一些示例,深入介绍Ignite支持的一些机器学习算法。 如果要找合适的数据集,会发现可用的有很多,但是对于...

李玉珏
今天
5
0
Mybatis应用学习——简单使用示例

1. 传统JDBC程序中存在的问题 1. 一个简单的JDBC程序示例: public class JDBCDemo {public static void main(String[] args) {Connection con=null;PreparedStatement statemen...

江左煤郎
今天
5
0
使用JavaScript编写iOS应用业务逻辑

JSAUIKitCocoa使你可以使用JavaScript编写对性能要求不高但可能变动性很大的iOS应用的业务逻辑部分,View组件、需要多线程支持的Model等则直接使用原生对象。 编写方式与React Native相似,但...

neal01
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部