《Redis集群方案-Codis》要點:
本文介紹了Redis集群方案-Codis,希望對您有用。如果有疑問,可以聯(lián)系我們。
作者介紹
郝朝陽,DevOps視角社區(qū)發(fā)起人,高級運維工程師,專注于運維自動化的實現(xiàn).現(xiàn)就職于宜搜科技,負責前端運維工作.致力于形成自己的運維細想體系.
codis是豌豆莢基礎架構團隊開發(fā)并開源的分布式redis服務,可以看作是一個無限內存的redis服務,有動態(tài)擴容/縮容的能力.
codis使redis獲得動態(tài)擴容/縮容的能力,增減redis實例對client完全透明,并不需要重啟服務,不需要業(yè)務方面擔心redis內存爆掉的問題.
在codis的設計中,codis-proxy被設計成無狀態(tài)的,客戶端連接任何一個codis-proxy都是一樣的,所以可以比較容易單間多個codis-proxy來實現(xiàn)高可用并橫向擴容.建議使用多codis-proxy的高可用架構.
codis采用pre-sharding的技術來實現(xiàn)數(shù)據(jù)的分片,默認分成1024個slot(0-1023).對于每個key來說,通過哈希算法crc32(key)%1024來 確定slot id.
slot是虛擬概念.每一個slot都會有一個且必須有一個特定的server group id來表示這個slot的數(shù)據(jù)由哪個server group來提供.數(shù)據(jù)的遷移也是以slot為最小單位的.
codis支持通過codis-server進行數(shù)據(jù)遷移,遷移數(shù)據(jù)時是一個個key來進行的.每次以一個key為最小單位進行遷移,不會把主線程block住.redis的操作是內存的,批量的一次性寫入和分多次set幾乎沒有區(qū)別,再者這個模型還避免了遷移過程中的數(shù)據(jù)更新同步的問題,因為遷移一個key的操作是原子性的,對于這個redis-server來說,在完成這次遷移指令前,是不會響應其它請求的,所以保證了數(shù)據(jù)的安全.
codis提供了redis-port的命令行工具,能夠實現(xiàn)從數(shù)據(jù)上T的redis集群遷移到codis分布式redis集群.redis-port具有如下功能:?
實現(xiàn)redis集群遷移到codis集群,需要進行如下操作?
每個redis-port負責將對應的redis數(shù)據(jù)導入到codis
多個redis-port之間互不干擾,除非多個redis上的key出現(xiàn)沖突
單個redis-port可以將負責的數(shù)據(jù)并行遷移一提高速度,通過—nohup指定并行數(shù)
導入速度受帶寬以及codis-proxy處理速度限制
?原redis集群下線時,會導致redis-port連接斷開,于是自動退出
因為codis-proxy是無狀態(tài)的,所以比較容易實現(xiàn)高可用性并橫向擴容.
對于JAVA用戶來說,可以使用設計者修改過的jedis(https://github.com/CodisLabs/jodis),來實現(xiàn)codis-proxy的高可用.它會通過監(jiān)控zk上的注冊信息來實時獲得當前可用的proxy列表,既可以保證高可用性,也可以通過輪流請求所有的proxy實現(xiàn)負載均衡.如果需要異步請求,可以使用基于Netty開發(fā)的Nedis.
對于codis-group的redis實例來說,當一個group的master故障后,應該讓管理員清楚的知道,并手動將slave升級為master,因為這涉及到數(shù)據(jù)一致性等問題.當group中的master故障,其中一個slave升級為master后,該組內的其它slave實例是不會自動改變狀態(tài)的,這些slave仍試圖從舊的master上同步數(shù)據(jù),因而導致組內新的master和slave之間數(shù)據(jù)不一致.因為redis的slaveof命令切換master時會丟棄slave上的全部數(shù)據(jù),從新master完整同步,會消耗新master資源,因此建議在知情的情況下手動操作,是用codis-configserver add?slave.
codis通過開放的api實現(xiàn)自動切換主從的工具-codis-ha,會檢測到master故障后,會自動將其下線,并將期中一個salve提升為master,但是不會自動刷新其它slave的狀態(tài).
文章來自微信公眾號:DevOps視角
轉載請注明本頁網(wǎng)址:
http://www.snjht.com/jiaocheng/4229.html