如何對etcd進行數據的遷移(備份和恢復)?

1、背景說明

 

在項目上,有個環境,更改了etcd所在主機的IP地址,也就需要使用新的IP,作爲etcd對外提供服務和內部通信的IP地址。

 

這個時候,發現在etcd中存儲的信息中,有節點成員的IP地址的信息。

 

那在這種的情況,如何把原來那套etcd裏面的數據,遷移過來?

同時,在etcd使用新的IP地址之後,數據裏面存儲的是新節點的IP地址信息

 

2、數據備份

 

爲了達到數據遷移的目的,在遷移之前,對原來的etcd數據進行備份。

 

使用snapshot save命令

ETCDCTL_API=3 etcdctl \
        --endpoints "https://10.91.253.127:2379,https://10.91.253.128:2379,https://10.91.253.129:2379" \
        --cert /etc/etcd/ssl/etcd.pem  \
        --key /etc/etcd/ssl/etcd-key.pem \
        --cacert /etc/etcd/ssl/ca.crt \
        snapshot save 127data.backup  

 

參數說明:

--endpoints:是etcd節點的客戶端訪問地址,對於3個節點的集羣,連接任何的一個節點都可以,也可以同時指定3個節點的地址

--cert:客戶端證書

--key:客戶端的私鑰

--cacert:ca的證書。

127data.backup : 是快照的名字,可以執行的指定。

這裏面訪問etcd的證書,只要是經過ca證書籤名、認證的就可以。

 

執行備份之後,出現“Snapshot saved at...”

 

生成了這個備份文件

 

OK,這個就進行了數據的備份。

 

3、數據恢復

 

3.1、傳送備份文件

將上面備份的數據,傳送到新的etcd集羣裏。

 

注意:要分別傳送到每個節點上。

 

3.2、關閉新的集羣

 

在每個節點執行下面的動作,關閉新的集羣(如果集羣已經安裝好,並且已經正常運行了)

systemctl stop etcd

 

3.3、刪除現有數據

 

如果集羣已經運行了。

那麼,在數據目錄裏面,就會存有集羣節點的信息和初始化的數據,導入就會有問題。

 

所以,先刪除數據目錄。

數據目錄,通過service文件可看到

 

每個節點都要執行

rm -rf /var/lib/etcd

 

如果集羣是沒有啓動過,數據目錄還沒有生成,不需要執行這個命令。

 

3.4、恢復數據

 

使用snapshot restore命令,進行數據的恢復

 

在第一個節點執行(在備份文件所在的目錄)

ETCDCTL_API=3 etcdctl --data-dir="/var/lib/etcd" \
        --endpoints "https://10.192.121.202:2379,https://10.192.121.203:2379,https://10.192.121.209:2379" \
        --cert /etc/etcd/ssl/etcd.pem  \
        --key /etc/etcd/ssl/etcd-key.pem \
        --cacert /etc/etcd/ssl/ca.crt \
        snapshot restore 127data.backup \
        --name=etcd1 \
        --initial-cluster-token=etcd-cluster-0 \
        --initial-cluster=etcd1=https://10.192.121.202:2380,etcd2=https://10.192.121.203:2380,etcd3=https://10.192.121.209:2380 \
        --initial-advertise-peer-urls=https://10.192.121.202:2380  

 

參數說明:

--data-dir:數據目錄,也就是service中的數據目錄

--name: 當前節點的名字

--initial-cluster-token:集羣的名字

--initial-cluster:集羣節點的信息,列出所有的節點

--initial-advertise-peer-urls:當前節點的集羣的通信地址

其實,從這個命令可看出來,這個就是節點的初始化的過程,恢復的過程,用這個命令,就會把節點和集羣的信息,寫入到本地的數據中。

 

這些信息,都可以通過service文件中獲得

 

第二個節點執行

ETCDCTL_API=3 etcdctl --data-dir="/var/lib/etcd" \
        --endpoints "https://10.192.121.202:2379,https://10.192.121.203:2379,https://10.192.121.209:2379" \
        --cert /etc/etcd/ssl/etcd.pem  \
        --key /etc/etcd/ssl/etcd-key.pem \
        --cacert /etc/etcd/ssl/ca.crt \
        snapshot restore 127data.backup \
        --name=etcd2 \
        --initial-cluster-token=etcd-cluster-0 \
        --initial-cluster=etcd1=https://10.192.121.202:2380,etcd2=https://10.192.121.203:2380,etcd3=https://10.192.121.209:2380 \
        --initial-advertise-peer-urls=https://10.192.121.203:2380 

 

 

第三個節點執行

ETCDCTL_API=3 etcdctl --data-dir="/var/lib/etcd" \
        --endpoints "https://10.192.121.202:2379,https://10.192.121.203:2379,https://10.192.121.209:2379" \
        --cert /etc/etcd/ssl/etcd.pem  \
        --key /etc/etcd/ssl/etcd-key.pem \
        --cacert /etc/etcd/ssl/ca.crt \
        snapshot restore 127data.backup \
        --name=etcd3 \
        --initial-cluster-token=etcd-cluster-0 \
        --initial-cluster=etcd1=https://10.192.121.202:2380,etcd2=https://10.192.121.203:2380,etcd3=https://10.192.121.209:2380 \
        --initial-advertise-peer-urls=https://10.192.121.209:2380 

 

當在3個節點,都執行數據恢復。

 

3.5、啓動集羣

 

在每個節點,都執行下面的命令,啓動etcd實例

systemctl start etcd

 

啓動之後,查看集羣成員的信息

ETCDCTL_API=3 etcdctl \
  --endpoints "https://172.20.59.57:2379,https://172.20.59.238:2379,https://172.20.59.153:2379" \
  --cert /etc/ssl/etcd/ssl/member-nccztsjb-node-08.pem  \
  --key /etc/ssl/etcd/ssl/member-nccztsjb-node-08-key.pem \
  --cacert /etc/ssl/etcd/ssl/ca.pem \
   member list

 

查看集羣節點的健康情況

ETCDCTL_API=3 etcdctl \
  --endpoints "https://172.20.59.57:2379,https://172.20.59.238:2379,https://172.20.59.153:2379" \
  --cert /etc/ssl/etcd/ssl/member-nccztsjb-node-08.pem  \
  --key /etc/ssl/etcd/ssl/member-nccztsjb-node-08-key.pem \
  --cacert /etc/ssl/etcd/ssl/ca.pem \
  endpoint health

 

如果能夠正確的查詢,說明集羣是正常的。

 

查看節點的數據(查看所有的數據)

ETCDCTL_API=3 etcdctl \
  --endpoints "https://172.20.59.57:2379,https://172.20.59.238:2379,https://172.20.59.153:2379" \
  --cert /etc/ssl/etcd/ssl/member-nccztsjb-node-08.pem  \
  --key /etc/ssl/etcd/ssl/member-nccztsjb-node-08-key.pem \
  --cacert /etc/ssl/etcd/ssl/ca.pem \
  get --prefix ""

 

可以看到數據,證明數據恢復OK。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章