etcd入门篇(一)

ETCD官网:https://etcd.io/ https://github.com/etcd-io/etcd

用于分布式系统最关键的分布式可靠 “键值” 存储
在这里插入图片描述

性能
简单:使用标准的HTTP工具(curl)读取和写入http - > { json }
快速:基准为每个实例1000次每秒读/写
安全:具有可选客户端证书身份验证的自动TLS 可靠:通过Raft协议正确分发

什么是etcd?

etcd是一个高度一致的分布式键值存储,它提供了一种可靠的方式来存储需要由分布式系统或机器集群访问的数据。它可以优雅地处理网络分区期间的领导者选举,即使在领导者节点中也可以容忍机器故障。

从简单的Web应用程序到Kubernetes,任何复杂性的应用程序都可以从etcd中读取数据或将数据写入etcd。

etcd是用Go编写的,它具有出色的跨平台支持,小的二进制文件和强大的社区。etcd机器之间的通信通过Raft共识算法处理

有哪些牛叉的项目使用了etcd?

  1. k8s(kubernetes). etcd是服务发现的后端,并存储集群状态和配置
  2. ROOK. etcd充当Rook的编排引擎
  3. CoreDNS. CoreDNS使用etcd作为可选后端
  4. M3. M3是Uber为Prometheus建立的大规模指标平台,etcd进行规则存储和其他功能
  5. openstack. OpenStack支持etcd作为配置存储,分布式密钥锁定等的可选提供程序

一,ETCD 的下载

#yum install etcd

对于那些想尝试最新版本的人,请从master分支机构构建etcd的最新版本。首先需要安装Go(需要1.13+版本)。所有开发都在上进行master,包括新功能和错误修复。错误修复首先针对master分支,然后移植到发行分支,如分支管理指南中所述。

二,ETCD 的运行

启动一个单点的 etcd 服务,只需要运行 etcd 命令就行
etcd -data-dir ~/data.etcd -advertise-client-urls  http://0.0.0.0:2379 -listen-client-urls http://0.0.0.0:2379

设置了数据源的本地存储路径为 ~/data.etcd,服务侦听的地址为0.0.0.0:2379

若默认启动的话:
#./etcd

  1. etcd 默认将数据存放到当前路径的 default.etcd/ 目录下
  2. 在 http://localhost:2380 和集群中其他节点通信
  3. 在 http://localhost:2379 提供 HTTP API 服务,供客户端交互
  4. 该节点的名称默认为 default
  5. 集群和每个节点都会生成一个 uuid
  6. 启动的时候,会运行 raft,选举出 leader 保证集群数据不丢失

这将在端口2379上进行etcd侦听以进行客户端通信,并在端口2380上进行侦听以进行服务器到服务器的通信。(这两个端口已经被 IANA 官方预留给 etcd)

集群部署时:

在每个etcd节点上,指定集群成员:
TOKEN=token-01
CLUSTER_STATE=new
NAME_1=machine-1
NAME_2=machine-2
NAME_3=machine-3
HOST_1=10.240.0.17
HOST_2=10.240.0.18
HOST_3=10.240.0.19
CLUSTER=${NAME_1}=http://${HOST_1}:2380,${NAME_2}=http://${HOST_2}:2380,${NAME_3}=http://${HOST_3}:2380

在每台机器上

运行此命令:启动etcd

For machine 1

THIS_NAME= N A M E 1 T H I S I P = {NAME_1} THIS_IP= NAME1THISIP={HOST_1}
etcd --data-dir=data.etcd --name T H I S N A M E   − − i n i t i a l − a d v e r t i s e − p e e r − u r l s h t t p : / / {THIS_NAME} \ --initial-advertise-peer-urls http:// THISNAME initialadvertisepeerurlshttp://{THIS_IP}:2380 --listen-peer-urls http:// T H I S I P : 2380   − − a d v e r t i s e − c l i e n t − u r l s h t t p : / / {THIS_IP}:2380 \ --advertise-client-urls http:// THISIP:2380 advertiseclienturlshttp://{THIS_IP}:2379 --listen-client-urls http://${THIS_IP}:2379 \
–initial-cluster ${CLUSTER} \
–initial-cluster-state ${CLUSTER_STATE}
–initial-cluster-token ${TOKEN}

For machine 2

