Docker环境下的前后端分离项目部署与运维(十一)Docker Swarm技术
Docker Swarm技术
docker swarm技术(之前的docker集群都是在 一个虚拟主机上的,但是如果这个主机挂掉了over了,docker技术就是多个虚拟主机形成一个集群)

Swarm是Docker的一个编排工具,参考官网:https://docs.docker.com/engine/swarm/
- 与docker集成的集群管理工具
- 去中心化设计,只使用docker引擎即可创建各类节点
- 声明式服务模型。可以声明的方式来定义应用。
- 动态伸缩。管理节点自动调整服务数量。
- 高可用,对于服务期望状态做到动态调整,swarm的管理节点会持续监控集群状态,集群中有没有达到期望状态的服务,管理节点会自动调度来达到期望状态。
- 自定义网络。可以为你的服务指定一个网络,容器创建的时候分配一个IP
- 服务发现。管理节点给集群中每个服务一个特定的DNS名字,并给运行的容器提供负载均衡。
- 负载均衡。你可以暴露服务端口给外部的负载均衡。内部swarm提供可配置的容器分配到节点的策略。
- 默认的安全机制。swarm集群中各个节点强制TLS协议验证。连接加密,你可以自定义根证书。
滚动更新。增量跟新,可以自定义更新下个节点的时间间隔,如果有问题,可以会滚到上个版本。
去中心化设计

创建Swarm集群
docker swarm init
--listen-addr ip:port 管理者节点
--advertise-addr ip 广播地址
加入Swarm集群
docker swarm join-token manager
docker swarm join-token worker
示例
# 创建4个服务器虚拟机
# -- 192.168.103.210(manager)
# -- 192.168.103.240(manager)
# -- 192.168.103.212(worker)
# -- 192.168.103.213(worker) # 192.168..210进行操作
docker swarm init
# 生成加入manager语句,生成的语句在240上面执行
docker swarm join-token manager
# 生成加入worker语句,生成的语句在212、213上面执行
docker swarm join-token worker
查看Swarm集群节点
注意:只能在manager节点执行
docker node ls
[root@localhost ~]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
0l944rsrwj0sqva0pf4shshd1 * localhost Ready Active Leader 18.09.
askvrplj3p0vh3bh22oi9mr2u localhost Ready Active 18.09.
g2q35fckeubv0u87y6ol4zw5q localhost Ready Active Reachable 18.09.
wdxxxyxjvnm9kl757k57dnuwi localhost Ready Active 18.09.
查看Swarm集群网络
docker network ls

注意:这个ingress swarm网络不是用来做容器之间业务通信的,而是用来管理集群的
创建共享网络
ingress网络用于管理Swarm集群,所以我们需要创建新的共享网络
docker network create -d overlay --attachable swarm_test
创建Percona集群示例
演示4台服务器创建5节点集群
# -- 192.168.103.210(manager)
# 拉取镜像
docker pull percona/percona-xtradb-cluster:5.7.
# 镜像重命名
docker tag percona/percona-xtradb-cluster:5.7. pxc
docker rmi percona/percona-xtradb-cluster:5.7.
# 创建数据卷v1和backup
docker volume create v1
docker volume create backup
# 创建容器
# 创建5个PXC容器构成集群
# 第一个节点
docker run -d -p : -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -v v1:/var/lib/mysql -v backup:/data --privileged --name=node1 --net=swarm_test pxc
# 创建数据卷v2
docker volume create v2
# 第二个节点
docker run -d -p : -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -e CLUSTER_JOIN=node1 -v v2:/var/lib/mysql -v backup:/data --privileged --name=node2 --net=swarm_test pxc # -- 192.168.103.240(manager)
# 拉取镜像
docker pull percona/percona-xtradb-cluster:5.7.
# 镜像重命名
docker tag percona/percona-xtradb-cluster:5.7. pxc
docker rmi percona/percona-xtradb-cluster:5.7.
# 创建数据卷v3和backup
docker volume create v3
docker volume create backup
# 第三个节点
docker run -d -p : -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -e CLUSTER_JOIN=node1 -v v3:/var/lib/mysql -v backup:/data --privileged --name=node3 --net=swarm_test pxc # -- 192.168.103.212(worker)
# 拉取镜像
docker pull percona/percona-xtradb-cluster:5.7.
# 镜像重命名
docker tag percona/percona-xtradb-cluster:5.7. pxc
docker rmi percona/percona-xtradb-cluster:5.7.
# 创建数据卷v4和backup
docker volume create v4
docker volume create backup
# 第四个节点
docker run -d -p : -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -e CLUSTER_JOIN=node1 -v v4:/var/lib/mysql -v backup:/data --privileged --name=node4 --net=swarm_test pxc # -- 192.168.103.213(worker)
# 拉取镜像
docker pull percona/percona-xtradb-cluster:5.7.
# 镜像重命名
docker tag percona/percona-xtradb-cluster:5.7. pxc
docker rmi percona/percona-xtradb-cluster:5.7.
# 创建数据卷v5和backup
docker volume create v5
docker volume create backup
# 第五个节点
docker run -d -p : -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -e CLUSTER_JOIN=node1 -v v5:/var/lib/mysql -v backup:/data --privileged --name=node5 --net=swarm_test pxc
创建完成后每个节点都应该可以访问,而且会数据同步
容器集群

容器集群不适合有状态程序,例如数据库、缓存等等

