我是靠谱客的博主 美满金鱼,最近开发中收集的这篇文章主要介绍(通俗易懂~)Docker搭建Etcd集群,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

(通俗易懂~)基于Docker的Etcd集群环境搭建

    • 闲言碎语
    • Etcd简介
    • 准备环境
      • 第一步,下载Etc镜像
      • 第二步,创建自定义Docker网络
      • 第三步,创建并启动Etcd镜像节点
      • 验证结果
    • 完结撒花!

闲言碎语

最近在埋头苦学Docker相关知识,深深被Docker技术所吸引,Docker牛逼,我爱Docker!也是好久没写博客了,在学习Docker的过程中,今天算是个小小的里程碑吧,特此纪念。废话不多说下面进入正文!

Etcd简介

Etcd是CoreOS团队于2013年6月发起的开源项目,它的目标是构建一个高可用的分布式键值(KEY-VALUE)仓库,遵循Apache v2许可,基于Go语言实现。主要用于分享配置和服务发现。etcd 的灵感来自于 ZooKeeper 和 Doozer,除了拥有与之类似的功能外,更加注重以下几个方面:

  1. 简单:支持 curl 方式的用户 API (HTTP+JSON)
  2. 安全:可选 SSL 客户端证书认证
  3. 快速:单实例可达每秒 10000 次写操作
  4. 可靠:使用 Raft 实现分布式

准备环境

构建思路如下:

节点名IP地址
node110.2.36.1
node210.2.36.2
node310.2.36.3

我们需要三个节点,这三个节点可以分布在不同服务器,本案例中,以一台服务器基于Docker运行多个容器来做演示。

第一步,下载Etc镜像

下载Etcd镜像

$docker pull quay.io/coreos/etcd:v3.3.1
$docker images

REPOSITORY                               TAG                 IMAGE ID            CREATED             SIZE
quay.io/coreos/etcd                      v3.3.1              d56a5594a28c        2 years ago         39.4MB

第二步,创建自定义Docker网络

首先构建个自定义网络,因为我们要给各个节点分配IP地址,Docker容器默认网络只能自动配IP无法手动分配。

##创建一个新的bridge网络
$docker network create --driver bridge --subnet=10.2.36.0/16 --gateway=10.2.1.1 mynet2
##查看网络列表
$docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
d1473128e10f        bridge              bridge              local
ca7490979d9e        host                host                local
64f518b2574c        mynet2              bridge              local
f2e31afceb6e        none                null                local

第三步,创建并启动Etcd镜像节点

创建容器并运行
节点1:

docker run -d 
-p 2479:2379 
-p 2381:2380 
--name node1 
--network=mynet2 
--ip 10.2.36.1 
quay.io/coreos/etcd:v3.3.1 
etcd 
-name node1 
-advertise-client-urls http://10.2.36.1:2379 
-initial-advertise-peer-urls http://10.2.36.1:2380 
-listen-client-urls http://0.0.0.0:2379 -listen-peer-urls http://0.0.0.0:2380 
-initial-cluster-token etcd-cluster 
-initial-cluster "node1=http://10.2.36.1:2380,node2=http://10.2.36.2:2380,node3=http://10.2.36.3:2380" 
-initial-cluster-state new

节点2:

docker run -d 
-p 2579:2379 
-p 2382:2380 
--name node2 
--network=mynet2 
--ip 10.2.36.2 
quay.io/coreos/etcd:v3.3.1 
etcd 
-name node2 
-advertise-client-urls http://10.2.36.2:2379 
-initial-advertise-peer-urls http://10.2.36.2:2380 
-listen-client-urls http://0.0.0.0:2379 -listen-peer-urls http://0.0.0.0:2380 
-initial-cluster-token etcd-cluster 
-initial-cluster "node1=http://10.2.36.1:2380,node2=http://10.2.36.2:2380,node3=http://10.2.36.3:2380" 
-initial-cluster-state new

节点3:

