操作系統 : CentOS7.3.1611_x64 go語言版本:1.8.3 linux/amd64 InfluxDB版本:1.1.0 服務模塊介紹 源碼路徑: github.com/influxdata/influxdb/services/snapshotter service.go : snap ...
操作系統 : CentOS7.3.1611_x64
go語言版本:1.8.3 linux/amd64
InfluxDB版本:1.1.0
服務模塊介紹
源碼路徑: github.com/influxdata/influxdb/services/snapshotter
service.go : snapshotter服務的實現
service_test.go : snapshotter服務的測試代碼
client.go : 提供snapshotter服務的客戶端訪問API
快照服務主要提供如下功能:
- TSM碎片文件備份
- Meta文件備份
擁有獨特的標記( BackupMagicHeader ,針對meta文件): 0x59590101
- 資料庫信息備份
- 資料庫存儲策略信息備份
Service結構
該結構所在文件 :service.go
snapshotter主服務結構如下:
type Service struct { wg sync.WaitGroup err chan error Node *influxdb.Node MetaClient interface { encoding.BinaryMarshaler Database(name string) *meta.DatabaseInfo } TSDBStore *tsdb.Store Listener net.Listener Logger *log.Logger }
解釋如下:
- wg
使用鎖機制進行數據同步
服務收到連接請求後,首先計數器加1,然後在獨立的goroutine中處理該連接,處理完成時計數器減1;
調用Close介面時,wg進行阻塞操作,保證服務關閉時所有任務都完成。
- err
error通道,暫時不知道怎麼用。
- Node
InfluxDB節點信息,集群相關功能。
- MetaClient
Meta服務客戶端介面,獲取Meta的信息,用於備份Meta文件、資料庫信息、資料庫存儲策略。
- TSDBStore
InfluxDB存儲引擎指針,用於備份資料庫的TSM碎片文件。
- Listener
socket對象,用於監聽服務埠、接收客戶端放來的請求。
- Logger
日誌指針,用於記錄快照服務在運行過程中產生的日誌。
Request結構
該結構所在文件 :service.go
snapshotter客戶端請求的數據結構如下:
type Request struct { Type RequestType Database string RetentionPolicy string ShardID uint64 Since time.Time }
解釋如下:
- Type
用於區別數據備份的類型。
- Database
Meta文件備份、資料庫信息備份、存儲策略備份時使用,用於指定需要備份的資料庫名稱。
- RetentionPolicy
存儲策略備份時使用,用於指定需要備份的資料庫存儲策略的名稱。
- ShardID
TSM碎片文件備份時使用,用於指定碎片ID。
- Since
TSM碎片文件備份時使用,用於指定起始時間。
Response結構
結構如下:
type Response struct { Paths []string }
該服務在InfluxDB中的應用
該服務在InfluxDB主伺服器程式(influxd)中使用,具體如下:
[root@localhost influxdb]# grep "github.com/influxdata/influxdb/services/snapshotter" * -rn cmd/influxd/backup/backup.go:18: "github.com/influxdata/influxdb/services/snapshotter" cmd/influxd/restore/restore.go:20: "github.com/influxdata/influxdb/services/snapshotter" cmd/influxd/run/server.go:28: "github.com/influxdata/influxdb/services/snapshotter" services/snapshotter/service.go:1:package snapshotter // import "github.com/influxdata/influxdb/services/snapshotter" [root@localhost influxdb]#
1、服務流程
在 Server->Open 中通過 Server->appendSnapshotterService 載入SnapshotterService。
通過 Server->SnapshotterService 對外提供服務。
2、備份流程
備份流程如下:
通過控制台獲取用戶指令;
連接SnapshotterService,併發送請求;
執行備份過程;
snapshotter在該流程中充當SnapshotterService的客戶端,負責轉發請求及獲取響應。
3、恢復流程
snapshotter在恢復流程中主要驗證下 BackupMagicHeader 是否正確。
好,就這些了,希望對你有幫助。
本文github地址:
歡迎補充