...
Code Block | ||||
---|---|---|---|---|
| ||||
$ etcdctl snapshot save <path>/<snapshot> --endpoints=<endpoint>:<port> # Instead of <endpoint> you can substitute a hostname or an IP $ etcdctl snapshot save snapshot.db --endpoints=etcd1:2379 $ etcdctl snapshot save snapshot.db --endpoints=192.168.100.88:2379 # View that the snapshot was successful $ etcdctl snapshot status snapshot.db --write-out=table +----------+----------+------------+------------+ | HASH | REVISION | TOTAL KEYS | TOTAL SIZE | +----------+----------+------------+------------+ | b89543b8 | 40881777 | 54340 | 106 MB | +----------+----------+------------+------------+ |
To restore a cluster, all that is needed is a single snapshot db
file. A cluster restore with etcdctl snapshot restore
creates new etcd data directories; all members should restore using the same snapshot. Restoring overwrites some snapshot metadata (specifically, the member ID and cluster ID); the member loses its former identity. Therefore in order to start a cluster from a snapshot, the restore must start a new logical cluster.
Now we will use the snapshot backup to restore etcd as shown below (if you want to use a specific data directory for the restore, you can add the location using the --data-dir
flag). The restore
command generates the member
directory, which will be pasted into the path where the etcd node data are stored (the default path is /var/lib/etcd/
). If you want to use a specific data directory for the restore, you can add the location using the --data-dir
flag, but the destination directory must be empty and obviously have write permissions.
Code Block | ||||
---|---|---|---|---|
| ||||
# TheRepeat destinationthis directorycommand mustfor beall emptyetcd andmembers etcdctl obviouslysnapshot have write permissions $ etcdctlrestore <path>/<snapshot> [--data-dir <data_dir>] snapshot restore <path>/<snapshot> $ etcdctl--name etcd1 --initial-cluster etcd1=https://<IP1>:2380,etcd2=https://<IP2>:2380,etcd3=https://<IP3>:2380 --initial-cluster-token <token> --initial-advertise-peer-urls https://<IP1>:2380 etcdctl snapshot restore snapshot.db --data-dir /tmp/snap_dir snapshot restore snapshot.db --name etcd1 --initial-cluster etcd1=https://etcd1:2380,etcd2=https://etcd2:2380,etcd3=https://etcd3:2380 --initial-cluster-token k8s_etcd --initial-advertise-peer-urls https://etcd1:2380 # Paste the snapshot into the path where the etcd node data are stored $ cp -r /tmp/snap_dir/member /var/lib/etcd/ |
...