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技术的更多相关文章

  1. Docker环境下的前后端分离项目部署与运维

    本教程将从零开始部署一个前后端分离的开源项目,利用docker虚拟机的容器技术,采用分布式集群部署,将项目转换成为高性能.高负载.高可用的部署方案.包括了MySQL集群.Redis集群.负载均衡.双机 ...

  2. Docker环境下的前后端分离项目部署与运维(九)后端项目部署与负载均衡

    数据库准备 建立数据库 renren_fast ,然后运行renrenfast项目中的db文件夹内的脚本 -- 菜单 CREATE TABLE `sys_menu` ( `menu_id` bigin ...

  3. Docker环境下的前后端分离项目部署与运维(八)使用Docker部署RabbitMQ集群

    下载RabbitMQ镜像 镜像地址RabbitMQ Docker官方认证镜像地址:https://hub.docker.com/_/rabbitmq 安装命令安装之前,切记把Docker Hub设置为 ...

  4. Docker环境下的前后端分离项目部署与运维(七)Redis高速缓存

    Redis高速缓存 利用内存保存数据,读写速度远超硬盘:可以减少I/O操作,降低I/O压力. 发红包.抢红包的数据可以存在高速缓存中,加快处理速度,不需要经过数据库 淘宝首页一些优惠活动商品等热数据可 ...

  5. Docker环境下的前后端分离项目部署与运维(六)搭建MySQL集群

    单节点数据库的弊病 大型互联网程序用户群体庞大,所以架构必须要特殊设计 单节点的数据库无法满足性能上的要求 单节点的数据库没有冗余设计,无法满足高可用 单节点MySQL的性能瓶领颈 2016年春节微信 ...

  6. Docker环境下的前后端分离项目部署与运维(十二)使用Portainer管理Docker

    安装 docker hub地址:https://hub.docker.com/r/portainer/portainer/ # 每台服务器都要安装 docker pull portainer/port ...

  7. 【Docker】1、 前后端分离项目 下载启动运行

    人人开源前后端分离项目下载与配置 文章目录 人人开源前后端分离项目下载与配置 前后端分离框架介绍 后端项目下载与配置 1.renren-fast后台项目介绍 2.开发环境搭建 3.下载后端renren ...

  8. nginx+vue+uwsgi+django的前后端分离项目部署

    Vue+Django前后端分离项目部署,nginx默认端口80,数据提交监听端口9000,反向代理(uwsgi配置)端口9999 1.下载项目文件(统一在/opt/luffyproject目录) (1 ...

  9. 前后端分离项目部署到Linux虚拟机

    最近做了一个springboot+vue的前后端分离项目,把它部署到Linux虚拟机上.下面是我的步骤和遇到的问题,需要的朋友可以看下(看的时候注意要全部看完到底部,因为我习惯是把我遇到的问题放到最后 ...

随机推荐

  1. Application与Context关联

    在发展中Application分类,几乎每个项目将用于,它的四个组成部分的实施优化,它是一个全球性的框,这可能是这么理解,例如,我们可以application类存储一些变量,在其他类访问,例如,在A类 ...

  2. Matlab Tricks(十五) —— 圆的正确画法

    使用参数方程, phi = 0:0.01:2*pi; x = cos(phi); y = sin(phi); axis equal plot(x, y) 根据参数方程,显然,圆心在 (0, 0),半径 ...

  3. Python Tricks(二十二)—— small tricks

    多次 import import numpy as np, matplotlib.pyplot as plt ndarray 的强制类型转换 v = v.astype(np.int) python 的 ...

  4. matlab Tricks(二十七)—— 可变输入参数输出参数的适配

    matlab 内置的对 varargin/varargout(nargin/nargout)的支持,使得 matlab 的输入参数和输出参数,有了更为灵活的传递和使用: 比如对于 matlab 原生支 ...

  5. SpringBoot、Groovy

    Java——搭建自己的RESTful API服务器(SpringBoot.Groovy)   这又是一篇JavaWeb相关的博客,内容涉及: SpringBoot:微框架,提供快速构建服务的功能 Sp ...

  6. Matlab随笔之画图函数总结

    原文:Matlab随笔之画图函数总结 MATLAB函数画图 MATLAB不但擅长於矩阵相关的数值运算,也适合用在各种科学目视表示(Scientific visualization).本节将介绍MATL ...

  7. React学习(1)——constructor

    constructor(props) { super(props); this.state = { orderNo: "001", wid: 6 }; } constructor: ...

  8. cocos2D-X从的源代码的分析cocos2D-X学习OpenGL(1)----cocos2D-X渲染架构

     个人原创.欢迎转载,转载请注明原文地址http://blog.csdn.net/bill_man 从本篇文章開始,将分析cocos2D-X 3.0源码,第一部分是从cocos2D-X学习OpenGL ...

  9. [bug系列]Method not found: 'Void Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommandBuilderFactory

    bug由来 最近开始学习NetCore,想通过实战使用NetCore做一个集成数据库存储Redis缓存的WebApi项目,由于MSSQL的庞大体积,最终决定使用轻量级关系型数据库MySql. 所以最终 ...

  10. [转]更改ejs模板后缀.ejs为.html

    三种写法 1,express老写法,3.*已经不支持 app.register('.html', require('ejs')); app.set('view engine', 'ejs'); 2, ...