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 ...
随机推荐
- mybatis 学习记录1
起因 以前刚学习java三大框架的时候持久层框架我是自学的是hibernate..感觉蛮好用的,so easy..后来大三实习公司用的是jpa(hibernate外包装一层)...再后来工作1年多用的 ...
- Mybatis 针对ORACLE和MYSQL的批量插入与多参数批量删除
今天利用Mybatis的<for each>标签做oracle的批量插入数据时,发现和MySQL数据库有区别.在此记录下,以防之后再踩坑. 一.批量插入: 1.controller: /* ...
- Python的常见异常处理
一.异常处理 1.异常的概念 异常是错误发生的信号,一旦程序出错,并且程序没有处理这个错误,那个就会抛出异常,并且程序的运行随即终止. 2.错误种类 分两种,第一种是:语法错误,这种错误,根本过不了p ...
- 关于setTimeout()你所不知道的地方
前言:看了这篇文章,1.注意setTimeout引用的是全部变量还是局部变量了,当直接调用外部函数方法时,实际上函数内部的变量已经变成全 局.2.提醒我防止出错的,用匿名函数不容易出错.3.setTi ...
- 数组和集合(三):Set集合的使用总结
一.概述 · 继承collection接口 · 无序(不记录添加顺序).不允许元素重复.只允许存在一个null元素 二.实现类 1. HashSet · 底层其实是包装了一个HashMap实现的 · ...
- java 蓝桥杯算法提高 _2最大最小公倍数
解题思路: 1. n是奇数,那就最大的三个数相乘2. n是偶数,得分两种情况了, ①如果n不是3的倍数,那就s=n*(n-1)*(n-3)---n与n-2同为偶数,故排除一个n-2: ②n是3的倍数, ...
- 关于Redis的常识
原文出自:http://blog.jobbole.com/44476/ 版本:V3.0.2 2013-7-13 (江南白衣版权所有,转载请保留出处) 1. Overview 1.1 资料 <Th ...
- 2PC之JTA原理与实现
转自:https://www.ibm.com/developerworks/cn/java/j-lo-jta/index.html 利用 JTA 处理事务 什么是事务处理 事务是计算机应用中不可或缺的 ...
- XSS的原理分析与解剖(第二篇)[转]
0×01 前言: 上节(http://www.freebuf.com/articles/web/40520.html)已经说明了xss的原理及不同环境的构造方法.本期来说说XSS的分类及挖掘方法. 当 ...
- 王子和公主 UVa10635
[题目描述]:王子和公主 一个王子和公主在n*n的格子中行走,这些格子是有1....n^2的编号的.现在给定p+1个数,再给定q+1个数,公主和王子可以选择其中某些格子行走,求他们最多能走几个相同的格 ...