使用docker创建etcd集群

2020-04-25  本文已影响0人  洛杉矶银河

etcd是一个高可用的键值存储系统,场景主要是
1、主要用于共享配置
2、服务注册与发现
3、分布式锁等
etcd是由CoreOS开发并维护的,灵感来自于 ZooKeeper 等。它使用Go语言编写,下面介绍如何使用docker创建etcd集群

找个go镜像 (这是官方镜像)
https://hub.docker.com/_/golang

# docker pull golang:1.12-alpine

下载3.x版本etcd 
https://github.com/etcd-io/etcd/releases
解压到本地重命名为etcd33

第一步:创建一个专门的docker网络

docker network  create etcdnet  --subnet 172.25.0.0/16    (使用的是bridge,指定了子网)

因此我们设定一个 IP规则

etcd1:172.25.0.101
etcd2:172.25.0.102
  
等下我们启动容器时 会固化这些IP

第二步:创建两个文件夹

# mkdir -p etcd1/conf etcd1/data
# mkdir -p etcd2/conf etcd2/data

第三步:配置文件

节点1:etcd.yml

name: etcd1
data-dir: /etcd/data
listen-client-urls: http://172.25.0.101:2379, http://127.0.0.1:2379
advertise-client-urls: http://172.25.0.101:2379
listen-peer-urls: http://172.25.0.101:2380
initial-advertise-peer-urls: http://172.25.0.101:2380
initial-cluster: etcd1=http://172.25.0.101:2380,etcd2=http://172.25.0.102:2380
initial-cluster-token: etcd-cluster-token
initial-cluster-state: new

节点2:etcd.yml

name: etcd2
data-dir: /etcd/data
listen-client-urls: http://172.25.0.102:2379, http://127.0.0.1:2379
advertise-client-urls: http://172.25.0.102:2379
listen-peer-urls: http://172.25.0.102:2380
initial-advertise-peer-urls: http://172.25.0.102:2380
initial-cluster: etcd1=http://172.25.0.101:2380,etcd2=http://172.25.0.102:2380
initial-cluster-token: etcd-cluster-token
initial-cluster-state: new

第四步:配置文件固化镜像

首先 随便创建一个容器(使用之前下载的golang镜像)
# docker run -d --name testgo -it \
golang:1.12-alpine 

来到解压好的etcd文件夹
#cd etcd33

拷贝etcd,etcdctl到容器
# docker cp etcd testgo:/usr/bin && docker cp etcdctl testgo:/usr/bin 

# docker exec -it testgo sh 
# sudo chmod +x /usr/bin/etcd  /usr/bin/etcdctl 

重新构建镜像
# docker commit testgo etcd:my
停止容器
# docker stop testgo

第五步:启动容器1

docker run -d  --name etcd1  \
 --network etcdnet \
 --ip 172.25.0.101 \
 -p 23791:2379 \
 -e ETCDCTL_API=3 \
 -v pathto/etcd1:/etcd \
 etcd:my  etcd --config-file  /etcd/conf/etcd.yml

第六步:启动容器2

docker run -d  --name etcd2  \
 --network etcdnet \
 --ip 172.25.0.102 \
 -p 23792:2379 \
 -e ETCDCTL_API=3 \
 -v pathto/etcd2:/etcd \
 etcd:my  etcd --config-file  /etcd/conf/etcd.yml

查看集群

进入容器
 # docker exec -it etcd1 sh
 
 /go # etcdctl member list
 查看有两个节点说明正常
97f72e8299c69562, started, etcd1, http://172.25.0.101:2380, http://172.25.0.101:2379
aea8ea6030d288e8, started, etcd2, http://172.25.0.102:2380, http://172.25.0.102:2379

//节点1存入用户信息
etcdctl put /user/101/name xiaoma
etcdctl put /user/101/age  19
//两个节点均可获取用户信息
docker exec -it etcd2 sh
/go # etcdctl get /user/101 --prefix
/user/101/age
19
/user/101/name
xiaoma
上一篇下一篇

猜你喜欢

热点阅读