docker run -d 
-p 2679:2379 
-p 2383:2380 
--name node3 
--network=mynet2 
--ip 10.2.36.3 
quay.io/coreos/etcd:v3.3.1 
etcd 
-name node3 
-advertise-client-urls http://10.2.36.3:2379 
-initial-advertise-peer-urls http://10.2.36.3:2380 
-listen-client-urls http://0.0.0.0:2379 -listen-peer-urls http://0.0.0.0:2380 
-initial-cluster-token etcd-cluster 
-initial-cluster "node1=http://10.2.36.1:2380,node2=http://10.2.36.2:2380,node3=http://10.2.36.3:2380" 
-initial-cluster-state new

参数详解:

参数名说明
-name设置成员节点的别名,建议为每个成员节点配置可识别的命名
-advertise-client-urls广播到集群中本成员的监听客户端请求的地址
-initial-advertise-peer-urls广播到集群中本成员的Peer监听通信地址
-listen-client-urls客户端请求的监听地址列表
-listen-peer-urlsPeer消息的监听服务地址列表
-initial-cluster-token启动集群的时候指定集群口令,只有相同token的几点才能加入到同一集群
-initial-cluster所有集群节点的地址列表
-initial-cluster-state初始化集群状态,默认为new,也可以指定为exi-string表示要加入到一个已有集群

验证结果

$docker ps
CONTAINER ID        IMAGE                        COMMAND                  CREATED             STATUS              PORTS                                            NAMES
377c7cbe17ff        quay.io/coreos/etcd:v3.3.1   "etcd -name node3 -a…"   About an hour ago   Up About an hour    0.0.0.0:2679->2379/tcp, 0.0.0.0:2383->2380/tcp   node3
dcc05aaaf332        quay.io/coreos/etcd:v3.3.1   "etcd -name node2 -a…"   About an hour ago   Up About an hour    0.0.0.0:2579->2379/tcp, 0.0.0.0:2382->2380/tcp   node2
0d7e59766c6f        quay.io/coreos/etcd:v3.3.1   "etcd -name node1 -a…"   About an hour ago   Up About an hour    0.0.0.0:2479->2379/tcp, 0.0.0.0:2381->2380/tcp   node1
## 通过etcdctl member list命令可以查询出所有集群节点的列表即为成功
$docker exec -it 377 etcdctl member list
2db3381ff302973d: name=node3 peerURLs=http://10.2.36.3:2380 clientURLs=http://10.2.36.3:2379 isLeader=false
f919ac4d9adb687a: name=node1 peerURLs=http://10.2.36.1:2380 clientURLs=http://10.2.36.1:2379 isLeader=true
ffbd0562b8dd25e9: name=node2 peerURLs=http://10.2.36.2:2380 clientURLs=http://10.2.36.2:2379 isLeader=false
## 无论通过哪一集群节点查询出来的结果都应相同
$docker exec -it dcc etcdctl member list
2db3381ff302973d: name=node3 peerURLs=http://10.2.36.3:2380 clientURLs=http://10.2.36.3:2379 isLeader=false
f919ac4d9adb687a: name=node1 peerURLs=http://10.2.36.1:2380 clientURLs=http://10.2.36.1:2379 isLeader=true
ffbd0562b8dd25e9: name=node2 peerURLs=http://10.2.36.2:2380 clientURLs=http://10.2.36.2:2379 isLeader=false

$docker exec -it 0d7 etcdctl member list
2db3381ff302973d: name=node3 peerURLs=http://10.2.36.3:2380 clientURLs=http://10.2.36.3:2379 isLeader=false
f919ac4d9adb687a: name=node1 peerURLs=http://10.2.36.1:2380 clientURLs=http://10.2.36.1:2379 isLeader=true
ffbd0562b8dd25e9: name=node2 peerURLs=http://10.2.36.2:2380 clientURLs=http://10.2.36.2:2379 isLeader=false

完结撒花!

最后

以上就是美满金鱼为你收集整理的(通俗易懂~)Docker搭建Etcd集群的全部内容,希望文章能够帮你解决(通俗易懂~)Docker搭建Etcd集群所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部