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
网友评论