cassandra streaming 操作(翻譯2)

oxoxooxx發表於2011-09-13
請求(Request)
1. 目標節點編譯一個它需要從其他節點獲取的範圍列表。
2. 目標節點傳送一個包含key範圍列表的StreamRequestMessage訊息給源節點。
3. 源節點準備指定範圍的sstable 檔案,並建立暫掛檔案。
4. 源節點流傳輸列表中俄第一個檔案。第一個流的頭部包含當前流的資訊以及剩餘的請求範圍內的暫掛檔案列表。
5. 目標節點接收流並寫入到磁碟,產生相應的日誌資訊"Streaming added org.apache.cassandra.io.sstable.SSTableReader(path='/var/lib/cassandra/data/Keyspace1/Standard1-e-1-Data.db')".
6. 目標節點根據此指引一次請求一個後續檔案。如果發生錯誤,則重複請求相同的檔案,否則繼續直到完成。
7. 源節點流傳輸每一個請求的檔案。因為檔案已經進行anti-compact,所以僅僅流傳輸到目標節點。

流傳輸呼叫(Streaming Invocations)
Cassandra節點間流輸出會在如下場景中用到:
1. Bootstrapping - 在bootstrap過程中,一個節點向其他節點請求key範圍,呼叫Stream Request.
2. Repair - 逆熵服務透過比較Merkle Tree進行修復操作,在這個過程的最後一步就是按照上面的流程順序將衝突的key範圍傳送到其他節點,或向其他節點請求衝突的key範圍。
3. Restore Replica - StorageService處理Stream request。
4. Un-bootstrap - 在節點退出或移動過程,呼叫un-bootstrap將節點範圍傳送到其他節點。此過程只呼叫傳輸(Transfer)操作

監控(Monitoring)
Anti-compaction操作既進行request又進行transfer操作,所以耗費時間最長,可以使用org.apache.cassandra.db.CompactionManager這個mbean進行監控。
流傳輸的監控可以同時在源節點和目標節點呼叫MBEAN org.apache.cassandra.streaming.StreamingService .狀態屬性提供了一個簡單的標示表明進行流輸出節點的正在進行的處理。getOutgoingFiles(host) 和 getIncomingFiles(host)兩個操作返回一個字串列表描述正傳入和傳出檔案的狀態。每個字串的格式如下:
[path to file] [bytes sent/received]/[file size]
如果認為叢集中流操作花費了太多時間,你首先要做的是檢查StreamSources 或者StreamDestinations以明確哪些節點在傳輸檔案。使用主機作為getOutgoingFiles() 或 getIncomingFiles()的引數檢查問題主機每個檔案的狀態。流傳輸被分割成32M大小的的片段,所以應該每個幾秒中重新整理檔案狀態檢查傳送/接收值是否改變。如果一直沒變或者比預期的要慢很多,那麼表明存在問題。
流狀態可以使用下面的方式監控:
nodetool -h streams[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23937368/viewspace-1054982/,如需轉載,請註明出處,否則將追究法律責任。

相關文章