etcd
sudo wget https://github.com/etcd-io/etcd/releases/download/v3.2.26/etcd-v3.2.26-linux-amd64.tar.gz
sudo tar -xzvf ./etcd-v3.2.26-linux-amd64.tar.gz
sudo mkdir -p /etc/etcd
sudo vi /etc/etcd/conf.yml
在环境变量中
============================================
name: etcd-1
data-dir: /usr/local/bin/etcd-v3.2.26-linux-amd64/data
listen-client-urls: http://192.168.13.128:2379,http://127.0.0.1:2379
advertise-client-urls: http://192.168.13.128:2379,http://127.0.0.1:2379
listen-peer-urls: http://192.168.13.128:2380
initial-advertise-peer-urls: http://192.168.13.128:2380
initial-cluster: etcd-1=http://192.168.13.128:2380,etcd-2=http://192.168.13.129:2380,etcd-3=http://192.168.13.130:2380
initial-cluster-token: etcd-cluster-token
initial-cluster-state: new
name: etcd-2
data-dir: /usr/local/bin/etcd-v3.2.26-linux-amd64/data
listen-client-urls: http://192.168.13.129:2379,http://127.0.0.1:2379
advertise-client-urls: http://192.168.13.129:2379,http://127.0.0.1:2379
listen-peer-urls: http://192.168.13.129:2380
initial-advertise-peer-urls: http://192.168.13.129:2380
initial-cluster: etcd-1=http://192.168.13.128:2380,etcd-2=http://192.168.13.129:2380,etcd-3=http://192.168.13.130:2380
initial-cluster-token: etcd-cluster-token
initial-cluster-state: new
name: etcd-3
data-dir: /usr/local/bin/etcd-v3.2.26-linux-amd64/data
listen-client-urls: http://192.168.13.130:2379,http://127.0.0.1:2379
advertise-client-urls: http://192.168.13.130:2379,http://127.0.0.1:2379
listen-peer-urls: http://192.168.13.130:2380
initial-advertise-peer-urls: http://192.168.13.130:2380
initial-cluster: etcd-1=http://192.168.13.128:2380,etcd-2=http://192.168.13.129:2380,etcd-3=http://192.168.13.130:2380
initial-cluster-token: etcd-cluster-token
initial-cluster-state: new
==================================================
sudo mkdir -p /usr/local/bin/etcd-v3.2.26-linux-amd64/data
nohup etcd --config-file=/etc/etcd/conf.yml &
etcdctl put /message Hello
etcdctl get /message
etcdctl del /message
etcdctl get /message
etcdctl --write-out=table --endpoints=localhost:2379 member list 通过本地的api来查看有哪些member list
访问一个左闭右开
etcdctl get foo foo3
etcd支持curl的方式访问API,支持SSL,写操作可达1000次,使用RAFT协议
====================================================
zk,redis,etcd
一致性协议:etcd使用raft协议,zk使用zab(类paxos协议),前者易于理解,方便工程实现。ZooKeeper的部署、维护、使用比较复杂,需要安装客户端,官方只提供了Java和C两种语言的接口。(paxos算法复杂)
api:etcd提供http+json,grpc接口,跨平台语言,zk则需要使用其客户端。
访问安全方面:etcd支持https访问,zk在这方面缺失。
应用场景:配置管理,服务注册发现,选主,应用调度,分布式队列,分布式锁。
-------------------------
相较之下,ZooKeeper有如下缺点:
复杂。ZooKeeper的部署维护复杂,管理员需要掌握一系列的知识和技能;而Paxos强一致性算法也是素来以复杂难懂而闻名于世;另外,ZooKeeper的使用也比较复杂,需要安装客户端,官方只提供了Java和C两种语言的接口。
Java编写。这里不是对Java有偏见,而是Java本身就偏向于重型应用,它会引入大量的依赖。而运维人员则普遍希望保持强一致、高可用的机器集群尽可能简单,维护起来也不易出错。
发展缓慢。Apache基金会项目特有的“Apache Way”在开源界饱受争议,其中一大原因就是由于基金会庞大的结构以及松散的管理导致项目发展缓慢。
etcd作为一个后起之秀,其优点也很明显。
简单。使用Go语言编写部署简单;使用HTTP作为接口使用简单;使用Raft算法保证强一致性让用户易于理解。
数据持久化。etcd默认数据一更新就进行持久化。
安全。etcd支持SSL客户端安全认证。
===========================================
redis:
而etcd则支持对key的版本记录和txn操作和client对key的watch,因此适合用做服务发现
zk,redis,etcd 可以使用的功能
HTTP的服务发现(RPC,UDP,Mysql)
配置信息的管理