博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
010 docker搭建swarm集群
阅读量:6882 次
发布时间:2019-06-27

本文共 2135 字,大约阅读时间需要 7 分钟。

hot3.png

1.前言

    刚开始找资料搭建时,发现网上有两种搭建方式:

    第一种:docker run --rm swarm create   一代 Swarm,也被称为 Docker Swarm

    第二种:docker swarm init    二代 Swarm,这是内置的 Swarm

    本文采用第二种方式搭建swarm集群

2.搭建

    假设有三台机器:192.168.20.201   192.168.20.202   192.168.20.203,准备用 201 作为master

    2-1创建管理节点

docker swarm init --advertise-addr 192.168.20.201

    执行完会显示token,创建工作节点时需要该token,Manager和Worker节点之间通信端口是2377

005828_BsZl_2937605.png

    2-2创建子节点

    分别在 192.168.20.202  和 192.168.20.203 上执行命令,指定IP:--advertise-addr 192.168.20.202,

我用的是三台云主机,内网不通,必须用 --advertise-addr 指定当前机器IP,否则会造成后面网络不通

docker swarm join --advertise-addr 192.168.20.202 --token 上面的token 192.168.20.202:2377
docker swarm join --advertise-addr 192.168.20.203 --token 上面的token 192.168.20.203:2377

133001_0sxl_2937605.png 

    2-3查看集群信息

    该命令只能在master上执行

docker node ls

010550_cpNd_2937605.png

    2-4查看节点IP信息

docker node inspect masterdocker node inspect slave01docker node inspect slave02

    可以分别查看swarm中各主机的IP,如果跟机器IP不一样,网络会访问不通

144201_XP81_2937605.png

3.配置跨主机网络访问

    3-1配置docker启动参数

    在 /usr/lib/systemd/system/docker.service 中找到 ExecStart=/usr/bin/dockerd 并在其后添加 :

    -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock 结果如下:

135350_qH7e_2937605.png

    3-2新建overlay网络

docker network create -d overlay central

134140_PtyK_2937605.png

4.测试

    4-1从仓库拉取一个tomcat镜像

docker pull tomcatdocker tag docker.io/tomcat tomcat

    4-2启动镜像,指定网络类型

docker service create -p 8080:8080 --replicas 3 --name web --network central tomcat

140903_a4uo_2937605.png

    4-3查看相关信息

docker service ls

140935_9ZMt_2937605.png

#web为启动镜像时的名称docker service ps web

140947_UP6U_2937605.png

    4-4查看是否在同一网络中    

docker network inspect central

    central 是我们启动服务时使用的 overlay 网络,由于服务分到了三台机器上,这三台机器都加入了central网络,这样三台主机才能互通

143641_3Nud_2937605.png

    4-4访问测试   

    分别在 三台机器上 docker ps 均能看见Tomcat项目在运行,用浏览器分别访问:192.168.20.201-3:8080 都会出现tomcat首页

    4-5主机互通测试

    分别在 master 和 slave01 执行命令,查看到二者的容器IP:

# 查看容器信息,记下这里的 CONTAINER ID 和 NAMESdocker ps# 查看容器详细信息docker inspect f884d3151995

145117_6o8L_2937605.png

    进入 slave02 的容器:

docker psdocker exec -it da10f3f58af7 /bin/bash

145334_kHi3_2937605.png

    测试网络,如果能ping通,则成功,如果不成功,兄弟,那就看缘分了

# 容器IPping 10.0.0.17ping 10.0.0.18# 容器NAMESping web.2.yru4aykeld6h5kgg3nryw0m74ping web.1.7gqta8k7sf8vbsvyvcxnx8vhd

  另外,docker stop其中一台机器上的服务,服务会重新自动新建一个:

011919_TkQ6_2937605.png

012214_KKHc_2937605.png

    移除运行项目,必须在master执行:

docker service rm web

4.删除swarm

    首先在所有子节点机器执行:

# 子节点退出swarmdocker swarm leave

    然后master执行:

# 主节点移除子节点docker node rm slave01  docker node rm slave02# 主节点退出集群docker swarm leave --force

 

转载于:https://my.oschina.net/u/2937605/blog/1797575

你可能感兴趣的文章
$ is not defined错误分析及解决
查看>>
Qt之子类发送消息给父类
查看>>
redis哨兵模式
查看>>
深入源码分析-线程池的实现原理
查看>>
开箱即用(out-of-box)的Redis序列号生成器,不用再写任何代码,你值得拥有
查看>>
Java大牛呕心沥血经历——技术面试与HR谈薪资技巧
查看>>
Pycharm上Django的使用 Day12
查看>>
遇见一只黑猫,她说Python是个怪物
查看>>
spring 中Page< >遇到得小问题
查看>>
IT兄弟连 JavaWeb教程 JavaBean组件定义
查看>>
PowerDesigner 概念数据模型(CDM) 说明
查看>>
JQuery动态给table添加、删除行
查看>>
OSChina 周五乱弹 —— 如果有一天不让我写代码了
查看>>
MySpinner
查看>>
原子变量与非阻塞同步
查看>>
基础总结篇之一:Activity生命周期
查看>>
iOS开发之UITextField
查看>>
关于instanceof关键字
查看>>
8.Utm示例-Netty集成
查看>>
在libvirt中使用QCOW2多级快照导致虚拟机无法启动的原因分析及解决
查看>>