我是靠谱客的博主 美满金鱼,这篇文章主要介绍(通俗易懂~)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镜像

复制代码
1
2
3
4
5
6
7
$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无法手动分配。

复制代码
1
2
3
4
5
6
7
8
9
10
##创建一个新的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:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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表示要加入到一个已有集群

验证结果

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$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集群内容请搜索靠谱客的其他文章。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部