一:Etcd介绍
etcd 是一个高度一致的分布式键值(key-value)存储,它提供了一种可靠的方式来存储需要由分布式系统或机器集群访问的数据。它可以优雅地处理网络分区期间的领导者选举,即使在领导者节点中也可以容忍机器故障。
etcd 是用Go语言编写的,它具有出色的跨平台支持,小的二进制文件和强大的社区。etcd机器之间的通信通过Raft共识算法处理。
二:Etcd术语
Raft:etcd所采用的保证分布式系统强一致性的算法。
Node:一个Raft状态机实例。
Member: 一个etcd实例。它管理着一个Node,并且可以为客户端请求提供服务。
Cluster:由多个Member构成可以协同工作的etcd集群。
Peer:对同一个etcd集群中另外一个Member的称呼。
Client: 向etcd集群发送HTTP请求的客户端。
WAL:预写式日志,etcd用于持久化存储的日志格式。
snapshot:etcd防止WAL文件过多而设置的快照,存储etcd数据状态。
Proxy:etcd的一种模式,为etcd集群提供反向代理服务。
Leader(领导者):Raft算法中通过竞选而产生的处理所有数据提交的节点。
Follower(跟随者):竞选失败的节点作为Raft中的从属节点,为算法提供强一致性保证。
Candidate:当Follower超过一定时间接收不到Leader的心跳时转变为Candidate开始Leader竞选。
Term:某个节点成为Leader到下一次竞选开始的时间周期,称为一个Term。
Index:数据项编号。Raft中通过Term和Index来定位数据。
三:Etcd安装(centos)
1.上传etcd安装包
tar -zxvf etcd-v3.4.3-linux-amd64.tar.gz
2.切换至etcd根目录,将etcd和etcdctl二进制文件复制到/usr/local/bin目录这样系统中可以直接调用etcd/etcdctl这两个程序
cp etcd etcdctl /usr/local/bin
3.输入命令etcd,即可启动一个单节点的etcd服务,ctrl+c即可停止服务
注:以下为输入命令etcd后的所代表的意思
3.1.name表示节点名称,默认为default。
3.2.data-dir 保存日志和快照的目录,默认为当前工作目录default.etcd/目录下。
3.3.在http://localhost:2380和集群中其他节点通信。
3.4.在http://localhost:2379提供客户端交互。
3.5.heartbeat为100ms,该参数的作用是leader多久发送一次心跳到followers,默认 值是100ms。
3.6.election为1000ms,该参数的作用是重新投票的超时时间,如果follow在该时间间 隔没有收到心跳包,会触发重新投票,默认为1000ms。
3.7.snapshot count为10000,该参数的作用是指定有多少事务被提交时,触发截取快 照保存到磁盘。
3.8.集群和每个节点都会生成一个uuid。
3.9.启动的时候会运行raft,选举出leader
四:创建一个etcd服务
1.建立etcd相关目录(即数据文件和配置文件的保存位置)
mkdir -p /var/lib/etcd/ && mkdir -p /etc/etcd/
2.创建etcd配置文件
vim /etc/etcd/etcd.conf
# 节点名称 ETCD_NAME="etcd0" # 指定数据文件存放位置 ETCD_DATA_DIR="/var/lib/etcd/"
3.创建systemd配置文件
vim /etc/systemd/system/etcd.service
[Unit] Description=Etcd Server After=network.target After=network-online.target Wants=network-online.target [Service] User=root Type=notify WorkingDirectory=/var/lib/etcd/ ## 根据实际情况修改EnvironmentFile和ExecStart这两个参数值 ## 1.EnvironmentFile即配置文件的位置,注意“-”不能少 EnvironmentFile=-/etc/etcd/etcd.conf ## 2.ExecStart即etcd启动程序位置 ExecStart=/usr/local/bin/etcd Restart=on-failure LimitNOFILE=65536 [Install] WantedBy=multi-user.target
4.启动/停止/查看etcd服务
systemctl daemon-reload systemctl enable etcd systemctl start etcd systemctl status etcd
五:etcd的基本使用
1.put 放入数据
etcdctl put /testdir/testkey "Hello world" --sort 对结果进行排序 --consistent 将请求发给主节点,保证获取内容的一致性。
例:
2.拿数据
etcdctl get 文件名
例子:
3.删除数据
etcdctl del 文件名
例子: