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. python去噪算法

    <programming computer vision with python >中denoise 算法有误,从网上好了可用的代码贴上,以便以后使用. 书中错误的代码: def deno ...

  2. 配置mysql 及 设置密码

    https://jingyan.baidu.com/article/8cdccae946133f315513cd6a.html

  3. 使用带ParserContext参数的Xaml.Load方法

    原文:使用带ParserContext参数的Xaml.Load方法 如果一段XAML中存在一个标记需要从外部命名空间中解析, 就需要用到ParserContext类,  具体用法如下: Normal ...

  4. 三:Java之Applet

    首先我要说的是Applet是一种应用程序,它是一种由JAVA编写的小应用程序,通常这样的应用程序都像他的名字一样,是一个非常小的程序,或许有些朋友就会问了,那么它是用来干什么的呢?JAVA程序就是JA ...

  5. 【HLSL学习笔记】WPF Shader Effect Library算法解读之[BandedSwirl]

    原文:[HLSL学习笔记]WPF Shader Effect Library算法解读之[BandedSwirl] 因工作原因,需要在Silverlight中使用Pixel Shader技术,这对于我来 ...

  6. 分析MySQL各项指标

    MySQL各项指标(因为这不是大多数搜索引擎的区别故意) INDEX(总指数):主要指标,不管是什么限制 ALTER TABLE `table_name` ADD INDEX index_name ( ...

  7. hdu 4374 单调队列

    求一个最大k连续的子序列和   单调队列 #include<stdio.h> #include<string.h> #include<iostream> using ...

  8. Android在putString和getString使用方法

    函数: putString(String key,String value); 功能:将键为key的值为value. 详细的容器详细考虑比如对于Editor 的对象来讲: 代码例如以下: 首先新建一个 ...

  9. centos6.5安装apache2.x并更改默认80port

    因为现在nginx它已成为反向代理软件的主流.因此,linuxserver在系统.我们几乎总是安装nginx东方的,这使在同一时间使用apache带来了麻烦.因为apache它用于通过缺省80port ...

  10. WPF Binding的代码实现

    using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threa ...