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 ...
随机推荐
- 用python3判断一个字符串 包含 中文
在python中一个汉字算一个字符,一个英文字母算一个字符 用 ord() 函数判断单个字符的unicode编码是否大于255即可. s = '我xx们的88工作和生rr活168' n = 0 for ...
- Maven中dependencyManagement使用
在Maven中dependencyManagement的作用其实相当于一个对所依赖jar包进行版本管理的管理器. 在dependencyManagement下申明的dependencies,Maven ...
- Windows Server 2003 简体中文企业版
Windows Server 2003 简体中文企业版,真正免激活. CD-KEY:JB88F-WT2Q3-DPXTT-Y8GHG-7YYQY 安装序列号:JCGMJ-TC669-KCBG7-HB8X ...
- nginx root与alias区别
引用于文章https://blog.csdn.net/line_aijava/article/details/71473793 root: Sets the root directory for re ...
- Elasticsearch-2.4.3的3节点安装(多种方式图文详解)(含 head、kopf、marvel、shield和watcher插件安装和使用)
前提: Elasticsearch-2.4.3的下载(图文详解) Elasticsearch-2.4.3的单节点安装(多种方式图文详解) 我这里,以192.168.80.10(HadoopMaster ...
- GitHub个人使用入门
今天突然想起来了github 于是开始了入门之旅 如果你用过svn 那么你用起来感觉入门比较快的(至少我是这么感觉的)和在svn服务器上建项目的流程很像 每次修改代码之后提交的过程是: add, co ...
- Django中的DRF框架视图集使用
1. 两个基类 1)APIView Django REST_framework 中所有视图的基类是APIView 父类是View 支持定义的属性: authentication_classes 列 ...
- Stencil
[Stencil] The stencil buffer can be used as a general purpose per pixel mask for saving or discardin ...
- Java 面试知识点汇总
OOP:(Object Oriented Programming )面向对象编程 重用性.灵活性和扩展性 高内聚.低耦合 面向过程编程与面向对象编程的区别:举例,自己做饭吃与去饭馆吃,去饭馆只需要知道 ...
- ssdb的高可用,源码分析
ssdb,一个高性能的支持丰富数据结构的 NoSQL 数据库, 用于替代 Redis.——这是其官网的自我介绍. ssdb在leveldb存储库的基础上进行改造和丰富,添加了类似redis操作的接口, ...