侯軍偉:Redis新浪大運維
原創(chuàng)2013年4月26日-27日,由51CTO傳媒集團(tuán)旗下WOT(World Of Tech)品牌主辦的2013大數(shù)據(jù)全球技術(shù)峰會在北京富力萬麗酒店召開。本次峰會將圍繞大數(shù)據(jù)基礎(chǔ)架構(gòu)與上層應(yīng)用的生態(tài)系統(tǒng),解決大規(guī)模數(shù)據(jù)引發(fā)的問題,探索大數(shù)據(jù)基礎(chǔ)的解決方案,激發(fā)數(shù)據(jù)挖掘帶來的競爭力,讓數(shù)據(jù)發(fā)出聲音。51CTO作為本次峰會的主辦方,將全程視頻、圖文直播報道這場數(shù)據(jù)的盛宴,更多內(nèi)容請點擊專題:2013大數(shù)據(jù)全球技術(shù)峰會。
在4月26日的NoSQL&NewSQL專場論壇中,新浪高級DBA盧侯軍偉先生表了主題為“Redis在新浪的大規(guī)模運維經(jīng)驗”的演講。
Redis簡介:
Redis是一個key-value存儲系統(tǒng),它和Memcached很像,支持存儲的value類型相對很多,包括string(字符串)、list(鏈表)、set(集合)和zset(有序集合)。這些數(shù)據(jù)類型基本全支持push/pop、add/remove及取交集并集和差集及更豐富的操作,并且這些操作都是原子性的。以此為基礎(chǔ),Redis支持各種不同方式的排序。和memcached一樣,為了保證效率,數(shù)據(jù)都是緩存在內(nèi)存中。區(qū)別的是Redis會周期性的把更新的數(shù)據(jù)寫入磁盤或者把修改操作寫入追加的記錄文件,并且以此為基礎(chǔ)實現(xiàn)了master-slave(主從)同步。
Redis 是一個高性能的key-value數(shù)據(jù)庫。Redis的出現(xiàn)很大程度補償了memcached這類key/value存儲的不足,在多種場合可以對關(guān)系數(shù)據(jù)庫起到很好的補充作用。它提供了Python,Ruby,Erlang,PHP客戶端,使用很方便。
Redis應(yīng)用:
Redis的一個很大好處就是可以不用整個轉(zhuǎn)入到這個數(shù)據(jù)庫,而是可以沿用之前的MySQL等數(shù)據(jù)庫,而僅在一些特定的應(yīng)用場景通過Redis的特性提高效率。本文列出了11個這樣的Web應(yīng)用場景,如顯示***的項目列表、刪除和過濾、排行榜等相關(guān)需求。
運維經(jīng)驗:
每個node一個NodeWatcher線程,每隔2秒鐘檢查一次node的狀態(tài)(syncing、available、unavailable)
如果node連續(xù)max_failures次失敗的話,設(shè)置為unavailable
NodeWatcher將 狀態(tài)存放在NodeManager的狀態(tài)queue中
1.unavailable
處理時判斷node是否為master,如果為master則執(zhí)行promote_new_master將選出新的master并對剩余的slave執(zhí)行slaveof,如果是slave的話,則從slave列表中移除
2.syncing
將node加入到unavailable列表中,并從slave列表中移除
3.available
判斷node是否在當(dāng)前的available列表中,如果不在列表中,則加入到available列表中。