Cassandra1.2文档学习(2)——节点间通信协议之gossip协议
參考文檔:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/architecture/architectureGossipAbout_c.html#concept_ds_elb_tgd_fk
一、什么是gossip
Cassandra使用一個名為gossip的協議去獲得集群中其他節點的位置和狀態信息。Gossip是一個點對點的通信協議,在這個協議中,節點之間定期交換狀態信息。Gossip協議每隔一秒運行一次,節點和不超過的三個節點交換信息,因此所有的節點能夠很快知道集群中其他節點的信息。每一個gossip信息有一個版本,因此在信息的交換中,舊的信息會被新的狀態信息覆蓋。
為防止gossip通信的發生隔離,保障數據的一致性和完整性,在一個節點中的所有節點應當使用相同的Seed列表(Seed節點負責和集群中的其他節點通訊并獲取信息,Cassandra讀取和寫入數據都是向Seed節點發出操作指令,這些節點應該相對穩定)。當節點第一次啟動時Seed列表信息非常重要。
二、配置gossip
當一個節點啟動的時候,它會去讀取配置文件cassandra.yaml從而決定它屬于那個集群,從那個節點獲得集群中其他節點的信息以及一些其他的參數。
具體的配置參數如下
cluster_name
這個節點屬于的Cassandra集群的名字,集群中的每一個節點的集群名字都應該是一樣的。
listen_address
當前節點的ip地址或者主機名,使得其他節點能夠聯系到這個節點。這個地址應該是公共地址,而不是localhost。
seed_provider
通過逗號分隔的seed節點的主機名或ip地址。每個節點的此選項應該是一致的。在包含多個數據中心的集群中,每個數據中心都應該有一個seed節點。
storage_port
節點間通信端口(默認為7000)。集群中每個節點的配置應該是一樣的。
initial_token
這個參數使用在被一個節點只有一個token的架構下,在一致性哈希環中每個節點都有一段連續的范圍,有token表示。當Cassandra第一次啟動的時候,會從該配置項中讀取,如果唯恐,將隨機生成一個token。如果Cassandra不是第一次啟動,將從系統表中讀取該Token值。
num_tokens
在虛擬節點的時候使用。定義隨機分配到該節點的token的數量。原來情況下,一個節點只有一個token,很容易造成數據都在一個節點上的情況,采用虛擬節點,每個節點有多個token,可以進行平均。
三、刪除節點的gossip歷史信息
gossip信息一直保留在本地,這樣當節點重啟的時候可以無需等待gossip的交互。
在某些情況下(例如節點IP地址發生改變),你可能希望清除gossip歷史信息。
方式:
編輯cassandra-env.sh文件:
加入以下一行
-Dcassandra.load_ring_state= false
四、故障檢測和恢復
故障檢測是通過分析gossip狀態信息和歷史信息,判斷系統中其他節點是否宕機的一種方法。Cassandra通過這種方式來避免將客戶端請求轉發到已經掛掉的節點。通過動態告密者(dynamic snitch),Cassandra還可以避免將請求轉發到那些那些雖然存活但是性能特別差的節點。
gossip從直接或者間接節點中跟蹤信息,Cassandra通過一個權責監測機制來計算每一個節點的閥值,綜合考慮網絡情況、工作負載和其他情況,而不是采用一個固定的閥值來判斷是否是一個失敗的節點。在gossip交互中,每個節點維護一個滑動的窗口關于集群中其他節點gossip到達的時間。在Cassandra中,可以通過配置 phi_convict_threshold屬性值來調整故障檢測的敏感度。大多數情況下可以使用默認值,但在Amazon EC2平臺中請將數值增加到12。
導致節點失敗的原因有很多種,比如硬件出錯和網絡中斷。節點中斷通常短暫但可以持續更長的時間間隔。一個節點的中斷很少意味著從集群永久離開,因此不會自動的被從環中移除。其他節點會周期性的給它發gossip信息已查看這個節點是否恢復正常。要想永久的改變集群中節點的成員信息,管理員必須采用nodetool工具顯示地增加或移除節點。
當一個節點從中斷中回來的時候,它可能會錯失一些本來應該寫入這個節點的數據。當故障檢測機制標明一個節點是掛掉的,錯失的寫入會被存儲在其他節點,前提是 hinted handoff機制被打開。如果節點的宕機時間超過max_hint_window_in_ms (默認3個小時),hint信息也不會被存儲。因為節點的掛掉可能會導致存儲為發送的hint信息,你應當在節點被發現掛掉一段時間后運行恢復。此外,你應當在所有節點上周期性的運行nodetool repair 以確保數據的一致性。
總結
以上是生活随笔為你收集整理的Cassandra1.2文档学习(2)——节点间通信协议之gossip协议的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hibernate 双向一对多 关联在多
- 下一篇: 农业银行通用k宝蓝牙版怎么用