CentOS下Docker与.netcore(五)之 三剑客之一Docker-swarm集群
CentOS下Docker与.netcore(一) 之 安装
CentOS下Docker与.netcore(二) 之 Dockerfile
CentOS下Docker与.netcore(三)之 三剑客之一Docker-Compose
CentOS下Docker与.netcore(四)之 三剑客之一Docker-machine+jenkins简单自动化部署
CentOS下Docker与.netcore(五)之 三剑客之一Docker-swarm集群
1.什么是docker-swarm
在公司网站流量爆发式增长的时候,一台服务器往往不能满足需求,之前我的解决办法是通过nginx来实现负载均衡,有了docker-machine之后,解决方案会更加简单。当流量增加时,我们按照需要往docker-swarm集群中添加主机就可以了。
2.原理
我们把一组docker-swarm集群中的所有docker容器统称作一个service,其中的每一个docker容器称做一个task,如下图
3.开始搭建环境
上一章我们讲了docker-machine,在这里我们需要用到。我在我本地Hyper-v创建4个虚拟机
其中:
CentOS设置静态IP: 192.168.8.200,并在这个虚机上搭建好docker-machine
CentOS2设置静态IP:192.168.8.201
CentOS3设置静态IP:192.168.8.202
CentOS3设置静态IP:192.168.8.203
然后通过200节点,分别在201,202,203上搭建好docker
4.创建集群(swarm命令)
1)docker-mashine ssh 到host1上创建leader
[root@localhost ~]# docker-machine ssh host1
[root@host1 ~]# docker swarm init --advertise-addr 192.168.8.201
2)docker-mashine ssh 到host2加入集群
[root@localhost ~]# docker-machine ssh host2
3)docker-mashine ssh 到host1上查看集群列表
到此,集群构建完毕,是一个最简单的集群
5.新建.netcore项目
1)修改ValueController.cs
// GET api/values
[HttpGet]
public ActionResult<IEnumerable<string>> Get()
{
var ip = HttpContext.Connection.LocalIpAddress;
var port = HttpContext.Connection.LocalPort;
return new string[] { ip.ToString(), port.ToString() };
}
2)修改Program.cs
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args).UseUrls("http://*:5000")
.UseStartup<Startup>();
3)新建dockerfile,并经属性设置为:始终复制到输出目录
FROM microsoft/dotnet:2.1-aspnetcore-runtime
MAINTAINER yishi.chen
LABEL description="DockerSwarmTest"
LABEL version="1.0"
WORKDIR /app
COPY . .
EXPOSE 5000
ENTRYPOINT ["dotnet","DockerSwarmTest.dll"]
4)构建image并上传到docker-hub
5)创建service
我们先只创建一个容器
测试接口
6)添加一个容器
[root@host1 ~]# docker service update --replicas 2 cys_web
查看运行状态
两个都已经启动
6.模拟并发请求接口
新建一个控制台程序
using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks; namespace Client
{
class Program
{
static HttpClient httpClient = new HttpClient();
static void Main(string[] args)
{
Parallel.For(1, 10000, i =>
{
HttpResponseMessage response = httpClient.SendAsync(new HttpRequestMessage
{
Method = new HttpMethod("GET"),
RequestUri = new Uri("http://192.168.8.202:5000/api/values")
}).Result;
var result = response.Content.ReadAsStringAsync().Result;
Console.WriteLine(result);
});
}
}
}
运行测试,结果如下:
我们发现,请求http://192.168.8.202:5000/api/values时,是对service中的两个容器实现轮询调用的,因此,docker swarm很简单的实现了负载,我们可以再把host3加进集群里,再测试一下有三个容器的情况的结果。
[root@host1 ~]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
b6qt1dnbj4hnf2jks0rnxjm8y * host1 Ready Active Leader 18.09.0
p9vfq9qt6dtv929an5hzmirn9 host2 Ready Active 18.09.0
uy37l58v2ooux2tju89ex1o7q host3 Ready Active 18.09.0
运行控制台测试
三台机器完成负载!!
至此三剑客分享完毕
CentOS下Docker与.netcore(五)之 三剑客之一Docker-swarm集群的更多相关文章
- 8天入门docker系列 —— 第八天 让程序跑在swarm集群上
真正的落地部署都是希望程序跑在集群下,而不是单机版下测测玩玩,所以这篇就来聊一下怎么使用docker swarm进行部署,因为是swarm是docker自带的, 所以部署起来还是非常简单的. 一:前置 ...
- 通过docker-machine和etcd部署docker swarm集群
本片文章介绍一下 使用docker-machine 搭建docker swarm 集群:docker swarm是docker 官方搭建的容器集群编排工具:容器编排,就是可以使你像使用一太机器一样来使 ...
- centos7下安装docker(21docker swarm集群创建)
创建swarm集群: 实验环境:盗图 swarm-manager是manager node,swarm-worker1和swarm-worker2是worker node. 所有节点的docker版本 ...
- docker学习------centos7.5下的swarm集群可视化构建
1.swarm集群 manager : 192.168.211.175 agent1 : 192.168.211.176 agent2 : 192.168.211.177 2.环境 ...
- docker swarm 集群及可视化界面的安装及配置
docker swarm 集群及可视化界面的安装及配置 2016-12-14 16:08:46 标签:swarm consul registrator 原创作品,允许转载,转载时请务必以超链接形式标明 ...
- docker swarm集群搭建及使用Portainer、shipyard
一.规划 1.swarm01作为manager节点,swarm02和swarm03作为worker节点. # cat /etc/hosts 127.0.0.1 localhost 192.168. ...
- Centos7的安装、Docker1.12.3的安装,以及Docker Swarm集群的简单实例
目录 [TOC] 1.环境准备 本文中的案例会有四台机器,他们的Host和IP地址如下 c1 -> 10.0.0.31 c2 -> 10.0.0.32 c3 -> 10.0.0. ...
- docker swarm集群搭建以及使用滚动更新
基础环境,三台虚拟机 172.17.3.70 172.17.3.71 172.17.3.72 系统配置:centos 7,关闭selinux 需要优化的基础配置: [root@sw1 ~]# vim ...
- Docker swarm集群搭建教程
一.什么是Swarm Swarm这个项目名称特别贴切.在Wiki的解释中,Swarm behavior是指动物的群集行为.比如我们常见的蜂群,鱼群,秋天往南飞的雁群都可以称作Swarm behavio ...
随机推荐
- Set8087CW
Set8087CWThis example accesses the Floating Point Unit (FPU) control register. Try turning floating ...
- 【读书笔记】 DevOps实践 - 驭DevOps之力强化技术栈并优化IT运行
读书小结 DevOps实践 - 驭DevOps之力强化技术栈并优化IT运行 这本书共200页,读完大概三天:(我指的不是fulltime的一天,而是工作时间以外的一天) 本书是参加16年QConf开发 ...
- Jquery.Ajax的使用方法
1.Get $('.manager_republish.notVIP').click(function () { $.ajax({ async: false, type: "get" ...
- golang的array/slice
相同点 由相同类型的元素组合构成 元素有序排列,0为第一个元素下标 基本使用方法相同 区别 array声明时需要指定容量大小,而且无法修改 slice可通过append增加元素,当容量不够时,会自动扩 ...
- 关于js闭包的一些浅层面的理解
function a() { var i = 0; function b() { alert(++i); } return b; } var c = a(); c(); 1.js分全局作用域和函数作用 ...
- java-tip-Collections.synchronized系列生成的容器
这个系列的容器,和Vector或者HashTable之流的差不多, 区别是: Vector和HashTable是在关键方法上加synchronized关键字 而 Collections.synchro ...
- 第一个Django应用程序_part3
一.概述 此文延续第一个Django应用程序part2. 官方文档:https://docs.djangoproject.com/en/1.11/intro/tutorial03/ view是Djan ...
- 2.spark-streaming实战
park Streaming--实战篇 摘要: Sprak Streaming属于Saprk API的扩展,支持实时数据流(live data streams)的可扩展,高吞吐(hight- ...
- 转:开启命令行下的社交-webqq脚本
最近一直在命令行下工作,除了 Google Chrome,几乎很少接触 GUI 相关的软件.前段时间把手机上的 QQ 给卸载了,希望可以把时间凝聚在更加有价值的位置,今天突然又想起了这个软件,突发奇想 ...
- dubbo获取错误ip
JAVA_OPTIONS="-Ddubbo.protocol.host=192.168.1.111