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虚拟机上.下面是我的步骤和遇到的问题,需要的朋友可以看下(看的时候注意要全部看完到底部,因为我习惯是把我遇到的问题放到最后 ...
随机推荐
- delphi 中的函数指针 回调函数(传递函数指针,以及它需要的函数参数)
以下代码仅仅是测试代码:delphi XE7 UP1 interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.V ...
- hudson绑定svn和vs2008实现持续构建
作者:朱金灿 来源:http://blog.csdn.net/clever101 首先需要在服务器上安装以下工具: (1)hudson,我推荐从http://hudson-ci.org/downloa ...
- R 语言的学习(一)
1. 基本 "hello world!" > "hello world!" [1] "hello world!" 这在 R 中并不是一 ...
- c语言学习笔记(14)——算法
链表 算法: 1.通俗定义: 解题的方法和步骤 2.狭义定义: 对存储数据的操作 对不同的存储结构,要完成某一个功能所执行的操作是不一样的 比如:要输出数组中所有的元素和输出链表中所有元素的操作是不一 ...
- Mysql主从复制,读写分离(mysql-proxy)
Mysql主从复制,读写分离(mysql-proxy) 下面介绍MySQL主从复制,读写分离,双主结构完整构建过程,不涉及过多理论,只有实验和配置的过程. Mysql主从复制(转载请注明出处,博文地址 ...
- A熟知SP.NET---WebForms UnobtrusiveValidationMode 必须“jquery”ScriptResourceMapping。
我相信,有过ASP.NET人们学习经验RequiredFieldValidator控制(验证非空控制)一定不会陌生,禁止控制输入定义的内容的作用(该属性InitialValue的值.属性默认值为空字符 ...
- boost::bind应用示例
// testBind.cpp : Defines the entry point for the console application. // #include "stdafx.h&qu ...
- Arcgis for Javascript实现图
首先,截个图给大家看结果: 初始化状态 放大后的状态 点击选中后的状态 如上图所看到的,一般的涉及到的地图的统计涉及到上述所展示的三个状态:1.初始化状态.2.缩放后的状态:3.点击选中显示详情状态. ...
- HTML5 课程
http://www.w3school.com.cn/html5/html_5_geolocation.asp HTML5 教程 HTML5 教程 HTML5 简单介绍 HTML5 视频 HTML5 ...
- multi-node和generic-pool两大利器
1.multi-node node只能单进程,单cpu工作,而multi-node则可以让node在多进程下共享内存的工作,实现机制是依靠child_process的sendmsg做到的.想要了解具体 ...