CentOS下Docker與.netcore(一) 之 安裝html
CentOS下Docker與.netcore(二) 之 Dockerfilenode
CentOS下Docker與.netcore(三)之 三劍客之一Docker-Composenginx
CentOS下Docker與.netcore(四)之 三劍客之一Docker-machine+jenkins簡單自動化部署web
CentOS下Docker與.netcore(五)之 三劍客之一Docker-swarm集羣docker
在公司網站流量爆發式增加的時候,一臺服務器每每不能知足需求,以前個人解決辦法是經過nginx來實現負載均衡,有了docker-machine以後,解決方案會更加簡單。當流量增長時,咱們按照須要往docker-swarm集羣中添加主機就能夠了。api
咱們把一組docker-swarm集羣中的全部docker容器統稱做一個service,其中的每個docker容器稱作一個task,以下圖服務器
上一章咱們講了docker-machine,在這裏咱們須要用到。我在我本地Hyper-v建立4個虛擬機併發
其中:app
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
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上查看集羣列表
到此,集羣構建完畢,是一個最簡單的集羣
// 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() }; }
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args).UseUrls("http://*:5000") .UseStartup<Startup>();
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"]
咱們先只建立一個容器
測試接口
[root@host1 ~]# docker service update --replicas 2 cys_web
查看運行狀態
兩個都已經啓動
新建一個控制檯程序
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
運行控制檯測試
三臺機器完成負載!!
至此三劍客分享完畢