概述
(通俗易懂~)基于Docker的Etcd集群环境搭建
- 闲言碎语
- Etcd简介
- 准备环境
- 第一步,下载Etc镜像
- 第二步,创建自定义Docker网络
- 第三步,创建并启动Etcd镜像节点
- 验证结果
- 完结撒花!
闲言碎语
最近在埋头苦学Docker相关知识,深深被Docker技术所吸引,Docker牛逼,我爱Docker!也是好久没写博客了,在学习Docker的过程中,今天算是个小小的里程碑吧,特此纪念。废话不多说下面进入正文!
Etcd简介
Etcd是CoreOS团队于2013年6月发起的开源项目,它的目标是构建一个高可用的分布式键值(KEY-VALUE)仓库,遵循Apache v2许可,基于Go语言实现。主要用于分享配置和服务发现。etcd 的灵感来自于 ZooKeeper 和 Doozer,除了拥有与之类似的功能外,更加注重以下几个方面:
- 简单:支持 curl 方式的用户 API (HTTP+JSON)
- 安全:可选 SSL 客户端证书认证
- 快速:单实例可达每秒 10000 次写操作
- 可靠:使用 Raft 实现分布式
准备环境
构建思路如下:
节点名 | IP地址 |
---|---|
node1 | 10.2.36.1 |
node2 | 10.2.36.2 |
node3 | 10.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-urls | Peer消息的监听服务地址列表 |
-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集群所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复