-
ETCD是用于共享配置和服务发现的分布式、一致性的KV存储系统, 使用Raft协议, 部署和运维都比zk简单
-
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开始竞选
-
Term:某个节点成为Leader到下一次竞选时间,称为一个Term
-
Index:数据项编号。Raft中通过Term和Index来定位数据
ETCD下载
2. etcd环境变量- 也是一个实际案例
参考1
参考2
# etcd 集群中的节点名,这里可以随意,可区分且不重复就行 ETCD_NAME=etcd1 # etcd数据目录 ETCD_DATA_DIR=/var/lib/etcd # 用于节点之间通信的 URL,可监听多个,集群内部将通过这些 URL 进行数据交互(如选举、数据同步等) ETCD_LISTEN_PEER_URLS=https://192.168.142.161:2380 # 监听的用于客户端通信的 URL,同样可以监听多个 ETCD_LISTEN_CLIENT_URLS=https://192.168.142.161:2379,https://127.0.0.1:2379 # 广播给外部客户端使用的url,建议使用的客户端通信 URL,该值用于 etcd 代理或 etcd 成员与 etcd 节点通信 ETCD_ADVERTISE_CLIENT_URLS=https://192.168.142.161:2379 # 广播给集群内其他成员访问的URL,建议用于节点之间通信的 URL,节点间将以该值进行通信 ETCD_INITIAL_ADVERTISE_PEER_URLS=https://192.168.142.161:2380 # 初始集群成员列表,也就是集群中所有的 initial--advertise-peer-urls 的合集 ETCD_INITIAL_CLUSTER=etcd1=https://192.168.142.161:2380,etcd2=https://192.168.142.162:2380,etcd3=https://192.168.142.163:2380 # 新建集群的标志,new为新建集群 ETCD_INITIAL_CLUSTER_STATE=new # 节点的 token 值(集群个的名称),设置该值后集群将生成唯一 ID,并为每个节点也生成唯一 ID,当使用相同配置文件再启动一个集群时,只要该 token 值不一样,etcd 集群就不会相互影响 ETCD_INITIAL_CLUSTER_TOKEN=k8s-etcd-cluster # ETCD_METRICS=basic # 选举超时时间,Etcd 的选举超时时间默认是 1000 毫秒,选举时间至少是 RTT 10 倍的时间,5000毫秒是一次全球 RTT 的安全上限 ETCD_ELECTION_TIMEOUT=5000 # etcd心跳间隔时间,该参数应该设置成节点之间 RTT (Round Trip Time,网络往返时延)的时间,单位是毫秒,默认是100毫秒,在美国典型的 RTT 是大概 50ms, 在中国之间可以慢到 400ms,通常设置为 0.5~1.5 倍 RTT 值 ETCD_HEARTBEAT_INTERVAL=250 # Etcd 总是向日志文件中追加 key,日志文件会随着 key 的改动而线性增长,当参数累积到一定的数量时,Etcd 才会创建快照文件。默认情况下,数量达到 10000 时才会建立快照。如果 Etcd 的内存使用和磁盘使用过高,那么应该调低快照触发的阈值(设置为5000) ETCD_SNAPSHOT_COUNT=10000 # mvcc密钥值存储的自动压缩保留时间(小时),0表示禁用自动压缩 ETCD_AUTO_COMPACTION_RETENTION=8 # 默认是off(关闭代理),代理模式设置,("off", "readonly" or "on") ETCD_PROXY=off # Flannel need etcd v2 API ETCD_ENABLE_V2=true # TLS settings ETCD_TRUSTED_CA_FILE=/etc/ssl/etcd/ssl/ca.pem ETCD_CERT_FILE=/etc/ssl/etcd/ssl/member-control1.pem ETCD_KEY_FILE=/etc/ssl/etcd/ssl/member-control1-key.pem ETCD_CLIENT_CERT_AUTH=true ETCD_PEER_TRUSTED_CA_FILE=/etc/ssl/etcd/ssl/ca.pem ETCD_PEER_CERT_FILE=/etc/ssl/etcd/ssl/member-control1.pem ETCD_PEER_KEY_FILE=/etc/ssl/etcd/ssl/member-control1-key.pem ETCD_PEER_CLIENT_CERT_AUTH=True # CLI settings ETCDCTL_ENDPOINTS=https://127.0.0.1:2379 ETCDCTL_CACERT=/etc/ssl/etcd/ssl/ca.pem ETCDCTL_KEY=/etc/ssl/etcd/ssl/admin-control1-key.pem ETCDCTL_CERT=/etc/ssl/etcd/ssl/admin-control1.pem3. etcd备份恢复
官网
- 备份
# 查看状态,如果etcd启动的,可以用 ps -ef | grep etcd 查看各个证书位置 ETCDCTL_API=3 etcdctl --endpoints 10.21.194.17:2379,10.21.194.18:2379,10.21.194.19:2379 --cacert=/etc/ssl/etcd/ssl/ca.pem --cert=/etc/ssl/etcd/ssl/node-control1.pem --key=/etc/ssl/etcd/ssl/node-control1-key.pem endpoint status --write-out=table # 查看etcd成员 ETCDCTL_API=3 etcdctl --endpoints 10.21.194.17:2379,10.21.194.18:2379,10.21.194.19:2379 --cacert=/etc/ssl/etcd/ssl/ca.pem --cert=/etc/ssl/etcd/ssl/node-control1.pem --key=/etc/ssl/etcd/ssl/node-control1-key.pem member list --write-out=table # 备份etcd数据目录 cp -r /var/lib/etcd /var/lib/etcd.bak # 通过快照去备份,频率大概2小时一备份 ETCDCTL_API=3 etcdctl --endpoints 10.21.194.17:2379,10.21.194.18:2379,10.21.194.19:2379 --cacert=/etc/ssl/etcd/ssl/ca.pem --cert=/etc/ssl/etcd/ssl/node-control.pem --key=/etc/ssl/etcd/ssl/node-control-key.pem snapshot save snapshot-xingguang.db
- 恢复
# 将备份的db分发到三个实例上,如果--name之前是etcd0,要指定为新的名称,同时etcd的数据目录也分别生成为m1.etcd,m2.etcd,m3.etcd,三个实例都要恢复 # 第一个实例 etcdctl snapshot --cacert=/etc/ssl/etcd/ssl/ca.pem --cert=/etc/ssl/etcd/ssl/node-control.pem --key=/etc/ssl/etcd/ssl/node-control-key.pem restore /root/xingguang/etcd/snapshot-xingguang.db --name m1 --initial-cluster m1=https://10.21.194.17:2380,m2=10.21.194.18:2380,m3=10.21.194.19:2380 --initial-cluster-token k8s_etcd --initial-advertise-peer-urls https://10.21.194.17:2380 # 第二个实例 etcdctl snapshot --cacert=/etc/ssl/etcd/ssl/ca.pem --cert=/etc/ssl/etcd/ssl/node-control.pem --key=/etc/ssl/etcd/ssl/node-control-key.pem restore /root/xingguang/etcd/snapshot-xingguang.db --name m2 --initial-cluster m1=https://10.21.194.17:2380,m2=10.21.194.18:2380,m3=10.21.194.19:2380 --initial-cluster-token k8s_etcd --initial-advertise-peer-urls https://10.21.194.18:2380 # 第三个实例 etcdctl snapshot --cacert=/etc/ssl/etcd/ssl/ca.pem --cert=/etc/ssl/etcd/ssl/node-control.pem --key=/etc/ssl/etcd/ssl/node-control-key.pem restore /root/xingguang/etcd/snapshot-xingguang.db --name m3 --initial-cluster m1=https://10.21.194.17:2380,m2=10.21.194.18:2380,m3=10.21.194.19:2380 --initial-cluster-token k8s_etcd --initial-advertise-peer-urls https://10.21.194.19:2380 # 恢复之后要修改etcd的启动命令,三个实例都要改数据目录和--name vim /lib/systemd/system/etcd.service ETCD_NAME m1 ETCD_DATA_DIR m1.etcd # 重启etcd
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)