簡介
最近在做eos數據落盤的項目,遇到了很多場景,都需要備份數據。所以,今天跟大家分享下備份節點數據的小工具。
前言
eos節點非正常退出,甚至節點升級,都會意外導致臟數據的產生,節點數據不得不重新同步。官方給的數據重新同步方法,是用下面的命令重啟節點:
nodeos --hard-replay
不過,實際使用起來會發現replay數據執行的非常慢,普通的全節點也要兩天時間才能完成重新同步。歸根結底,還是eos節點數據的驗證機制導致的慢。具體原因,大家可以看看這篇文章:痛苦的EOS數據同步,可能的EOS安全隱患。
簡而言之,eos之所有不能像以太坊那樣做到快速同步,是因為eos沒有將狀態數據生成merkle root,存儲上鏈。所以,eos重新同步數據時,節點不能信任其他節點,只能重新執行一遍交易,親自驗證交易狀態,當然會極大影響同步速度。另外,節點的同步只能從創世塊開始,不能按照時間分片,同步相當于重新計算一遍全網交易,速度可想而知。
數據同步
eos的節點數據是存儲在data目錄的,data目錄里有blocks和state目錄,分別存儲區塊信息和狀態信息:
mac os:~/Library/Application\ Support/eosio/nodeos/data
Linux:~/.local/share/eosio/nodeos/data
因為eos數據是按文件形式存儲的,常用的備份方法是將data目錄整個拷貝一份,當數據壞了時,啟用備用data目錄,則節點會從備用data目錄的高度開始,再同步之后的數據。這個方法簡單,但是普通的全節點,不開history-plugin時數據30G+,開啟history-plugin數據可達500G。簡單的cp操作處理備份,顯然需要數小時不等,還是太慢。
pitreos工具
pitreos是加拿大超級節點 eos canada 出品的節點數據備份工具,項目地址:pitreos。
它實現了大文件的快速備份和恢復。以下是30G大文件備份和恢復的實測效果,備份和恢復處理時間各約30s,極大的提升了效率。
pitreos安裝步驟
1. 需要安裝golang、設置gopath
2. cd $GOPATH/src/github.com/eoscanada
3. git clone?https://github.com/eoscanada/pitreos.git
4. cd $GOPATH/src/github.com/eoscanada/pitreos && go get -v ./... && go install -v
pitreos常用命令
備份:pitreos backup ./mydata -t <備份tag>。備份文件默認存在:$HOME/.pitreos/backups
恢復:pitreos -c restore <備份tag> ./mydata。
查詢tag:pitreos list
后記
本篇為大家介紹了eos數據備份工具的使用,由于最近在做eos數據落盤的改造,后面會為大家簡單介紹下這方面的內容,盡請期待!