(通俗易懂~)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

完结撒花!

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
回答: Docker搭建kafka集群的过程可以参考以下步骤。首先,需要依赖zookeeper来管理kafka集群的状态和元数据。因此,在搭建kafka集群之前,需要先搭建一个zookeeper集群。可以使用Docker创建一个新的网络,并在该网络上启动一个zookeeper集群。接下来,创建一个docker-compose文件(例如docker-compose-zk.yml),在该文件中定义zookeeper集群的配置和启动参数。然后,使用docker-compose命令启动zookeeper集群。接下来,创建一个新的docker-compose文件(例如docker-compose-kafka.yml),在该文件中定义kafka集群的配置和启动参数。在这个文件中,需要挂载一些文件,这些文件包括kafka的配置文件和数据目录。挂载这些文件的目的是为了保留kafka集群的状态和数据。最后,使用docker-compose命令启动kafka集群。在集群启动后,可以安装kafka-manager来管理kafka集群。可以创建一个新的docker-compose文件(例如docker-compose-kafka-manager.yml),在该文件中定义kafka-manager的配置和启动参数。使用docker-compose命令启动kafka-manager。配置kafka-manager连接到kafka集群,并进行测试。\[1\] 在搭建过程中,可能会遇到一些问题。例如,如果之前已经安装过旧版本的docker,可能会导致安装新版本docker时出现冲突的错误。解决这个问题的方法之一是使用wget命令下载docker-ce.repo文件,并将其放置在/etc/yum.repos.d/目录下。这样可以更新docker的安装源,然后重新安装docker。\[2\]\[3\] #### 引用[.reference_title] - *1* [Docker搭建kafka集群](https://blog.csdn.net/weixin_48412846/article/details/128724377)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [docker搭建kafka集群](https://blog.csdn.net/fxh13579/article/details/81299185)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值