你想了解的k8s-etcd一致性分布式数据库精讲(1)

安装

可以参考etcd的github

https://github.com/etcd-io/etcd

如果是mac的话,简单的方式应该是运行如下命令

brew install etcd

介绍

etcd是一个分布式键值存储,旨在可靠,快速地保存和提供对关键数据的访问。它通过分布式锁定,领导者选举和写入障碍实现可靠的分布式协调。etcd集群旨在实现高可用性和永久数据存储和检索。

启动

可以使用goreman来在本地启动多个节点

goreman 是一个go写的多进程管理,是foreman的go版本,运行如下代码进行下载

go get github.com/mattn/goreman

启动goreman

goreman start

启动的时候需要提供一个Procfile文件可以使用-f参数,默认是使用当前目录下的Procfile文件

我们来创建一个Procfile文件,然后写入如下内容

 # Use goreman to run `go get github.com/mattn/goreman`
etcd1: etcd --name infra1 --listen-client-urls http://127.0.0.1:2379 --advertise-client-urls http://127.0.0.1:2379 --listen-peer-urls http://127.0.0.1:12380 --initial-advertise-peer-urls http://127.0.0.1:12380 --initial-cluster-token etcd-cluster-1 --initial-cluster 'infra1=http://127.0.0.1:12380,infra2=http://127.0.0.1:22380,infra3=http://127.0.0.1:32380' --initial-cluster-state new --enable-pprof
etcd2: etcd --name infra2 --listen-client-urls http://127.0.0.1:22379 --advertise-client-urls http://127.0.0.1:22379 --listen-peer-urls http://127.0.0.1:22380 --initial-advertise-peer-urls http://127.0.0.1:22380 --initial-cluster-token etcd-cluster-1 --initial-cluster 'infra1=http://127.0.0.1:12380,infra2=http://127.0.0.1:22380,infra3=http://127.0.0.1:32380' --initial-cluster-state new --enable-pprof
etcd3: etcd --name infra3 --listen-client-urls http://127.0.0.1:32379 --advertise-client-urls http://127.0.0.1:32379 --listen-peer-urls http://127.0.0.1:32380 --initial-advertise-peer-urls http://127.0.0.1:32380 --initial-cluster-token etcd-cluster-1 --initial-cluster 'infra1=http://127.0.0.1:12380,infra2=http://127.0.0.1:22380,infra3=http://127.0.0.1:32380' --initial-cluster-state new --enable-pprof
#proxy: etcd grpc-proxy start --endpoints=127.0.0.1:2379,127.0.0.1:22379,127.0.0.1:32379 --listen-addr=127.0.0.1:23790 --advertise-client-url=127.0.0.1:23790 --enable-pprof

然后保存在启动goreman

上面的内容我们是定义了3个etcd的节点

etcd1: etcd --name infra1 --listen-client-urls http://127.0.0.1:2379 --advertise-client-urls http://127.0.0.1:2379 --listen-peer-urls http://127.0.0.1:12380 --initial-advertise-peer-urls http://127.0.0.1:12380 --initial-cluster-token etcd-cluster-1 --initial-cluster 'infra1=http://127.0.0.1:12380,infra2=http://127.0.0.1:22380,infra3=http://127.0.0.1:32380' --initial-cluster-state new --enable-pprof

我们来看一下这些参数

  • name 节点的名称
  • listen-client-urls 指定etcd服务器绑定的本地地址以接受传入连接。要侦听所有接口的端口,请指定0.0.0.0侦听IP地址。
  • advertise-client-urls 建议用于客户端通信的url列表,该值用于etcd代理或etcd成员与节点通信,不可以使用localhost这种,因为这种地址无法从远程计算机进行访问
  • listen-peer-urls 指定etcd服务器绑定的本地地址以接受传入连接。要侦听所有接口的端口,请指定0.0.0.0侦听IP地址。
  • initial-advertise-peer-urls 建议用于节点之间通信的url列表,不可以使用localhost这种,因为这种地址无法从远程计算机进行访问
  • initial-cluster-token 集群的token值,用来区分不同的集群
  • initial-cluster 集群中所有initial-advertise-peer-urls的合集
  • initial-cluster-state 集群状态 new是新建

操作

使用etcdctl工具进行操作

etcdctl默认是v2,我们先调整到v3

export ETCDCTL_API=3

查看版本

etcdctl version

写入

写入使用put指令,put后面跟键值对

etcdctl put foo bar

读取

使用get指令读取,get后面跟要读取的键

etcdctl get foo

如果想读取十六进制,使用–hex参数

etcdctl get foo --hex

如果想只读取值,使用–print-value-only参数

etcdctl get foo --print-value-only

如果想根据前缀获取,使用–prefix

etcdctl get foo --prefix

还可以使用limit参数限制数量

etcdctl get foo --prefix --liimit=2

读取之前版本的记录

可以使用–rev参数来获取之前操作时候的值,比如

etcdctl put foo bar
etcdctl put foo bar1
etcdctl put foo bar2

这个时候我们读取,给我们的值肯定是bar2

etcdctl get foo

我们可以通过–rev=3参数来获取之前的bar1值,–rev=2来获取bar值

etcdctl get foo --rev=3

读取大于等于给定键的键值对

可以使用参数 --from-key来获取大于等于给定键的键值,这个参数是使用键的字节进行比较

etcdctl get foo --from-key

删除

使用del指令删除键值对

etcdctl del foo

可以使用上面提到的–prefix来删除所有这个前缀的键值,还有–from-key参数也可以使用。这里面有一个新参数–prev-kv,这个参数返回删除的键值

etcdctl del foo --prev-kv

观察者

使用watch指令可以观测指定键的操作,注意这个应该在另外一个终端中进行,而且同样要改变成v3版本,不然默认v2是监测不到改变的

etcdctl watch foo

可以是使用-i参数进入交互模式

etcdctl watch -i
然后输入你要监测的键
watch foo

观察历史记录

这个操作也可以使用上面的–rev参数,它会把之前的历史操作都显示出来,也会继续观察之后的操作

etcdctl watch foo --rev=1

关于通信

etcd本身使用grpc作为其消息传递协议,也就是我们在项目中使用的时候,使用grpc进行和etcd的通信。对于没有grpc支持的语言,或者你不想使用grpc的话,etcd也提供了json grpc网关。此网关提供restful代理,将http/json请求转换为grpc消息。
详细使用方法,直接去github上面看吧

https://github.com/etcd-io/etcd/blob/master/Documentation/dev-guide/api_grpc_gateway.md

发布了30 篇原创文章 · 获赞 6 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/Thepatterraining/article/details/105191894