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

