THIS_NAME= N A M E 2 T H I S I P = {NAME_2} THIS_IP= NAME2THISIP={HOST_2}
etcd --data-dir=data.etcd --name T H I S N A M E   − − i n i t i a l − a d v e r t i s e − p e e r − u r l s h t t p : / / {THIS_NAME} \ --initial-advertise-peer-urls http:// THISNAME initialadvertisepeerurlshttp://{THIS_IP}:2380 --listen-peer-urls http://KaTeX parse error: Undefined control sequence: \ at position 16: {THIS_IP}:2380 \̲ ̲--advertise-cli…{THIS_IP}:2379 --listen-client-urls http://${THIS_IP}:2379 \
–initial-cluster ${CLUSTER} \
–initial-cluster-state ${CLUSTER_STATE}
–initial-cluster-token ${TOKEN}

For machine 3

THIS_NAME= N A M E 3 T H I S I P = {NAME_3} THIS_IP= NAME3THISIP={HOST_3}
etcd --data-dir=data.etcd --name T H I S N A M E   − − i n i t i a l − a d v e r t i s e − p e e r − u r l s h t t p : / / {THIS_NAME} \ --initial-advertise-peer-urls http:// THISNAME initialadvertisepeerurlshttp://{THIS_IP}:2380 --listen-peer-urls http:// T H I S I P : 2380   − − a d v e r t i s e − c l i e n t − u r l s h t t p : / / {THIS_IP}:2380 \ --advertise-client-urls http:// THISIP:2380 advertiseclienturlshttp://{THIS_IP}:2379
–listen-client-urls http://${THIS_IP}:2379 \
–initial-cluster ${CLUSTER} \
–initial-cluster-state ${CLUSTER_STATE}
–initial-cluster-token ${TOKEN}

参数解析:
–name:节点名称,默认为 default,在集群中应该保持唯一
–data-dir:服务运行数据保存的路径,默认为 ${name}.etcd
–snapshot-count:指定有多少事务(transaction)被提交时,触发截取快照保存到磁盘
–listen-peer-urls:和同伴通信的地址,比如 http://ip:2380,如果有多个,使用逗号分隔。需要所有节点都能够访问,所以不要使用 localhost
–listen-client-urls:对外提供服务的地址:比如 http://ip:2379,http://127.0.0.1:2379,客户端会连接到这里和 etcd 交互

–advertise-client-urls:对外公告的该节点客户端监听地址,这个值会告诉集群中其他节点
–initial-advertise-peer-urls:该节点同伴监听地址,这个值会告诉集群中其他节点
–initial-cluster:集群中所有节点的信息,格式为 node1=http://ip1:2380,node2=http://ip2:2380,…。注意:这里的 node1 是节点的 --name 指定的名字;后面的 ip1:2380 是 --initial-advertise-peer-urls 指定的值

–initial-cluster-state:新建集群的时候,这个值为 new;假如已经存在的集群,这个值为 existing
–initial-cluster-token:创建集群的 token,这个值每个集群保持唯一。这样的话,如果你要重新创建集群,即使配置和之前一样,也会再次生成新的集群和节点 uuid;否则会导致多个集群之间的冲突,造成未知的错误
–heartbeat-interval:leader 多久发送一次心跳到 followers。默认值 100ms
–eletion-timeout:重新投票的超时时间,如果 follow 在该时间间隔没有收到心跳包,会触发重新投票,默认为 1000 ms

现在etcd准备好了!要使用etcdctl连接到etcd:

export ETCDCTL_API=3  //添加环境变量
HOST_1=10.240.0.17
HOST_2=10.240.0.18
HOST_3=10.240.0.19
ENDPOINTS=$HOST_1:2379,$HOST_2:2379,$HOST_3:2379 
etcdctl --endpoints=$ENDPOINTS member list

基本操作:

put: 指定了IP

etcdctl --endpoints=$ENDPOINTS put foo "Hello World!"

get:

etcdctl --endpoints=$ENDPOINTS get foo
etcdctl --endpoints=$ENDPOINTS --write-out="json" get foo

通过前缀获取:

etcdctl --endpoints=$ENDPOINTS put web1 value1
etcdctl --endpoints=$ENDPOINTS put web2 value2
etcdctl --endpoints=$ENDPOINTS put web3 value3
etcdctl --endpoints=$ENDPOINTS get web -–prefix  获取前几字节web所有
etcdctl get –prefix /     //获取键的第一个字节为 /  的所有信息

通过前缀删除:

etcdctl --endpoints=$ENDPOINTS put key myvalue
etcdctl --endpoints=$ENDPOINTS del key 
etcdctl --endpoints=$ENDPOINTS put k1 value1
etcdctl --endpoints=$ENDPOINTS put k2 value2etcdctl 
--endpoints=$ENDPOINTS del k -–prefix  删除前几字节为k的所有
etcdctl del –prefix /     //删除键的第一个字节为 /  的所有信息

暂时写到此 ~ 待下篇深入

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值