一 环境准备

1.1 基础环境

ntp配置:略 #建议配置ntp服务,保证时间一致性
etcd版本:v3.3.9
防火墙及SELinux:关闭防火墙和SELinux
名称
地址
主机名
备注
etcd1
172.24.8.71
etcd1.example.com
用于保存相关IP信息
docker01
172.24.8.72
docker01.example.com
 
docker02
172.24.8.73
docker02.example.com
 
 # hostnamectl set-hostname etcd1.example.com
# hostnamectl set-hostname docker01.example.com
# hostnamectl set-hostname docker02.example.com
 
提示:主机名非必须。

1.2 docker环境

以上所有节点均安装docker,具体方式见《002.docker版本及安装》。

二 etcd节点部署

提示:本环境全部采用docker化,即etcd服务也以docker形式存在。

2.1 etcd基础配置

 # mkdir -p /var/log/etcd/			#建议创建etcd日志保存目录
# mkdir -p /data/etcd #建议创建单独的etcd数据目录
# export HOST_1=172.24.8.71 #设置etcd节点的IP
# export DATA_DIR=/data/etcd #设置集群etcd数据节点
# REGISTRY=quay.io/coreos/etcd #建议使用此仓库
# ETCD_VERSION=latest #设置etcd版本
# export NAME_1=etcd1 #设置etcd节点的name
# docker volume create --name etcd-data
 
提示:以上所有操作需要在所有节点操作。

2.3 启动docker etcd集群

 [root@etcd1 ~]# docker run \
-p 2379:2379 \
-p 2380:2380 \
--volume=${DATA_DIR}:/etcd-data \
--name etcd ${REGISTRY}:${ETCD_VERSION} \
/usr/local/bin/etcd \
--data-dir=/etcd-data --name ${NAME_1} \
--initial-advertise-peer-urls http://${HOST_1}:2380 --listen-peer-urls http://0.0.0.0:2380 \
--advertise-client-urls http://${HOST_1}:2379 --listen-client-urls http://0.0.0.0:2379 \
--initial-cluster ${NAME_1}=http://${HOST_1}:2380
提示:quay.io/coreos/etcd镜像国内可能无法pull,可在国外节点pull,然后scp至集群节点。

2.4 确认验证

 [root@etcd1 ~]# docker ps
 [root@etcd1 ~]# docker exec -it bcb96fb0f987 /usr/local/bin/etcdctl cluster-health
 [root@etcd1 ~]# docker exec -it bcb96fb0f987 /usr/local/bin/etcdctl --endpoints=http://${HOST_1}:2379 member list

三 docker宿主机节点配置

3.1 docker01配置

 [root@docker01 ~]# vi /etc/sysconfig/docker
OPTIONS='--cluster-store=etcd://172.24.8.71:2379 --cluster-advertise=172.24.8.72:2379'
[root@docker01 ~]# systemctl restart docker
 

3.2 docker02配置

 [root@docker02 ~]# vi /etc/sysconfig/docker
OPTIONS='--cluster-store=etcd://172.24.8.71:2379 --cluster-advertise=172.24.8.73:2379'
[root@docker02 ~]# systemctl restart docker
 

3.3 创建overlay网络

 [root@docker01 ~]# docker network create -d overlay overlaynet1
418654e0092f5d1c3e4bf2b9ee73cdd22932dd60fecf12d7a3b024818118244b
[root@docker01 ~]# docker network inspect overlaynet1
 
 [root@docker02 ~]# docker network inspect overlaynet1
提示:分别在docker01和docker02宿主机查看在docker01上创建的overlay网络,若都存在则表示通过 etcd,网络数据是分布式而不是本地的了。

3.4 测试网络

 [root@docker01 ~]# docker run -d --name Container01 --network overlaynet1 training/webapp python app.py
[root@docker02 ~]# docker run -d --name Container02 --network overlaynet1 training/webapp python app.py
[root@docker01 ~]# docker exec -it 73e984a5528a /bin/bash
root@73e984a5528a:/opt/webapp# ifconfig
 
 root@73e984a5528a:/opt/webapp# route -n
 [root@docker02 ~]# docker exec -it 89eac9521743 /bin/bash
root@89eac9521743:/opt/webapp# ifconfig
 
说明:
  • 所有容器对会存在两个网卡,eth0和eth1;
  • 其中 eth1 的网络是一个内部的网段,即普通的 NAT 模式;
  • 其中 eth0 是 overlay 网段上分配的IP地址,即 overlay 网络,且 MTU 是 1450 而不是 1500;
  • 只有同一个 overlay 网络中的容器之间的通信才会通过 eth0,其它所有通信还是经过 eth1。
 [root@docker01 ~]# brctl show
 [root@docker01 ~]# docker network ls
其他引用:
  • Docker 在每个节点上创建了两个 linux bridge,一个用于 overlay 网络,一个用于非 overlay 的 NAT 网络(docker_gwbridge);
  • 容器内的到overlay 网络的其它容器的网络流量走容器的 overlay 网卡(eth0),其它网络流量走容器的 NAT 网卡(eth1);
  • 当前 Docker 创建 vxlan 隧道的ID范围为 256~1000,因而最多可以创建745个网络,因此,本例中的这个 vxlan 隧道使用的 ID 是 256;
  • Docker vxlan 驱动使用 4789 UDP 端口;
  • overlay网络模型底层需要类似 consul 或 etcd 的 KV 存储系统进行消息同步;
  • Docker overlay 不使用多播;
  • Overlay 网络中的容器处于一个虚拟的大二层网络中,
 