退出Swarm集群
- 主动退出
docker swarm leave --force
# Manager退出集群必须要使用--force参数 被动退出
# Manager被动退出集群
# Manager节点降级为Worker节点
docker node demote <ID>
# 删除停止或离开的Worker节点
docker node rm <ID> # 删除任何的节点必须要先停止它的Docker服务
# Manager节点必须先降级成Worker节点,然后再去删除
Docker环境下的前后端分离项目部署与运维(十一)Docker Swarm技术的更多相关文章
- Docker环境下的前后端分离项目部署与运维
本教程将从零开始部署一个前后端分离的开源项目,利用docker虚拟机的容器技术,采用分布式集群部署,将项目转换成为高性能.高负载.高可用的部署方案.包括了MySQL集群.Redis集群.负载均衡.双机 ...
- Docker环境下的前后端分离项目部署与运维(九)后端项目部署与负载均衡
数据库准备 建立数据库 renren_fast ,然后运行renrenfast项目中的db文件夹内的脚本 -- 菜单 CREATE TABLE `sys_menu` ( `menu_id` bigin ...
- Docker环境下的前后端分离项目部署与运维(八)使用Docker部署RabbitMQ集群
下载RabbitMQ镜像 镜像地址RabbitMQ Docker官方认证镜像地址:https://hub.docker.com/_/rabbitmq 安装命令安装之前,切记把Docker Hub设置为 ...
- Docker环境下的前后端分离项目部署与运维(七)Redis高速缓存
Redis高速缓存 利用内存保存数据,读写速度远超硬盘:可以减少I/O操作,降低I/O压力. 发红包.抢红包的数据可以存在高速缓存中,加快处理速度,不需要经过数据库 淘宝首页一些优惠活动商品等热数据可 ...
- Docker环境下的前后端分离项目部署与运维(六)搭建MySQL集群
单节点数据库的弊病 大型互联网程序用户群体庞大,所以架构必须要特殊设计 单节点的数据库无法满足性能上的要求 单节点的数据库没有冗余设计,无法满足高可用 单节点MySQL的性能瓶领颈 2016年春节微信 ...
- Docker环境下的前后端分离项目部署与运维(十二)使用Portainer管理Docker
安装 docker hub地址:https://hub.docker.com/r/portainer/portainer/ # 每台服务器都要安装 docker pull portainer/port ...
- 【Docker】1、 前后端分离项目 下载启动运行
人人开源前后端分离项目下载与配置 文章目录 人人开源前后端分离项目下载与配置 前后端分离框架介绍 后端项目下载与配置 1.renren-fast后台项目介绍 2.开发环境搭建 3.下载后端renren ...
- nginx+vue+uwsgi+django的前后端分离项目部署
Vue+Django前后端分离项目部署,nginx默认端口80,数据提交监听端口9000,反向代理(uwsgi配置)端口9999 1.下载项目文件(统一在/opt/luffyproject目录) (1 ...
- 前后端分离项目部署到Linux虚拟机
最近做了一个springboot+vue的前后端分离项目,把它部署到Linux虚拟机上.下面是我的步骤和遇到的问题,需要的朋友可以看下(看的时候注意要全部看完到底部,因为我习惯是把我遇到的问题放到最后 ...
随机推荐
- Python经常使用内置函数介绍【filter,map,reduce,apply,zip】
Python是一门非常简洁,非常优雅的语言,其非常多内置函数结合起来使用,能够使用非常少的代码来实现非常多复杂的功能,假设相同的功能要让C/C++/Java来实现的话,可能会头大,事实上Python是 ...
- 学习vi和vim编辑(4):高速移动定位
平时.第一步是编辑文本需要做将光标移动到需要编辑.因此,根据需要,将光标移动到目标数字键来编辑文本的速度在一定程度上. 一篇文章.主要介绍怎样高速移动光标. 依据屏幕来移动: 在一个有几千行文本的文件 ...
- STL 中间< 超载
相同的代码,mingw能够执行,vs不能执行. vs报告错误: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2h1Y2h1cw==/font/5a6L5 ...
- 【Linux知识】server性能测试--UnixBench
链接地址: http://blog.csdn.net/jason_asia/article/details/38309079 1.1. server性能测试UnixBench 分别DELL R72 ...
- Xamarin 设置可接受的版本
一共分三个版本,编译版本.最小版本.目标版本(最适应) 一般编译使用最新的版本,目标版本选择最主流的 参考资料 https://docs.microsoft.com/en-us/xamarin/and ...
- WPF实现选项卡效果(3)——自定义动态添加的AvalonDock选项卡内容
原文:WPF实现选项卡效果(3)--自定义动态添加的AvalonDock选项卡内容 简介 在前面一篇文章里面,我们实现了AvalonDock选项卡的动态添加,但是对于选项卡里面的内容,我们并没有实现任 ...
- Spring Boot 专题
Spring is a very popular Java-based framework for building web and enterprise applications. Unlike m ...
- VS2012中使用CEGUI项目发布到XP平台的问题(核心方法就一句话。“你项目使用的所有外部依赖库都用/MT编译。”)
接着上一篇文章,详细说说如何把一个带CEGUI的项目发布到XP平台. 这个问题纠缠了我好几天.这里把详细解决思路记下来.有同样问题的朋友可以少走很多弯路. 核心方法就一句话.“你项目使用的所有外部依赖 ...
- 【std::regex】C++文件路径正则表达式
今天代码中遇到使用正则表达式匹配一个文件路径的问题,需要验证传入的文件路径是否合法,学习了简单的正则表达式的写法后,简单写了如下代码,在网上找了一些在线测试正则表达式的网站,测试可以通过. std:: ...
- vs2017 cordova调试android app
方案是:virtualbox + androidx86 7.0+_x64.iso虚拟机方式