標籤:

redis的安裝和分散式配置簡潔教程

前言

Redis是一個開源的使用ANSI C語言編寫、遵守BSD協議、支持網路、可基於內存亦可持久化的日誌型、Key-Value資料庫。

對於我來說,我希望使用它作為我們系統爬蟲的分散式隊列,動態拿取任務以避免單個伺服器掛掉導致連帶的數據損失——這是目的

網上關於redis的教程其實挺多的,但是讀了很多以後覺得各種各樣的,代碼也不少,看得我有點暈暈的不敢下手。

加上為了避免寫新的主系統的時候忘記操作重新查的麻煩,索性自己整理一篇出來。深度可能不如以前(笑 雖然以前的也不怎麼樣)算是主系統前的開胃小菜吧。

繼續之前要先給讀者打個底,基礎的redis其實只有簡單的幾部分:server,cli以及配置文件。配置文件為server提供信息,而cli則是server打開後與其交流的控制台。因此,我們要關注的內容僅僅是一個配置文件和控制台的幾個簡單操作。

redis的安裝

redis的封裝做的很好,因此不需要什麼前置安裝,直接

sudo apt-get install redis-servern

然後立即可以通過執行

redis-servern

來啟動redis

默認設置的redis是不會自動後台運行的 要在配置文件中設置

過程中我們可以使用ps和netstat檢查一下redis是否在運行 埠是否在監聽:

ps -ef|grep redisnnetstat -tunpl |grep 6379n

redis的控制台是獨立出來的,需要通過

redis-clin

進入客戶端進行操作

進入後可以通過info命令獲取當前信息

雖然到此為止,redis直接這樣子也能夠運行,但是為了符合我們的使用需求,我們需要進行設置 。

最常見的做法是修改配置文件redis.conf。(初始大都在/etc/redis/redis.conf,找不到可以在info中查看)建議複製一份到方便的位置再進行修改。

要注意要載入配置文件的話 必須顯式的載入(遇到許可權問題記得sudo)

redis-server redis.conf路徑n

我們也能通過在cli中直接通過CONFIG進行配置,在控制台中運行

CONFIG GET XXXn

可以獲取某設置的設置情況,要查看所有的則只需用*代替即可

同理

CONFIG SET XXXn

可以對某項進行設置

我們最主要的是要修改允許的ip(BIND),然後可以根據自己情況調整埠。只需把bind一行注釋掉,並且把port後面改成自己想要的埠即可。

其他各種細節選項配置文件中都有註解,網上也能找到中文解釋 這裡我們可以暫時跳過,設置必須的幾個即可。

關閉redis的命令(不是關閉控制台),在調試配置文件的過程中也會用到:

redis-cli shutdownn

redis的分散式配置

在配置之前,先簡單介紹一下為什麼要這麼配置:

高可用(High Availability),是當一台伺服器停止服務後,對於業務及用戶毫無影響。 停止服務的原因可能由於網卡、路由器、機房、CPU負載過高、內存溢出、自然災害等不可預期的原因導致,在很多時候也稱單點問題。

而一種解決方式就是主從模式:

主從方式

這種採取一主多從的辦法,主從之間進行數據同步。 當Master宕機後,通過選舉演算法(Paxos、Raft)從slave中選舉出新Master繼續對外提供服務,主機恢復後以slave的身份重新加入。

n主從另一個目的是進行讀寫分離,這是當單機讀寫壓力過高的一種通用型解決方案。 其主機的角色只提供寫操作或少量的讀,把多餘讀請求通過負載均衡演算法分流到單個或多個slave伺服器上。

缺點是主機宕機後,Slave雖然被選舉成新Master了,但對外提供的IP服務地址卻發生變化了,意味著會影響到客戶端。 解決這種情況需要一些額外的工作,在當主機地址發生變化後及時通知到客戶端,客戶端收到新地址後,使用新地址繼續發送新請求。

(感謝評論區,我這個只是把伺服器之間連接起來了,要做到高可用還需要一些其它手段步驟。那部分的內容會在寫完主系統後回頭來補上。UPDATE:2017年2月17日10:17:12)

要配置成主從模式,除了第一部分的修改以外,我們還需要在配置文件中加上以下內容:

slaveof IP PORT

如果主伺服器有密碼的話,還需要配置masterauth。

配置好了以後在master側info可以在replication部分看到slave信息,

同樣在slave的info側也能看到狀態是slave和master信息。

最後測試一下 在master側set個值,在slave側get到,代表成功鏈接。

本來其實還打算寫redis的簡單使用的,後來發現他的功能遠多於我們要用的部分(我們只需要用到列表的pop push),因此使用就留待有空再來詳細介紹了。

參考

redis.conf配置詳細解析 - 太清 - 博客園

Redis高可用分散式內部交流(九) - 蘑菇先生 - 博客園


推薦閱讀:

求指教學習redis源碼的方法?
集群環境中資料庫與緩存的三板斧
aredis —— 一款高效的非同步 redis 客戶端
No-SQL資料庫中的事務性設計

TAG:Redis |