etcd——是什么-做什么-如何用
etcd是什么
etcd是一个高可用的分布式键值(key-value)数据库。etcd内部采用raft协议作为一致性算法,etcd基于Go语言实现。
etcd是一个服务发现系统,具备以下的特点:
简单:安装配置简单,而且提供了HTTP API进行交互,使用也很简单
安全:支持SSL证书验证
快速:根据官方提供的benchmark数据,单实例支持每秒2k+读操作
可靠:采用raft算法,实现分布式系统数据的可用性和一致性
etcd下载、安装、启动
wget https://github.com/coreos/etcd/releases/download/v3.1.5/etcd-v3.1.5-linux-amd64.tar.gz tar xzvf etcd-v3.1.5-linux-amd64.tar.gz cd etcd-v3.1.5-linux-amd64 启动一个单点的 etcd 服务,只需要运行 etcd 命令就行 设置了数据源的本地存储路径为 ~/data.etcd,服务侦听的地址为0.0.0.0:2379 etcd -data-dir ~/data.etcd -advertise-client-urls http://0.0.0.0:2379 -listen-client-urls http://0.0.0.0:2379
用screen 启动
sh run.sh
cd build ./etcd -version screen -dmS etcd ./etcd -data-dir ~/data.etcd -advertise-client-urls http://0.0.0.0:2379 -listen-client-urls http://0.0.0.0:2379 screen -wipe echo "ok"
若默认启动的话:
#./etcd
etcd 默认将数据存放到当前路径的 default.etcd/ 目录下
在 http://localhost:2380 和集群中其他节点通信
在 http://localhost:2379 提供 HTTP API 服务,供客户端交互
该节点的名称默认为 default
集群和每个节点都会生成一个 uuid
启动的时候,会运行 raft,选举出 leader 保证集群数据不丢失
这将在端口2379上进行etcd侦听以进行客户端通信,并在端口2380上进行侦听以进行服务器到服务器的通信。(这两个端口已经被 IANA 官方预留给 etcd)
etcdctl的使用
etcdctl是一个命令行的客户端,它提供了一个简洁的命令,可理解为命令工具集,可以方便我们在对服务进行测试或者手动修改数据库内容。
etcdctl与其他xxxctl的命令原理及操作类似(例如kubectl,systemctl)。
Etcd常用命令
(一)数据库操作命令 etcd 在键的组织上采用了层次化的空间结构(类似于文件系统中目录的概念),数据库操作围绕对键值和目录的 CRUD [增删改查]
(符合 REST 风格的一套操作:Create, Read, Update, Delete)完整生命周期的管理。 具体的命令选项参数可以通过 etcdctl command --help来获取相关帮助。 1)对象为键值 set[增:无论是否存在]:etcdctl set key value mk[增:必须不存在]:etcdctl mk key value rm[删]:etcdctl rm key update[改]:etcdctl update key value get[查]:etcdctl get key 2)对象为目录 setdir[增:无论是否存在]:etcdctl setdir dir mkdir[增:必须不存在]: etcdctl mkdir dir rmdir[删]:etcdctl rmdir dir updatedir[改]:etcdctl updatedir dir ls[查]:etcdclt ls (二)非数据库操作命令 backup[备份 etcd 的数据] etcdctl backup watch[监测一个键值的变化,一旦键值发生更新,就会输出最新的值并退出] etcdctl watch key exec-watch[监测一个键值的变化,一旦键值发生更新,就执行给定命令] etcdctl exec-watch key --sh -c "ls" member[通过 list、add、remove、update 命令列出、添加、删除 、更新etcd 实例到 etcd 集群中] etcdctl member list;etcdctl member add 实例;etcdctl member remove 实例;etcdctl member update 实例。 etcdctl cluster-health[检查集群健康状态] (三)常用配置参数 设置配置文件,默认为/etc/etcd/etcd.conf。 配置参数 参数说明 -name 节点名称 -data-dir 保存日志和快照的目录,默认为当前工作目录,指定节点的数据存储目录 -addr 公布的ip地址和端口。 默认为127.0.0.1:2379 -bind-addr 用于客户端连接的监听地址,默认为-addr配置 -peers 集群成员逗号分隔的列表,例如 127.0.0.1:2380,127.0.0.1:2381 -peer-addr 集群服务通讯的公布的IP地址,默认为 127.0.0.1:2380. -peer-bind-addr 集群服务通讯的监听地址,默认为-peer-addr配置 -wal-dir 指定节点的was文件的存储目录,若指定了该参数,wal文件会和其他数据文件分开存储 -listen-client-urls -listen-peer-urls 监听URL,用于与其他节点通讯 -initial-advertise-peer-urls 告知集群其他节点url. -advertise-client-urls 告知客户端url, 也就是服务的url -initial-cluster-token 集群的ID -initial-cluster 集群中所有节点 -initial-cluster-state -initial-cluster-state=new 表示从无到有搭建etcd集群 -discovery-srv 用于DNS动态服务发现,指定DNS SRV域名 -discovery 用于etcd动态发现,指定etcd发现服务的URL [https://discovery.etcd.io/],用环境变量表示
1035 ./etcdctl -h 1036 ./etcdctl set --ttl '10' key "Hello..." 1037 ./etcdctl get key 1038 ./etcdctl ls 1039 ./etcdctl set key "Hello world" 1040 ./etcdctl watch key 1041 ./etcdctl rm key 1042 ./etcdctl ls 1043 ./etcdctl set testkey "Hello world" 1044 ./etcdctl get testkey 1045 ./etcdctl exec-watch testkey -- sh -c 'll' 1046 ./etcdctl exec-watch testkey -- sh -c 'ls' 1047 ./etcdctl member list 1048 ./etcdctl ll 1049 ./etcdctl ls 1050 ./etcdctl member list
1002 ./etcdctl update key "haha" 1003 ./etcdctl update testkey "haha........" 1004 ./etcdctl update testkey "haha......." 1005 ./etcdctl update testkey "haha........" 1006 ./etcdctl -help 1007 ./etcdctl ls 1008 ./etcdctl member lsit 1009 ./etcdctl member list 1010 ./etcdctl ls 1011 ./etcdctl member list 1012 ./etcdctl ls 1013 ./etcdctl member list