参考链接:https://www.cnblogs.com/allcloud/p/7150564.html

007.基于Docker的Etcd分布式部署的更多相关文章

  1. 基于docker+etcd+confd + haproxy构建高可用、自发现的web服务

    基于docker+etcd+confd + haproxy构建高可用.自发现的web服务 2016-05-16 15:12 595人阅读 评论(0) 收藏 举报 版权声明:本文为博主原创文章,未经博主 ...

  2. 008.Docker Flannel+Etcd分布式网络部署

    一 环境准备 1.1 Flannel概述 Flannel是一种基于overlay网络的跨主机容器网络解决方案,即将TCP数据包封装在另一种网络包里面进行路由转发和通信,Flannel是CoreOS开发 ...

  3. 【Docker】基于docker+etcd+confd + haproxy构建高可用、自发现的web服务

    各个工具介绍 (1)Docker:Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux机器上,也可以实现虚拟化,docker ...

  4. 基于Docker+Jenkins实现自动化部署

    使用码云搭建Git代码存储仓库 https://gitee.com/login 使用码云创建私有私有git仓库 将本地springboot项目上传到git仓库中 基于Docker安装Jenkins环境 ...

  5. 暑假第二弹:基于docker的hadoop分布式集群系统的搭建和测试

    早在四月份的时候,就已经开了这篇文章.当时是参加数据挖掘的比赛,在计科院大佬的建议下用TensorFlow搞深度学习,而且要在自己的hadoop分布式集群系统下搞. 当时可把我们牛逼坏了,在没有基础的 ...

  6. 基于docker的spark-hadoop分布式集群之二: 环境测试

    在上一章<环境搭建>基础上,本章对各个模块做个测试 Mysql 测试 1.Mysql节点准备 为方便测试,在mysql节点中,增加点数据 进入主节点 docker exec -it had ...

  7. 搭建基于docker 的redis分布式集群在docker for windows

    https://blog.csdn.net/xielinrui123/article/details/85104446 首先在docker中下载使用 docker pull redis:3.0.7do ...

  8. 喵星之旅-狂奔的兔子-基于docker的redis分布式集群

    一.docker安装(略) 二.下载redis安装包(redis-4.0.8.tar.gz) 以任何方式获取都可以.自行官网下载. 三.拉取centos7的docker镜像 命令:docker pul ...

  9. 基于docker的spark-hadoop分布式集群之一: 环境搭建

    一.软件准备 1.基础docker镜像:ubuntu,目前最新的版本是18 2.需准备的环境软件包: (1) spark-2.3.0-bin-hadoop2.7.tgz (2) hadoop-2.7. ...

随机推荐

  1. js 获取当前日期或者前、后N天yyyy-MM-dd的方法

    //js获取当前日期.当前日期前.后N天的标准年月日 //day=0为当前天,day=7为前7天,day=-7为当前日期的后7天 function getstartdate(day) {        ...

  2. Git操作学习笔记

    根据廖雪峰老师git教程学习整理 这里需要辨析一下概念.Github是代码托管平台,是协作的工具;而Git是版本控制工具.Git不需要联网,在本机就可以使用 集中式版本控制系统与分布式版本控制系统 S ...

  3. python正则表达式一[转]

    原文:http://blog.jobbole.com/74844/ 作为一个概念而言,正则表达式对于Python来说并不是独有的.但是,Python中的正则表达式在实际使用过程中还是有一些细小的差别. ...

  4. .Net Core中使用RabbitMQ

    (1).引入依赖 RabbitMQ.Client (2).编写发布者代码 var connectionFactory = new ConnectionFactory() { HostName=&quo ...

  5. Spring-boot:快速搭建微框架服务

    前言: Spring Boot是为了简化Spring应用的创建.运行.调试.部署等而出现的,使用它可以做到专注于Spring应用的开发,而无需过多关注XML的配置. 简单来说,它提供了一堆依赖打包,并 ...

  6. TypeError: 'range' object does not support item assignment

    TypeError: 'range' object does not support item assignment I was looking at some python 2.x code and ...

  7. Linux内核源码分析--内核启动之(5)Image内核启动(rest_init函数)(Linux-3.0 ARMv7)【转】

    前面粗略分析start_kernel函数,此函数中基本上是对内存管理和各子系统的数据结构初始化.在内核初始化函数start_kernel执行到最后,就是调用rest_init函数,这个函数的主要使命就 ...

  8. mysql binglog server的设置方法【原创】

    MySQL备份数据都是MySQL备份+binlog,这样才能保证数据的完整性.下面就是利用mysqlbinlog搭建mysql binlog server,可以把binlog传到远程存储上. 试验环境 ...

  9. dblink 退出 session

    以dblink的表现为例,我一直认为dblink的远程连接session仅在操作(select,dml)发生时短期存在,在操作完成后依据一定条件保留或退出. 而事实并非如此,随便使用一个远程查询语句如 ...

  10. MySQL数据库——安装教程(5.7版本)

    一.配置MySQL数据库 1.解压绿色版mysql,并改名为mysql5.7,如下图 对比一下下图5.6以前的版本,少data目录(存放数据)和my-default.ini文件(配置信息) 二.安装服 ...