cassandra啟動流程
整個啟動流程會啟動前端cql server用來接收用戶端cql請求,啟動node互相通信用的MessageService。這個都是正常操作,就不花費篇幅贅述了。cassandra啟動過程對于新節點加入還是正常啟動還是有區分的,新節點會造成資料重分布,是以需要先執行bootstrap。
分區介紹
先看下cassandra cluster的分區概念。下面這個例子中表示,token組成了一個環,由這4台節點劃分,每個server管理一段。所有key值都通過murmur3算法算出token,映射在hash環上,進而找到所屬server

當有新節點加入叢集後,新節點會新配置設定token,會管理新增部分tokenRange,相當于從老節點分割了token,進而引起了資料遷移
上圖中server'新加入叢集,負責了token範圍(51-60),原來管理的server管理token的範圍為(51-75),server'在加入叢集前,需要先把資料拷貝過來,防止加入後,讀資料失敗。這其實就是bootstrap過程,原理很簡單,但實際因為虛拟節點vnode存在,實作要比這複雜的多。
啟動流程
下面是啟動過程中比較重要的幾個步驟
- replay WAL
- 對日志段進行新舊排序,從舊到新,依次replay日志段
- 解析wal成為mutation,apply mutation,建構memtable,然後強制重新整理成sst
- 此過程不斷校驗crc,如果最後一個日志段資料損壞,如出現半條記錄檔,是可以正常skip然後啟動的,其他情況,預設啟動失敗。
- JoinRing
- 判斷本地系統表裡面是否bootstrap完畢,完畢直接跳至第4步,否則新節點,開始執行第二步
- 生成tokens,預設是随機生成諾幹個token,至于多少個,看配置的num_tokens個數。如果本機有其他程式混部導緻負載高,可以适度少配置個數,降低cassandra讀寫負載。
- 本地持久化tokens,發起bootstrap,通過資料流接口,發起sst檔案拷貝
- 将tokens通過Gossip廣播給其他node,這樣以後任意一節點都能正确找到key對應的node
釘釘群交流
為了營造一個開放的 Cassandra 技術交流,我們建立了微信群和釘釘群,為廣大使用者提供專業的技術分享及問答,定期在國内開展線下技術沙龍,專家技術直播,歡迎大家加入。