github地址:
https://github.com/canezk/MIT-6.824/tree/master/src/viewservice
Part A: The Viewservice
mit-6.824 lab2 文檔
這個版本實(shí)現(xiàn)的是View Service
(僅供學(xué)習(xí)使用)
系統(tǒng)角色
- View Server (管理集群的節(jié)點(diǎn),控制primary的切換,保證集群只有一個primary伟姐,提升idle為backup,提升backup為primary)
- Primary (store server的集群主節(jié)點(diǎn))
- BackUp (可以理解為slave悄雅,需要sync -> Primary,最有一個)
- Idle server (只是和VS ping,合適的時候提升為backup)
關(guān)于角色切換的說明
vs的存在是為了切換primary铁蹈,保證primary 掛機(jī)之后選擇新的primary,有以下情況
1. primary crash然后reboot宽闲,ping VS
> (1) primary為當(dāng)前view的情況,已經(jīng)被ack了(就是primary在down之前握牧,已
經(jīng)知道自己就是當(dāng)前view的primary)
> 這個時候容诬,假如有backup,就promote為新的primary沿腰,返回給server;同
時览徒,選擇idle隊(duì)列的一個server為新的backup
> 沒有backup,那么集群就掛機(jī)颂龙,由于idle不為空的話一定為保證有backup习蓬,所有假如沒有backup,說明集群只有一個節(jié)點(diǎn)措嵌,不正常服務(wù)也是對的
> (2) primary還沒有ack當(dāng)前的view躲叼,那么集群必須等到這個primary reboot之后才會正常服務(wù)
2. primary ping
> 更新ttl
3. 非backup ping
> 放到idle隊(duì)列,更新ttl(VS后臺需要提供任務(wù)企巢,定時清理down掉的idle server)
4. backup ping
> 更新ttl
系統(tǒng)功能
> *內(nèi)存*kv數(shù)據(jù)存儲
view
> view是集群的當(dāng)前視圖枫慷,表明集群哪個節(jié)點(diǎn)是Primary,哪個是BackUp
節(jié)點(diǎn)狀態(tài)
- active
- recovering
- down
如果down -> active,需要給primary匯報這個信息(方法使用過特殊的ping參數(shù))
tips
> 1. 集群每個節(jié)點(diǎn)需要在固定時間間隔之內(nèi)ping VS(View Server的簡稱)
> 2. 只有三種情況可以更新view浪规,也就是view的number遞增(詳細(xì)參考上面的鏈接)
> 3. 如果primary不能返回ping acknowledges給VS或听,集群將無法自動恢復(fù) ### 測試
> cd到viewsercice目錄,執(zhí)行*go test*