第五章 - 管理

2018-02-24 16:17 更新

在最后一章里,我們將集中談?wù)揜edis運(yùn)行中的一些管理方面內(nèi)容。這是一個(gè)不完整的Redis管理指南,我們將會回答一些基本的問題,初接觸Redis的新用戶可能會很感興趣。

配置(Configuration)

當(dāng)你第一次運(yùn)行Redis的服務(wù)器,它會向你顯示一個(gè)警告,指redis.conf文件沒有被找到。這個(gè)文件可以被用來配置Redis的各個(gè)方面。一個(gè)充分定義(well-documented)的redis.conf文件對各個(gè)版本的Redis都有效。范例文件包含了默認(rèn)的配置選項(xiàng),因此,對于想要了解設(shè)置在干什么,或默認(rèn)設(shè)置是什么,都會很有用。你可以在https://github.com/antirez/redis/raw/2.4.6/redis.conf找到這個(gè)文件。

這個(gè)配置文件針對的是Redis 2.4.6,你應(yīng)該用你的版本號替代上面URL里的"2.4.6"。運(yùn)行info命令,其顯示的第一個(gè)值就是Redis的版本號。

因?yàn)檫@個(gè)文件已經(jīng)是充分定義(well-documented),我們就不去再進(jìn)行設(shè)置了。

除了通過redis.conf文件來配置Redis,config set命令可以用來對個(gè)別值進(jìn)行設(shè)置。實(shí)際上,在將slowlog-log-slower-than設(shè)置為0時(shí),我們就已經(jīng)使用過這個(gè)命令了。

還有一個(gè)config get命令能顯示一個(gè)設(shè)置值。這個(gè)命令支持模式匹配,因此如果我們想要顯示關(guān)聯(lián)于日志(logging)的所有設(shè)置,我們可以這樣做:

config get *log*

驗(yàn)證(Authentication)

通過設(shè)置requirepass(使用config set命令或redis.conf文件),可以讓Redis需要一個(gè)密碼驗(yàn)證。當(dāng)requirepass被設(shè)置了一個(gè)值(就是待用的密碼),客戶端將需要執(zhí)行一個(gè)auth password命令。

一旦一個(gè)客戶端通過了驗(yàn)證,就可以在任意數(shù)據(jù)庫里執(zhí)行任何一條命令,包括flushall命令,這將會清除掉每一個(gè)數(shù)據(jù)庫里的所有關(guān)鍵字。通過配置,你可以重命名一些重要命令為混亂的字符串,從而獲得一些安全性。

rename-command CONFIG 5ec4db169f9d4dddacbfb0c26ea7e5ef
rename-command FLUSHALL 1041285018a942a4922cbf76623b741e

或者,你可以將新名字設(shè)置為一個(gè)空字符串,從而禁用掉一個(gè)命令。

大小限制(Size Limitations)

當(dāng)你開始使用Redis,你可能會想知道,我能使用多少個(gè)關(guān)鍵字?還可能想知道,一個(gè)散列數(shù)據(jù)結(jié)構(gòu)能有多少個(gè)域(尤其是當(dāng)你用它來組織數(shù)據(jù)時(shí)),或者是,一個(gè)列表數(shù)據(jù)結(jié)構(gòu)或集合數(shù)據(jù)結(jié)構(gòu)能有多少個(gè)元素?對于每一個(gè)實(shí)例,實(shí)際限制都能達(dá)到億萬級別(hundreds of millions)。

復(fù)制(Replication)

Redis支持復(fù)制功能,這意味著當(dāng)你向一個(gè)Redis實(shí)例(Master)進(jìn)行寫入時(shí),一個(gè)或多個(gè)其他實(shí)例(Slaves)能通過Master實(shí)例來保持更新??梢栽谂渲梦募镌O(shè)置slaveof,或使用slaveof命令來配置一個(gè)Slave實(shí)例。對于那些沒有進(jìn)行這些設(shè)置的Redis實(shí)例,就可能一個(gè)Master實(shí)例。

為了更好保護(hù)你的數(shù)據(jù),復(fù)制功能拷貝數(shù)據(jù)到不同的服務(wù)器。復(fù)制功能還能用于改善性能,因?yàn)樽x取請求可以被發(fā)送到Slave實(shí)例。他們可能會返回一些稍微滯后的數(shù)據(jù),但對于大多數(shù)程序來說,這是一個(gè)值得做的折衷。

遺憾的是,Redis的復(fù)制功能還沒有提供自動故障恢復(fù)。如果Master實(shí)例崩潰了,一個(gè)Slave實(shí)例需要手動的進(jìn)行升級。如果你想使用Redis去達(dá)到某種高可用性,對于使用心跳監(jiān)控(heartbeat monitoring)和腳本自動開關(guān)(scripts to automate the switch)的傳統(tǒng)高可用性工具來說,現(xiàn)在還是一個(gè)棘手的難題。

備份文件(Backups)

備份Redis非常簡單,你可以將Redis的快照(snapshot)拷貝到任何地方,包括S3、FTP等。默認(rèn)情況下,Redis會把快照存儲為一個(gè)名為dump.rdb的文件。在任何時(shí)候,你都可以對這個(gè)文件執(zhí)行scp、ftpcp等常用命令。

有一種常見情況,在Master實(shí)例上會停用快照以及單一附加文件(aof),然后讓一個(gè)Slave實(shí)例去處理備份事宜。這可以幫助減少M(fèi)aster實(shí)例的載荷。在不損害整體系統(tǒng)響應(yīng)性的情況下,你還可以在Slave實(shí)例上設(shè)置更多主動存儲的參數(shù)。

縮放和Redis集群(Scaling and Redis Cluster)

復(fù)制功能(Replication)是一個(gè)成長中的網(wǎng)站可以利用的第一個(gè)工具。有一些命令會比另外一些來的昂貴(例如sort命令),將這些運(yùn)行載荷轉(zhuǎn)移到一個(gè)Slave實(shí)例里,可以保持整體系統(tǒng)對于查詢的快速響應(yīng)。

此外,通過分發(fā)你的關(guān)鍵字到多個(gè)Redis實(shí)例里,可以達(dá)到真正的縮放Redis(記住,Redis是單線程的,這些可以運(yùn)行在同一個(gè)邏輯框里)。隨著時(shí)間的推移,你將需要特別注意這些事情(盡管許多的Redis載體都提供了consistent-hashing算法)。對于數(shù)據(jù)水平分布(horizontal distribution)的考慮不在這本書所討論的范圍內(nèi)。這些東西你也很可能不需要去擔(dān)心,但是,無論你使用哪一種解決方案,有一些事情你還是必須意識到。

好消息是,這些工作都可在Redis集群下進(jìn)行。不僅提供水平縮放(包括均衡),為了高可用性,還提供了自動故障恢復(fù)。

高可用性和縮放是可以達(dá)到的,只要你愿意為此付出時(shí)間和精力,Redis集群也使事情變得簡單多了。

小結(jié)

在過去的一段時(shí)間里,已經(jīng)有許多的計(jì)劃和網(wǎng)站使用了Redis,毫無疑問,Redis已經(jīng)可以應(yīng)用于實(shí)際生產(chǎn)中了。然而,一些工具還是不夠成熟,尤其是一些安全性和可用性相關(guān)的工具。對于Redis集群,我們希望很快就能看到其實(shí)現(xiàn),這應(yīng)該能為一些現(xiàn)有的管理挑戰(zhàn)提供處理幫忙。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號