wyh-l6

导航

etcd的备份与恢复

etcd是coreos团队在2013年6月发起的开源项目,现在在githab上托管
etcd目标构建一个高可用的分布式键值数据库
 
etcd具有以下属性:
    完全复制:集群中的每个节点都可以使用完整的存档
    高可用性:etcd可用于避免硬件的单点故障或网络问题
    一致性:每次读取都会返回跨多主机的最新写入
    简单:包括一个定义料号、面向多用户的API
    安全:实现了带有可选的客户端证书身份验证自动化TLS
    快速:每秒10000次写入的基准速度
    可靠:使用Raft你发su实现了存储的合理分布Etcd的工作原理
 
etcd集群:复制式集群,竟像式集群,坏掉集群一半以内的节点没有问题
 
etcd.service文件说明:
/us/local/bin/etcd:二进制文件路径
--name:节点名称,集群内节点名称不能重复
--initial-advertise-peer-urls:集群间会通告,此为通告地址,声明节点端口,2380集群中使用,2379客户端使用
--listen-client-urls:给客户端使用的
--initial-cluster-token:初始化集群token,集群内的节点token需要一致
--initial-cluster:集群中所有的节点name需要写进去,逗号间隔
--snapshot-count:快照的数量上限
--auto-compaction-retention=1:第一次压缩等待1小时,以后每次1小时%10=6分钟压缩一次
--auto-compaction-mode=periodic:模式是周期性压缩
--max-request-bytes:每次请求的最大字节数,默认一个key最大为1.5M
--quota-backend-bytes:存储空间大小限制,超过限制后会有警告
 
检测本机心跳:
etcdctl endpoint health
 
集群节点心跳检测:
export node_etcd="192.168.213.11 192.168.213.12 192.168.213.13"; for i in $node_etcd; do ETCDCTL_API=3 /usr/local/bin/etcdctl --endpoints=https://${i}:2379 --cacert=/etc/kubernetes/ssl/ca.pem --cert=/etc/kubernetes/ssl/etcd.pem --key=/etc/kubernetes/ssl/etcd-key.pem endpoint health; done
 
以表格的形式输出成员
/usr/local/bin/etcdctl --write-out=table member list --endpoints=https://192.168.213.11:2379 --cacert=/etc/kubernetes/ssl/ca.pem --cert=/etc/kubernetes/ssl/etcd.pem --key=/etc/kubernetes/ssl/etcd-key.pem 
 
集群碎片整理:
ETCDCTL_API=3 /usr/local/bin/etcdctl defrag --cluster --endpoints=https://192.168.213.11:2379 --cacert=/etc/kubernetes/ssl/ca.pem --cert=/etc/kubernetes/ssl/etcd.pem --key=/etc/kubernetes/ssl/etcd-key.pem 
 
表格输出集群成员详细信息
export node_etcd="192.168.213.11 192.168.213.12 192.168.213.13"; for i in $node_etcd; do ETCDCTL_API=3 /usr/local/bin/etcdctl --endpoints=https://${i}:2379 --cacert=/etc/kubernetes/ssl/ca.pem --cert=/etc/kubernetes/ssl/etcd.pem --key=/etc/kubernetes/ssl/etcd-key.pem --write-out=table endpoint status; done
 
etcd增删改查:
查询:
    etcdctl get / --keys-only --prefix
        查看所有的key,只看前缀
写:
    etcdctl put /test_key "192.168.213.11"
        在根下创建一个test_key,值为192.168.213.11
删除:
    etcdctl del /test_key
        删除根下的test_key数据,此操作绕过apiserver,慎用!!
 
watch机制:基于不断监看数据,发生变化就主动触发客户端通知,watch机制支持某一个key,也支持一个范围
  
  
  
    
 
#####################################快照备份&恢复#########################################
etcdctl snapshot save /opt/etcd_test.db #快照备份
######快照恢复#######
#--data-dir指定的恢复目录可以为空,但是一定不能有数据
##################实战演练##################
创建三个pod
kubectl run net-test1 --image=centos:7.9.2009 sleep 10000000
kubectl run net-test2 --image=centos:7.9.2009 sleep 10000000
kubectl run net-test3 --image=centos:7.9.2009 sleep 10000000
etcdctl snapshot save /opt/etcd_test_new.db #创建快照
kubectl delete pod net-test3
systemctl stop etcd
tar -zcvf /home/wyh/etcd.tar.gz /var/lib/etcd #备份原目录
rm -rf /var/lib/etcd #删除原目录
etcdctl snapshot restore /opt/etcd_save_new.db  --data-dir=/var/lib/etcd #快照还原
 
##########################################快照备份恢复结束########################################
 
######################################使用kubeasz备份并恢复#################################
cd /etc/kubeasz
./ezctl backup k8s-cluster1
#执行成功后备份文件会放在/etc/kubeasz/clusters/k8s-cluster1/backup(这个备份不单单备份etcd)
#产生两个文件snapshot.db(如果此文件存在再次备份,会更新掉次文件,恢复数据也是根据此文件恢复)和snapshot_202207290935.db(按照你备份生成时间)
./ezctl restore k8s-cluster1 #根据/etc/kubeasz/clusters/k8s-cluster1/backup/snapshot.db恢复数据
 
##比较保守的一种方法
######################################kubeasz备份恢复完成####################################
 
 
 
 
 
 
 
 
 
 
 
 
 

posted on 2022-08-03 14:35  IT老六  阅读(682)  评论(0编辑  收藏  举报