在最后一章里,我們將集中談論Redis運行中的一些管理方面內容。這是一個不完整的Redis管理指南,我們將會回答一些基本的問題,初接觸Redis的新用戶可能會很感興趣。
當你第一次運行Redis的服務器,它會向你顯示一個警告,指redis.conf
文件沒有被找到。這個文件可以被用來配置Redis的各個方面。一個充分定義(well-documented)的redis.conf
文件對各個版本的Redis都有效。范例文件包含了默認的配置選項,因此,對于想要了解設置在干什么,或默認設置是什么,都會很有用。你可以在https://github.com/antirez/redis/raw/2.4.6/redis.conf找到這個文件。
這個配置文件針對的是Redis 2.4.6,你應該用你的版本號替代上面URL里的"2.4.6"。運行info
命令,其顯示的第一個值就是Redis的版本號。
因為這個文件已經(jīng)是充分定義(well-documented),我們就不去再進行設置了。
除了通過redis.conf
文件來配置Redis,config set
命令可以用來對個別值進行設置。實際上,在將slowlog-log-slower-than
設置為0時,我們就已經(jīng)使用過這個命令了。
還有一個config get
命令能顯示一個設置值。這個命令支持模式匹配,因此如果我們想要顯示關聯(lián)于日志(logging)的所有設置,我們可以這樣做:
config get *log*
通過設置requirepass
(使用config set
命令或redis.conf
文件),可以讓Redis需要一個密碼驗證。當requirepass
被設置了一個值(就是待用的密碼),客戶端將需要執(zhí)行一個auth password
命令。
一旦一個客戶端通過了驗證,就可以在任意數(shù)據(jù)庫里執(zhí)行任何一條命令,包括flushall
命令,這將會清除掉每一個數(shù)據(jù)庫里的所有關鍵字。通過配置,你可以重命名一些重要命令為混亂的字符串,從而獲得一些安全性。
rename-command CONFIG 5ec4db169f9d4dddacbfb0c26ea7e5ef
rename-command FLUSHALL 1041285018a942a4922cbf76623b741e
或者,你可以將新名字設置為一個空字符串,從而禁用掉一個命令。
當你開始使用Redis,你可能會想知道,我能使用多少個關鍵字?還可能想知道,一個散列數(shù)據(jù)結構能有多少個域(尤其是當你用它來組織數(shù)據(jù)時),或者是,一個列表數(shù)據(jù)結構或集合數(shù)據(jù)結構能有多少個元素?對于每一個實例,實際限制都能達到億萬級別(hundreds of millions)。
Redis支持復制功能,這意味著當你向一個Redis實例(Master)進行寫入時,一個或多個其他實例(Slaves)能通過Master實例來保持更新??梢栽谂渲梦募镌O置slaveof
,或使用slaveof
命令來配置一個Slave實例。對于那些沒有進行這些設置的Redis實例,就可能一個Master實例。
為了更好保護你的數(shù)據(jù),復制功能拷貝數(shù)據(jù)到不同的服務器。復制功能還能用于改善性能,因為讀取請求可以被發(fā)送到Slave實例。他們可能會返回一些稍微滯后的數(shù)據(jù),但對于大多數(shù)程序來說,這是一個值得做的折衷。
遺憾的是,Redis的復制功能還沒有提供自動故障恢復。如果Master實例崩潰了,一個Slave實例需要手動的進行升級。如果你想使用Redis去達到某種高可用性,對于使用心跳監(jiān)控(heartbeat monitoring)和腳本自動開關(scripts to automate the switch)的傳統(tǒng)高可用性工具來說,現(xiàn)在還是一個棘手的難題。
備份Redis非常簡單,你可以將Redis的快照(snapshot)拷貝到任何地方,包括S3、FTP等。默認情況下,Redis會把快照存儲為一個名為dump.rdb
的文件。在任何時候,你都可以對這個文件執(zhí)行scp
、ftp
或cp
等常用命令。
有一種常見情況,在Master實例上會停用快照以及單一附加文件(aof),然后讓一個Slave實例去處理備份事宜。這可以幫助減少Master實例的載荷。在不損害整體系統(tǒng)響應性的情況下,你還可以在Slave實例上設置更多主動存儲的參數(shù)。
復制功能(Replication)是一個成長中的網(wǎng)站可以利用的第一個工具。有一些命令會比另外一些來的昂貴(例如sort
命令),將這些運行載荷轉移到一個Slave實例里,可以保持整體系統(tǒng)對于查詢的快速響應。
此外,通過分發(fā)你的關鍵字到多個Redis實例里,可以達到真正的縮放Redis(記住,Redis是單線程的,這些可以運行在同一個邏輯框里)。隨著時間的推移,你將需要特別注意這些事情(盡管許多的Redis載體都提供了consistent-hashing算法)。對于數(shù)據(jù)水平分布(horizontal distribution)的考慮不在這本書所討論的范圍內。這些東西你也很可能不需要去擔心,但是,無論你使用哪一種解決方案,有一些事情你還是必須意識到。
好消息是,這些工作都可在Redis集群下進行。不僅提供水平縮放(包括均衡),為了高可用性,還提供了自動故障恢復。
高可用性和縮放是可以達到的,只要你愿意為此付出時間和精力,Redis集群也使事情變得簡單多了。
在過去的一段時間里,已經(jīng)有許多的計劃和網(wǎng)站使用了Redis,毫無疑問,Redis已經(jīng)可以應用于實際生產(chǎn)中了。然而,一些工具還是不夠成熟,尤其是一些安全性和可用性相關的工具。對于Redis集群,我們希望很快就能看到其實現(xiàn),這應該能為一些現(xiàn)有的管理挑戰(zhàn)提供處理幫忙。
更多建議: