微服务实战之春云与刀客(四)—— docker swarm 集群实战
概述
docker swarm 是一个非常简单的docker 原生集群部署环境。在docker swarm 出来之前,要搭建一个docker 集群需要复杂的网络运维和配置能力,而docker swarm 把这一切都解放了。
简单来说呢,docker swarm把多个docker节点连接成一个集群,可以认为是一个可以互通的独立局域网,通过服务的方式管理应用的生命周期。例如有一个MyService的微服务,在单机的模式需要你分别在两个节点上启动相应的docker 容器,而docker swarm直接就有“服务”的概念,只要在某一管理节点上执行创建服务命令,同时指定节点数为2,则集群自动找两个节点分别运行你的MyService微服务。当两个节点扛不住的时候,你要增加到4个节点,则只需要执行一个扩展命令就行。
docker 安装
本文基于centos 版本7.2搭建的docker 集群,用的是17.09版本的docker。
节点有192.168.0.37和192.168.0.38 两个节点,分别为管理节点和工作节点。工作节点可以运行服务,管理节点也可以运行服务,但比工作节点多了“管理控制”的功能,即可以创建服务。为了避免脑裂现象,管理节点数量为1,3,5奇数。
分别在0.37和0.38上安装docker。
介质下载
https://download.docker.com/linux/centos/7/x86_64/stable/Packages/
wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-17.09.0.ce-1.el7.centos.x86_64.rpm
安装
yum install docker-ce-17.09.0.ce-1.el7.centos.x86_64.rpm
启动
systemctl start docker
开机启动
systemctl enable docker
或者
chkconfig docker on
hostname
vi /etc/hosts 把两个节点的host和ip加上。
搭建和使用 docker hub私有仓库
搭建docker hub私有仓库(0.37)
仓库是用来存放docker镜像的,在创建和启动服务的时候,多个节点需要从仓库中拉取镜像。
sudo docker run -d -p 5000:5000 -v /root/hub:/var/lib/registry --restart=always --name registry2 registry:2
默认情况下,会将仓库存放于容器内的/var/lib/registry目录下,这样如果容器被删除,则存放于容器中的镜像也会丢失,所以我们一般情况下会指定本地一个目录挂载。
https://github.com/docker/docker.github.io/blob/master/registry/index.md
配置拉取镜像认证(0.37/0.38)
客户端访问docker hub拉取镜像,缺省走https的,会报https://192.168.0.37:5000镜像没找到或不存在(No such image: 192.168.0.37:5000/cehome/operation-service:),解决方式一种是通过nginx 添加https代理,我们采用是另一种是非安全方式:
- 打开
- /usr/lib/systemd/system/docker.service
- 添加(ExecStart=/usr/bin/dockerd 可能已经有,只需要添加insecure参数)
ExecStart=/usr/bin/dockerd --insecure-registry 192.168.0.37:5000 - 重载
systemctl daemon-reload - 重启
service docker restart
集群环境搭建
参考:
https://docs.docker.com/engine/swarm/swarm-mode/
https://docs.docker.com/engine/reference/commandline/service/
https://docs.docker.com/engine/swarm/how-swarm-mode-works/nodes/
https://docs.docker.com/engine/swarm/how-swarm-mode-works/services/#replicated-and-global-services
关闭防火墙(0.37/0.38)
需要互相访问2377等端口(为方便,直接关闭防火墙,否则可能会有不可意料的事情)
- 查看
systemctl is-enabled firewalld
- 关闭
systemctl stop firewalld.service
- 禁用服务
systemctl disable firewalld
初始化管理节点(0.37)
docker swarm init --advertise-addr 192.168.0.37
( 多ip的情况:docker swarm init --advertise-addr ,一般要加上,否则会有网络问题)
添加其它节点前查看token(0.37)
添加其它节点到集群,必须先在管理节点执行如下命令,它会打印出在其它节点将要执行的包含token的完整脚本。
1)查看如何添加work节点
docker swarm join-token worker
2)查看如何添加manager节点
docker swarm join-token manager
添加work节点(0.38)
通过上面的命令可以查出执行的脚本,然后拷贝到0.38并执行(即来源于0.37上面执行docker swarm join-token worker的打印结果),执行后0.38就加入了集群。
docker swarm join\
--token SWMTKN-1-3jcd5cjgwy8ct1gfyqqy8oqnokz4jjaul7el97h77qii4e6zw3-1vrjlin1bl5k9whzc4fulqfh2 192.168.0.37:2377
查看节点(0.37)
必须在管理节点才能执行:
docker node ls
创建overlay网络
为什么需要overlay 网络?保证多台机器不同容器之间通信!
docker network create --attachable --driver overlay tiejia
--attachable 参数为了兼容单机的容器可以加入此网络。
tiejia是网络名称。
管理节点信息的备份与恢复
由于目前是单管理节点,最好是备份信息,主要步骤是停止docker,备份目录/var/lib/docker/swarm/
参考:https://docs.docker.com/engine/swarm/admin_guide/#back-up-the-swarm
移除节点的命令(这里只是介绍,不要执行)
当你节点不需要的时候可以从集群剥离,
docker swarm leave -f
例子:部署一个nginx 服务
在manager节点0.37上部署nginx服务,服务数量为3个,公开指定端口是8080映射容器80,使用nginx镜像。这里直接会从官网下载nginx镜像,上面部署的私有仓库还用不上。
docker service create --replicas 3 --name nginx --publish 8080:80 nginx
通过 docker service ps nginx 命令查看服务分布情况。
微服务实战之春云与刀客(四)—— docker swarm 集群实战相关推荐
- 微服务实战之春云与刀客(一)—— 微服务开篇
春云即spring cloud ,刀客即docker,这种翻译似乎比较好玩! 这里是春云与刀客不得不说的故事,不会讲太多的入门,更多的是实战和一些规范,以及通过春云和刀客如何简化微服务开发,这些在一些 ...
- 微服务实战之春云与刀客(三)—— 面向接口调用代码结构实例
2019独角兽企业重金招聘Python工程师标准>>> 概述 在上一篇中提到了spring cloud 面向接口调用的开发风格,这一篇会举一个简单的但完整的例子来说明整个代码结构. ...
- 微服务实战之春云与刀客(五)—— spring cloud与docker swarm集群
概述 原文:https://yq.aliyun.com/articles/618620 微服务与docker结合是必然的趋势,本文介绍spring cloud与docker swarm集群实现微服务极 ...
- Docker——阿里云搭建Docker Swarm集群
阿里云搭建Docker Swarm集群 Docker Swarm概念 环境部署 Swarm集群搭建 安装Docker 配置阿里云镜像加速 搭建集群 Raft一致性算法 Swarm集群弹性创建服务(扩缩 ...
- 【云原生】阿里云服务器部署 Docker Swarm集群
- SpringCloud Alibaba微服务实战(七) - 路由网关(Gateway)全局过滤
说在前面 全局过滤器作用于所有的路由,不需要单独配置,我们可以用它来实现很多统一化处理的业务需求,比如权限认证,IP 访问限制,监控,限流等等. 创建路由网关(Gateway)启动服务cloud-ac ...
- SpringCloud Alibaba微服务实战(五) - Sentinel实现限流熔断
什么是Sentinel? 请查看文章:SpringCloud Alibaba微服务实战(一) - 基础环境搭建 构建服务消费者cloud-sentinel进行服务调用 服务创建请查看文章:Spring ...
- SpringCloud Alibaba微服务实战(四) - Nacos Config 配置中心
说在前面 Nacos 是阿里巴巴开源的一个更易于构建云原生应用的动态服务发现.配置管理和服务管理平台.Nacos Config就是一个类似于SpringCloud Config的配置中心. 一.启动N ...
- SpringCloud Alibaba微服务实战(三) - Nacos服务创建消费者(Feign)
什么是Feign Feign 是一个声明式的伪 Http 客户端,它使得写 Http 客户端变得更简单.使用 Feign,只需要创建一个接口并注解.它具有可插拔的注解特性,可使用 Feign 注解和 ...
最新文章
- 深度学习时间序列预测:LSTM算法构建时间序列单变量模型预测空气质量(PM2.5)+代码实战
- HDOJ_ACM_超级楼梯
- Keras【Deep Learning With Python】CNN卷积神经网络(看不懂你打我系列)
- Centos6.3修改源码遇到无法yum安装的问题
- Python进阶01 词典
- 【深入Java虚拟机JVM 09】JVM垃圾回收finalize方法--对象最有一次自我拯救
- boost::property_tree模块自定义 ptree 的 data_type 需要执行的操作
- 一文详解CSS常见的五大布局
- 响应程度怎么填写_如何增加直邮营销的响应率?
- php 5.6 zend opcache,使用Zend OpCache 提高 PHP 5.5+ 性能
- 字体编辑器_三款好用的字体编辑器分享,让您拥有属于自己的字体
- Codeforces Round #493 (Div. 2):C. Convert to Ones
- 数据库——关系数据理论学习笔记
- android settheme不起作用,android-主题,样式和别名嵌套不起作用
- [转载]C#深拷贝的方法
- 栅栏密码怎么写java程序_[CTF]栅栏密码学习
- 第四代计算机cpu采用的超大规模集成电路,计算机一级试题a.doc
- 火车票软件哪个好用_买火车票的软件哪个最好
- 初学者使用HTML简单做一个自我介绍
- ios开发之切换RootViewController