网站建设电话销售技巧和话术,嘉兴网站建设一薇,郑州铭功路网站建设,广东建数网络科技有限公司etcd是一个分布式k-v数据库#xff0c;在kubernetes中使用其管理集群的元数据。这里介绍etcd集群数据的备份和数据恢复的方法和步骤。快照定期备份crontab定期执行备份脚本#xff0c;每半小时备份一次#xff0c;本地、异地都备份(暂定#xff1a;本地备份保留最近10个备份…etcd是一个分布式k-v数据库在kubernetes中使用其管理集群的元数据。这里介绍etcd集群数据的备份和数据恢复的方法和步骤。快照定期备份crontab定期执行备份脚本每半小时备份一次本地、异地都备份(暂定本地备份保留最近10个备份异地保留一个月的备份)#!/bin/bash#ETCDCTL_PATH/usr/etcd/bin/etcdctlENDPOINTS1.1.1.1:2379,1.1.1.2:2379,1.1.1.3:2379BACKUP_DIR/home/apps/backupDATEdate %Y%m%d-%H%M%S[ ! -d $BACKUP_DIR ] mkdir -p $BACKUP_DIRexport ETCDCTL_API3;$ETCDCTL_PATH --endpoints$ENDPOINTS snapshot save $BACKUP_DIR/snapshot-$DATE\.dbcd $BACKUP_DIR;ls -lt $BACKUP_DIR|awk {if(NR11){print rm -rf $9}}|sh镜像集群备份提前准备部署好镜像集群实时全量数据同步nohup etcdctl make-mirror /apps/logs/etcdmirror.log /apps/logs/etcdmirror.log会保存已经同步的key数量每30s打印一次定期数据同步crontab定期数据同步为避免数据遭到误删除清空造成灾难性影响可恢复上一个同步周期之前的数据#!/bin/bash#ETCDCTL_PATH/apps/svr/etcd/bin/etcdctlENDPOINTS1.1.1.1:2379,1.1.1.2:2379,1.1.1.3:2379DEST_ENDPOINT1.1.1.1:2389CMD$ETCDCTL_PATH make-mirror --endpoints$ENDPOINTS $DEST_ENDPOINTBaseName$(basename $BASH_SOURCE)export ETCDCTL_API3$CMD echo $! /tmp/$BaseName\.pidsleep 90kill cat /tmp/$BaseName\.pidetcd集群恢复etcd集群与zk集群相似建议采用基数设备来搭建集群可用性为(N-1)/2假设集群数量N是3台设备可最多可故障1台设备而不影响集群使用。leader故障当leader故障时etcd集群会自动选择一个新leader由于失败检测模型是基于超时的(heartbeat-interval)因此选举新leader需要大约选举超时。在leader选举期间集群不能处理任何写入操作。在选举期间发送的写入请求排队等待处理直到选出新的leader。已经发送给old leader但尚未提交的文字可能会丢失。新leader有权重写old leader的任何未提交的条目。从用户的角度来看一些写入请求可能会超时但是没有提交的写入会丢失。查看现时集群情况[rootETCD-CLUSTER-001 bin]# export ETCDCTL_API3;./etcdctl --write-outtable --endpoints10.201.46.112:2379,10.201.46.113:2379,10.201.46.114:2379 endpoint status------------------------------------------------------------------------------------------| ENDPOINT | ID | VERSION | DB SIZE | IS LEADER | RAFT TERM | RAFT INDEX |------------------------------------------------------------------------------------------| 10.201.46.112:2379 | fd86741fb271523a | 3.1.10 | 25 kB | false | 2 | 10 || 10.201.46.113:2379 | fe2dd3624258de7 | 3.1.10 | 25 kB | false | 2 | 10 || 10.201.46.114:2379 | c649fd5192da5ca1 | 3.1.10 | 25 kB | true | 2 | 10 |------------------------------------------------------------------------------------------[rootETCD-CLUSTER-001 bin]# export ETCDCTL_API3;./etcdctl put hello nihaoOK停止leader查看日志在第3个选举周期的时候已经选举了新的leader集群可以正常工作[rootETCD-CLUSTER-001 bin]# export ETCDCTL_API3;./etcdctl get hello nihaohellonihaofollower故障查看现时集群情况停掉一台followe[rootETCD-CLUSTER-003 ~]# sh /apps/sh/etcd.sh stopStopping etcd: [ OK ]集群正常工作[rootETCD-CLUSTER-001 bin]# export ETCDCTL_API3;./etcdctl get hello nihaohellonihao集群故障恢复为了从灾难性故障中恢复etcd v3提供了快照和恢复功能以便在没有v3密钥数据丢失的情况下重新创建群集.要恢复集群只需要一个快照“db”文件。集群恢复将etcdctl snapshot restore创建新的etcd数据目录; 所有成员应该使用相同的快照进行恢复。恢复会覆盖某些快照元数据(特别是成员ID和群集ID); 该成员失去了其以前的身份。此元数据覆盖可防止新成员无意中加入现有群集。因此为了从快照启动集群还原必须启动新的逻辑集群。在还原时可以选择验证快照完整性。如果使用快照etcdctl snapshot save它将具有通过检查的完整性散列etcdctl snapshot restore。如果快照是从数据目录复制的(配置文件中的data-dir)则不存在完整性哈希并且只能使用恢复--skip-hash-check。保存快照键空间[rootETCD-CLUSTER-001 bin]# export ETCDCTL_API3;./etcdctl --endpoints10.201.46.112:2379,10.201.46.113:2379,10.201.46.114:2379 snapshot save ~/.snapshot.dbSnapshot saved at /root/.snapshot.db恢复快照信息每台机器上执行,$ etcdctl snapshot restore snapshot.db \--name ETCD-CLUSTER-001 \--initial-cluster ETCD-CLUSTER-001http://10.201.46.112:2380,ETCD-CLUSTER-002http://10.201.46.113:2380,ETCD-CLUSTER-003http://10.201.46.114:2380 \--initial-advertise-peer-urls http://10.201.46.112:2380$ etcdctl snapshot restore snapshot.db \--name ETCD-CLUSTER-002 \--initial-cluster ETCD-CLUSTER-001http://10.201.46.112:2380,ETCD-CLUSTER-002http://10.201.46.113:2380,ETCD-CLUSTER-003http://10.201.46.114:2380 \--initial-advertise-peer-urls http://10.201.46.113:2380$ etcdctl snapshot restore snapshot.db \--name ETCD-CLUSTER-003 \--initial-cluster ETCD-CLUSTER-001http://10.201.46.112:2380,ETCD-CLUSTER-002http://10.201.46.113:2380,ETCD-CLUSTER-003http://10.201.46.114:2380 \--initial-advertise-peer-urls http://10.201.46.114:2380启动etcd机器sudo sh /apps/sh/etcd.sh start集群维护剔除、新增成员查看现有成员[rootETCD-CLUSTER-001 etcd-v3.2.17-linux-amd64]# export ETCDCTL_API3;/apps/svr/etcd/bin/etcdctl --write-outtable --endpoints1.1.1.1:2379,1.1.1.2:2379,1.1.1.3:2379 member list-----------------------------------------------------------------------------------------------| ID | STATUS | NAME | PEER ADDRS | CLIENT ADDRS |-----------------------------------------------------------------------------------------------| 28c987fd1ef634f8 | started | ETCD-CLUSTER-003 | http://1.1.1.3:2380 | http://localhost:2379 || 635b8eabdf3280ef | started | ETCD-CLUSTER-002 | http://1.1.1.2:2380 | http://localhost:2379 || e9a434659e36d3bc | started | ETCD-CLUSTER-001 | http://1.1.1.1:2380 | http://localhost:2379 |-----------------------------------------------------------------------------------------------剔除成员[rootETCD-CLUSTER-001 etcd-v3.2.17-linux-amd64]# export ETCDCTL_API3;/apps/svr/etcd/bin/etcdctl --endpoints1.1.1.1:2379,1.1.1.2:2379,1.1.1.3:2379 member remove e9a434659e36d3bcMember e9a434659e36d3bc removed from cluster 7055108fef63cdab[rootETCD-CLUSTER-001 etcd-v3.2.17-linux-amd64]# export ETCDCTL_API3;/apps/svr/etcd/bin/etcdctl --write-outtable --endpoints1.1.1.1:2379,1.1.1.2:2379,1.1.1.3:2379 member list-----------------------------------------------------------------------------------------------| ID | STATUS | NAME | PEER ADDRS | CLIENT ADDRS |-----------------------------------------------------------------------------------------------| 28c987fd1ef634f8 | started | ETCD-CLUSTER-003 | http://1.1.1.3:2380 | http://localhost:2379 || 635b8eabdf3280ef | started | ETCD-CLUSTER-002 | http://1.1.1.2:2380 | http://localhost:2379 |-----------------------------------------------------------------------------------------------新增成员至集群注意步骤顺序[rootETCD-CLUSTER-001 ]# export ETCDCTL_API3;/apps/svr/etcd/bin/etcdctl --endpoints1.1.1.2:2379,1.1.1.3:2379 member add ETCD-CLUSTER-001 --peer-urlshttp://1.1.1.1:2380Member 433fd69a958b8432 added to cluster 7055108fef63cdabETCD_NAMEETCD-CLUSTER-001ETCD_INITIAL_CLUSTERETCD-CLUSTER-003http://1.1.1.3:2380,ETCD-CLUSTER-001http://1.1.1.1:2380,ETCD-CLUSTER-002http://1.1.1.2:2380ETCD_INITIAL_CLUSTER_STATEexisting[rootETCD-CLUSTER-001 ]# export ETCDCTL_API3;/apps/svr/etcd/bin/etcdctl --write-outtable --endpoints1.1.1.2:2379,1.1.1.3:2379 member list-------------------------------------------------------------------------------------------------| ID | STATUS | NAME | PEER ADDRS | CLIENT ADDRS |-------------------------------------------------------------------------------------------------| 28c987fd1ef634f8 | started | ETCD-CLUSTER-003 | http://1.1.1.3:2380 | http://localhost:2379 || 433fd69a958b8432 | unstarted | | http://1.1.1.1:2380 | || 635b8eabdf3280ef | started | ETCD-CLUSTER-002 | http://1.1.1.2:2380 | http://localhost:2379 |-------------------------------------------------------------------------------------------------删除新增成员旧数据目录并且启动新增成员etcd服务加入集群时要改下配置文件把初始化集群状态由new改成existing[rootETCD-CLUSTER-001 ~]# vim /apps/conf/etcd/etcd.confinitial-cluster-state: existing[rootETCD-CLUSTER-001 ~]# export ETCDCTL_API3;/apps/svr/etcd/bin/etcdctl --write-outtable --endpoints1.1.1.2:2379,1.1.1.3:2379 member list-----------------------------------------------------------------------------------------------| ID | STATUS | NAME | PEER ADDRS | CLIENT ADDRS |-----------------------------------------------------------------------------------------------| 28c987fd1ef634f8 | started | ETCD-CLUSTER-003 | http://1.1.1.3:2380 | http://localhost:2379 || 433fd69a958b8432 | started | ETCD-CLUSTER-001 | http://1.1.1.1:2380 | http://localhost:2379 || 635b8eabdf3280ef | started | ETCD-CLUSTER-002 | http://1.1.1.2:2380 | http://localhost:2379 |-----------------------------------------------------------------------------------------------[rootETCD-CLUSTER-001 ~]# export ETCDCTL_API3;/apps/svr/etcd/bin/etcdctl --write-outtable --endpoints1.1.1.1:2379,1.1.1.2:2379,1.1.1.3:2379 endpoint status------------------------------------------------------------------------------------------| ENDPOINT | ID | VERSION | DB SIZE | IS LEADER | RAFT TERM | RAFT INDEX |------------------------------------------------------------------------------------------| 1.1.1.1:2379 | 433fd69a958b8432 | 3.1.10 | 98 kB | false | 3 | 13 || 1.1.1.2:2379 | 635b8eabdf3280ef | 3.1.10 | 98 kB | false | 3 | 13 || 1.1.1.3:2379 | 28c987fd1ef634f8 | 3.1.10 | 98 kB | true | 3 | 13 |------------------------------------------------------------------------------------------etcd v2数据迁移到v3版本# 迁移前需要逐台服务停止sh /apps/sh/etcd.sh stop# 迁移数据,数据目录根据实际填写export ETCDCTL_API3etcdctl --endpoints$ENDPOINT migrate --data-dirdefault.etcd --wal-dirdefault.etcd/member/wal# 逐台服务启动sh /apps/sh/etcd.sh start# 检查确认数据已经迁移export ETCDCTL_API3;etcdctl --endpoints$ENDPOINTS get /foo快照条目数量调整--snapshot-count指定有多少事务(transaction)被提交时触发截取快照保存到磁盘在v3.2之前的版本默认的参数是10000条3.2之后调整为100000条这个条目数量不能配置过高或者过低过低会导致频繁的io压力过高会导致占用高内存以及会导致etcd GC过慢。建议设置为10W-20W条。历史数据压缩key空间长期的时候如果没有做压缩清理到达上限的阈值时集群会处于一个只能删除和读的状态无法进行写操作。因此对集群的历史日志做一个压缩清理是很有必要。数据压缩并不是清理现有数据只是对数据的历史版本进行清理清理后数据的历史版本将不能访问但不会影响现有最新数据的访问。手动压缩使用客户端工具进行清理#压缩清理revision为10之前的历史数据[appstest ~]$ export ETCDCTL_API3;/apps/svr/etcd/bin/etcdctl compaction 10compacted revision 10#访问revision10之前的数据会提示已经不存在[appstest ~]$ export ETCDCTL_API3;/apps/svr/etcd/bin/etcdctl get aa --rev9Error: etcdserver: mvcc: required revision has been compacted自动压缩使用--auto-compaction-retention1表示每小时进行一次数据压缩。碎片清理进行compaction操作之后旧的revision被压缩会产生内部的碎片内部碎片是指空闲状态的能被后端使用但是仍然消耗存储空间的磁盘空间。去碎片化实际上是将存储空间还给文件系统。[appstest ~]$ etcdctl defrag