1. 程式人生 > 其它 >redis叢集節點間的內部通訊機制

redis叢集節點間的內部通訊機制

一、節點間的內部通訊機制

1、基礎通訊原理

(1)redis cluster節點間採取gossip協議進行通訊

跟集中式不同,不是將叢集元資料(節點資訊,故障,等等)集中儲存在莫個節點上,而是互相之間不斷通訊,保持整個叢集所有節點的資料是完整的

集中式:好處在於,元資料的更新和讀取,時效性非常號,一旦元資料出現了變更,立即就更新到集中式的儲存中,其他節點讀取的時候立即就可以感知道;不好在於,所有的元資料跟新壓力全部集中在一個地方,可能會導致元資料的儲存壓力

gossip:好處在於,元資料的更新比較分散,不是集中在一個地方,更新會陸陸續續,打到所有節點上去更新,有一定的延時,降低了壓力;缺點:元資料更新有延時,可能導致叢集的一些操作會有一些滯後

(2)10000埠

每個節點都有一個專門用於節點通訊的埠,就是自己提供服務的埠號+10000,比如7001,那麼用於通訊的埠號就是17001埠。

每個節點每隔一段時間都會往其他節點發送ping訊息,同時其他節點接收到ping後返回pong

(3)交換的資訊

故障資訊,節點的增加和移除,hash slot資訊,等等。

2、gossip協議

gossip協議包含多種訊息,包含ping,pong,meet,fail,等等

meet:某個節點發送meet給新加入的節點,讓新節點加入叢集中,然後新節點就會開始與其他節點進行通訊

ping:每個節點會頻繁的給其他節點發送ping,其中包含自己的狀態還有自己維護的叢集元資料,互相通過ping交換元資料。

pong:返回ping和meet,包含自己的狀態和其他資訊,也可以用於資訊廣播和更新。

fail:某個節點判斷另一個節點fail之後,就傳送給其他節點,通知其他節點,指定的節點宕機了。

3.ping訊息深入

ping很頻繁,而且要攜帶一些元資料,所以會加重網路負擔

每個節點每秒鐘會執行10次ping,每次會選擇5個最久沒有通訊過的其他節點

當然如果發現某個節點通訊延時達到了cluster_node_timeout / 2,那麼會立即傳送ping,避免資料互動延時過長

所以cluster_node_timeout可以調節,如果調節比較大,那麼會降低傳送的頻率

每次ping,一個是帶上自己節點的資訊,還有就是帶上1/10其他節點的資訊,傳送出去,進行資料交換

至少包含3個其他節點的資訊,最多包含總節點-2個其他節點的資訊