当前位置 博文首页 > 山间漫步人生路的博客:ETCD的备份以及数据恢复

    山间漫步人生路的博客:ETCD的备份以及数据恢复

    作者:[db:作者] 时间:2021-06-30 21:18

    Etcd备份
    备份一个etcd即可

    #!/usr/bin/env bashdate;
    ETCDCTL_API=3 /opt/etcd/bin/etcdctl \
    --cacert=/opt/etcd/ssl/ca.pem \
    --cert=/opt/etcd/ssl/server.pem \
    --key=/opt/etcd/ssl/server-key.pem \
    --endpoints="192.168.30.88:2379" \
    snapshot save /data/etcd_backup_dir/etcd-snapshot-`date +%Y%m%d`.db
    # 备份保留30天
    find /data/etcd_backup_dir/ -name *.db -mtime +30 -exec rm -f {} \;
    
    

    停止 Master 上 kube-apiserver 服务

     systemctl stop kube-apiserver 
    

    确认 kube-apiserver 服务是否停止

     ps -ef | grep kube-apiserver
    

    停止集群中所有 ETCD 服务

     systemctl stop etcd
    

    移除所有 ETCD 存储目录下数据

    $ mv /var/lib/etcd/default.etcd /var/lib/etcd/default.etcd.bak
    

    拷贝 ETCD 备份快照

    scp /data/etcd_backup_dir/etcd-snapshot-20210126.db root@192.168.111.62:/var/lib/etcd_backup/
    
    scp /data/etcd_backup_dir/etcd-snapshot-20210126.db root@192.168.111.61:/var/lib/etcd_backup/
    

    恢复备份 在每个节点上执行一次
    (此处的端口号是2380)

    #master上
    ETCDCTL_API=3 /opt/etcd/bin/etcdctl snapshot restore /data/etcd_backup_dir/etcd-snapshot-20210126.db \
      --name etcd-1 \
      --initial-cluster "etcd-1=https://192.168.111.60:2380,etcd-2=https://192.168.111.61:2380,etcd-3=https://192.168.111.62:2380" \
      --initial-cluster-token etcd-cluster \
      --initial-advertise-peer-urls https://192.168.111.60:2380 \
      --data-dir=/var/lib/etcd/default.etcd
    
    #node1上
     ETCDCTL_API=3 /opt/etcd/bin/etcdctl snapshot restore /var/lib/etcd_backup/etcd-snapshot-20210126.db \
      --name etcd-2 \
      --initial-cluster "etcd-1=https://192.168.111.60:2380,etcd-2=https://192.168.111.61:2380,etcd-3=https://192.168.111.62:2380" \
      --initial-cluster-token etcd-cluster \
      --initial-advertise-peer-urls https://192.168.111.61:2380 \
      --data-dir=/var/lib/etcd/default.etcd
    
    #node2上
     ETCDCTL_API=3 /opt/etcd/bin/etcdctl snapshot restore /var/lib/etcd_backup/etcd-snapshot-20210126.db \
      --name etcd-3 \
      --initial-cluster "etcd-1=https://192.168.111.60:2380,etcd-2=https://192.168.111.61:2380,etcd-3=https://192.168.111.62:2380" \
      --initial-cluster-token etcd-cluster \
      --initial-advertise-peer-urls https://192.168.111.62:2380 \
      --data-dir=/var/lib/etcd/default.etcd
    

    启动ETCD

    systemctl start etcd
    

    三台 ETCD 启动完成,检查 ETCD 集群状态
    (此处的端口号是2379)

    ETCDCTL_API=3 /opt/etcd/bin/etcdctl --cacert=/opt/etcd/ssl/ca.pem --cert=/opt/etcd/ssl/server.pem --key=/opt/etcd/ssl/server-key.pem --endpoints=https://192.168.111.60:2379,https://192.168.111.61:2379,https://192.168.111.62:2379 endpoint health
    

    三台 ETCD 全部健康,分别到每台 Master 启动 kube-apiserver

    $ systemctl start kube-apiserver
    

    检查 Kubernetes 集群是否恢复正常

    $ kubectl get cs
    

    Kubernetes 集群备份主要是备份 ETCD 集群。而恢复时,主要考虑恢复整个顺序:
    停止kube-apiserver --> 停止ETCD --> 恢复数据 --> 启动ETCD --> 启动kube-apiserver