docker swarm 搭建及跨主机网络互连案例分析
准备工作
安装docker,不建议直接使用Docker官方的yum install docker
wget http://yum.dockerproject.org/repo/main/centos/7/Packages/docker-engine-selinux-1.12.6-1.el7.centos.noarch.rpm
wget http://yum.dockerproject.org/repo/main/centos/7/Packages/docker-engine-1.12.6-1.el7.centos.x86_64.rpm
wget http://yum.dockerproject.org/repo/main/centos/7/Packages/docker-engine-debuginfo-1.12.6-1.el7.centos.x86_64.rpm
yum localinstall -y docker-engine-selinux-1.12.-.el7.centos.noarch.rpm docker-engine-1.12.-.el7.centos.x86_64.rpm docker-engine-debuginfo-1.12.-.el7.centos.x86_64.rpm
http://download.csdn.net/detail/yiyu1/9875469
一、开放相关端口
firewall-cmd --zone=public --add-port=/tcp --permanent
firewall-cmd --zone=public --add-port=/tcp --permanent
firewall-cmd --zone=public --add-port=/udp --permanent
firewall-cmd --zone=public --add-port=/tcp --permanent
firewall-cmd --zone=public --add-port=/udp --permanent
firewall-cmd --reload
二、修改配置 版本不同,可以忽略
vi /etc/docker/daemon.json
"live-restore": false
有关集群的docker命令如下:
- docker swarm:集群管理,子命令有init, join,join-token, leave, update
- docker node:节点管理,子命令有demote, inspect,ls, promote, rm, ps, update
- docker service:服务管理,子命令有create, inspect, ps, ls ,rm , scale, update
- docker stack/deploy:试验特性,用于多应用部署
创建swarm 集群
查看docker swarm 命令说明
# docker swarm -h
Flag shorthand -h has been deprecated, please use --help
Usage: docker swarm COMMAND
Manage Docker Swarm
Options:
--help Print usage
Commands:
init Initialize a swarm
join Join a swarm as a node and/or manager
join-token Manage join tokens
update Update the swarm
leave Leave a swarm
Run 'docker swarm COMMAND --help' for more information on a command.
创建集群
#命令格式: docker swarm init --listen-addr <MANAGER-IP>:<PORT>
[root@centos-web ~]# docker swarm init --listen-addr 172.18.30.29:
Swarm initialized: current node (a60d5c3ttymvtozr46uvk17q4) is now a manager.
docker swarm init --advertise-addr 122.62.24.161 --listen-addr 122.62.24.161:2377
查看集群
# docker node ls
ID HOSTNAME MEMBERSHIP STATUS AVAILABILITY MANAGER STATUS
a60d5c3ttymvtozr46uvk17q4 * centos-web Accepted Ready Active Leader
获取加入集群命令token
#docker swarm join-token manager
docker swarm join \
--token ********* \
172.18.30.29:
子节点加入集群
docker swarm join \
--token ********* \
172.18.30.29:
删除集群子节点
docker node demote ***
docker swarm leave --force(节点上)
docker node rm --force(manager上)
创建一个overlay 跨主机网络
查看当前网络
[root@H-T- ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
47d05fd82e77 bridge bridge local
76e0302f7929 docker_gwbridge bridge local
81c22e7f1b48 host host local
4enpk54t9oy2 ingress overlay swarm
c80502ba134b none null local
创建一个新的overlay网络
#swarm上默认已有一个名为ingress的overlay 网络
[root@centos-node4 ~]# docker network create --driver overlay docker-net
2o223p435s5glx69dw211u5d2
[root@centos-web ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
abec77415f48 bridge bridge local
aoqs3p835s5g docker-net overlay swarm
e2fff9d572a6 docker_gwbridge bridge local
166bd71f7d0e host host local
9gr6bfff1rv9 ingress overlay swarm
1d2bfc590294 none null local
docker-net就是新创建的网络
在新的跨主机overlay 网络(docker-net)上创建应用
部署应用
docker service create --constraint=node.HOSTNAME==H-C-42 --replicas --publish : --name lvs --network=docker-net inits/lvs
指定一个节点部署应用
# docker node ls
ID HOSTNAME MEMBERSHIP STATUS AVAILABILITY MANAGER STATUS
a60d5c3ttymvtozr46uvk17q4 * centos-web Accepted Ready Active Leader
#docker service create --constraint=node.HOSTNAME==centos-web --replicas 1 --publish 28152:22 --publish 8152:8080 --name web --network=docker-net inits/source2.0.3
ce2qc5paxmfa2gxrtu320v5m6
–replicas 副本数量
–publish 服务发现,端口映射
–mount 挂载文件
--mount type=bind,src=/home,dst=/home,readonly
–name service名称
#前提节点服务器上images上有inits/lvs镜像
部署结果
docker service ls
ID NAME REPLICAS IMAGE COMMAND
5lgdq3ihiez0 lvs / inits/lvs
[root@centos-node4 ~]# docker service tasks helloworld
ID NAME SERVICE IMAGE LAST STATE DESIRED STATE NODE
eul3bus45qz3b555wekotdmo5 lvs. helloworld alpine Running seconds Running centos-node5
55uhq6xxcv53xlkqv2f0be9b9 lvs. helloworld alpine Running seconds Running centos-node4
分别在运行两个节点上查看容器运行情况
#ssh 172.18.30.29
[root@H-T- ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
389f9eefe455 inits/lvs:latest "/usr/sbin/sshd -D" minutes ago Up minutes /tcp lvs..aco0uuf1of90tl31skh6a6ndv
#ssh 172.18.30.12
[root@H-C- ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
af573b0ae945 inits/lvs:latest "/usr/sbin/sshd -D" minutes ago Up minutes /tcp lvs..0a1s4la7prc3qmfdfdqazitsn
其他
docker service ls 查看集群列表
docker service ps lvs 查看集群下所有节点状态
docker service rm lvs 删除集群
docker service inspect --pretty lvs 集群属性
docker service scale lvs=4 #扩容集群节点数量
测试两个主机的网络是否能互通
# docker exec -ti lvs..0a1s4la7prc3qmfdfdqazitsn sh
/ # ping lvs..aco0uuf1of90tl31skh6a6ndv
PING lvs..aco0uuf1of90tl31skh6a6ndv (10.0.9.3): data bytes
bytes from 10.0.9.3: seq= ttl= time=0.514 ms
bytes from 10.0.9.3: seq= ttl= time=0.508 ms
bytes from 10.0.9.3: seq= ttl= time=0.381 ms
bytes from 10.0.9.3: seq= ttl= time=0.408 ms
^C
--- lvs..aco0uuf1of90tl31skh6a6ndv ping statistics ---
packets transmitted, packets received, % packet loss
round-trip min/avg/max = 0.381/0.452/0.514 ms
同理去另一台主机测试网络是否正常
或已暴露22端口,直接
ssh 172.18.30.29 -p
ifconfig
172.18..29内部ip
ping 172.18..12内部ip
ssh 172.18.30.12 -p
ifconfig
172.18..12内部ip
ping 172.18..29内部ip
dokcer swarm自带的负载均衡
创建一组服务
docker service create --replicas --name nginx -p :80 --network=docker-net inits/nginx
测试服务
浏览器访问:
http://172.18.30.29
刷新浏览器
系统将轮询访问集群节点下服务
docker swarm 搭建及跨主机网络互连案例分析的更多相关文章
- docker swarm 搭建与服务更新
一,docker swarm 是什么 Docker Swarm.Docker Machine与Docker Compose号称Docker三剑客Docker Swarm 和 Docker Compos ...
- Docker:使用Ambassador进行跨主机间容器通信
转载请注明出处:点我 由于Docker自身的网络的原因,想要在多主机间的容器之间进行通信是比较麻烦的事情.可以利用Ambassador容器来实现这一功能. 基本原理: 利用Ambassador来实现主 ...
- docker~swarm搭建docker高可用集群
回到目录 Swarm概念 Swarm是Docker公司推出的用来管理docker集群,它将一群Docker宿主机变成一个单一的,虚拟的主机.Swarm使用标准的Docker API接口作为其前端访问入 ...
- docker swarm搭建tidb踩坑日记
背景 公司新项目数据量翻了一倍,每天上亿数据量的读写,传统的单库单表已经满足不了目前的需求,得考虑下分布式存储了.那用啥呢,之前有考虑用到mycat,但是一进官网,一股山寨气息扑面而来,技术群进群还收 ...
- Docker 网络管理及容器跨主机通信
1.网络模式 docker支持四种网络模式,使用--net选项指定: host,--net=host,如果指定此模式,容器将不会获得一个独立的network namespace,而是和宿主机共用一个. ...
- Docker 跨主机网络方案分析
PS:文章首发公众号,欢迎大家关注我的公众号:aCloudDeveloper,专注技术分享,努力打造干货分享平台,二维码在文末可以扫,谢谢大家. 上篇文章介绍了容器网络的单主机网络,本文将进一步介绍多 ...
- Docker Swarm搭建多服务器下Docker集群
对于有多台服务器来讲,如果每一台都去手动操控,那将会是一件非常浪费时间的事情,毕竟时间这东西,于我们而言,十分宝贵,或许在开始搭建环境的时候耗费点时间,感觉是正常的,我也如此,花费大堆时间在采坑和填坑 ...
- centos7下安装docker(15.6docker跨主机网络---Weave)
Weave是weaveworks开发的容器网络解决方案.weave创建的虚拟网络可以将部署在多个主机上的容器连接起来.对于容器来说,weave就像一个巨大的网络交换机,容器可以直接通信,无需NAT和端 ...
- centos7下安装docker(15.4跨主机网络-flannel)
flannel是CoreOS开发的容器网络解决方案,flannel为每一个host分配一个subnet,容器从这些subnet中分配IP,这些IP可以在host之间路由,容器无需NAT和port ma ...
随机推荐
- WeexSDK之注册Components
先来看一下注册Components的源码: + (void)_registerDefaultComponents { [self registerComponent:@"container& ...
- 浅谈ESB中的DataRow、DataSet、DataBag 、DataBox
1 背景概述 笔者在学习公司产品AEAI ESB 的时候经常需要从数据库获取信息并将数据信息保存到一个结果变量中,为统计分析提供特定格式的数据以及跨数据库同步数据时通常会用到DataRow.DataS ...
- 错误:无效参数:could not find capabilities for arch=aarch64
现象:错误:无效参数:could not find capabilities for arch=aarch64 解决: qemu源码编译:(需要指定--cpu=aarch64) ./configure ...
- this练习题
1 function fn2(){ console.log(this.n) var n='n' this.n=10 console.log(n) } var obj={fn2:fn2, n:1} fn ...
- linux安全加固浅谈
难易程度:★★★阅读点:linux;python;web安全;文章作者:xiaoye文章来源:i春秋关键字:网络渗透技术 前言linux被越来越多的企业使用,因此掌握一些基本的linux安全加固是有必 ...
- python中的变量和算数运算
先说下变量的作用: 用来保存数据,为什么要保存? 后面要使用. 变量的概念: 变量就是用来存储一些信息,供程序以后调用或者操作修改.变量为标记数据提供了一种描述性的名字,以便我们的程序可以被程序的阅读 ...
- [SDOI2006] 二进制方程
并查集水题.维护变量的对应位的相关关系,判断不确定点(自由元)的个数即可. 代码中的p数组:p[1] 值的id, p[2~k+1]每个变量的第一位的id. #include <bits/stdc ...
- eclipse 安装插件报错问题
报错信息 An error occurred while installing the items session context was:(profile=epp.package.jee, phas ...
- dart之旅(三)- list
list, 在 js 中被称为数组, 但是和 js 中的数组还是有不少不同的地方,我们来看一个例子: // 声明一个长度不可变的 list List<int> fixedLengthLis ...
- thymeleaf 的使用
thymeleaf 语法详解1.变量输出: th:text :在页面中输出某个值 th:value :将一个值放到input标签中的value中.2.判断字符串是否为空 ①:调用内置对象一定要用# ② ...