Redis Cluster搭建方法简介22211111
生活随笔
收集整理的這篇文章主要介紹了
Redis Cluster搭建方法简介22211111
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Redis?Cluster搭建方法簡(jiǎn)介
?(2013-05-29 17:08:57) 轉(zhuǎn)載▼ Redis Cluster即Redis的分布式版本,將是Redis繼支持Lua腳本之后的又一重磅功能,官方聲明將會(huì)在今年第三季度發(fā)布Redis Cluster的beta版并在年底發(fā)布第一個(gè)穩(wěn)定版本。當(dāng)前,雖然Redis的穩(wěn)定版本里還沒(méi)有集成分布式功能,但實(shí)際上在開發(fā)版中Redis Cluster的開發(fā)已經(jīng)取得了長(zhǎng)足的進(jìn)展,我們已經(jīng)可以搭建Redis集群并使用其部分功能了。今天,本博主基于最新的開發(fā)版代碼嘗試著搭建了一個(gè)三節(jié)點(diǎn)的Redis集群,這里不妨把過(guò)程簡(jiǎn)單總結(jié)一下,希望能對(duì)各位看客們有所幫助!(注:本篇博文中的搭建方法是徹徹底底的野路子,Redis官方已正式發(fā)布Redis Cluster搭建方法,鏈接如下:http://redis.io/topics/cluster-tutorial。) 首先,下載最新的Redis開發(fā)版源碼包。這個(gè)再簡(jiǎn)單不過(guò)了,大家既可以去Redis在github上的主頁(yè)下載,也可以直接運(yùn)行“git clone git://github.com/antirez/redis.git”克隆整個(gè)Redis代碼庫(kù),當(dāng)然前提是你已經(jīng)安裝了git。 其次,安裝Redis。因?yàn)楸静┲饕罱ㄒ粋€(gè)三節(jié)點(diǎn)的Redis集群,所以在這三個(gè)節(jié)點(diǎn)上都要安裝好Redis,我們這里姑且將這三個(gè)節(jié)點(diǎn)命名為Redis Cluster Node1/Node2/Node3吧,安裝目錄為/usr/local/redis/。 再次,修改Redis配置文件。因?yàn)榧词故窃谥С址植际焦δ艿拈_發(fā)版中,Redis配置文件也是默認(rèn)不打開Redis Cluster的,所以在啟動(dòng)Redis服務(wù)器之前,我們需要修改Redis配置文件,打開Redis Cluster。為了簡(jiǎn)單起見(jiàn),我們這里只修改與Redis Cluster相關(guān)的配置,其他無(wú)關(guān)的配置均采用默認(rèn)值,具體修改內(nèi)容如下: ################################ REDIS CLUSTER ?############################### # # Normal Redis instances can't be part of a Redis Cluster; only nodes that are # started as cluster nodes can. In order to start a Redis instance as a # cluster node enable the cluster support uncommenting the following: # cluster-enabled yes # Every cluster node has a cluster configuration file. This file is not # intended to be edited by hand. It is created and updated by Redis nodes. # Every Redis Cluster node requires a different cluster configuration file. # Make sure that instances running in the same system does not have # overlapping cluster configuration file names. # cluster-config-file nodes-6379.conf # Cluster node timeout is the amount of seconds a node must be unreachable # for it to be considered in failure state. # Most other internal time limits are multiplicators of the node timeout. # cluster-node-timeout 15 # In order to setup your cluster make sure to read the documentation # available at http://redis.io web site. ? 再次,啟動(dòng)三個(gè)節(jié)點(diǎn)上的Redis服務(wù)器。此時(shí),三個(gè)Redis服務(wù)器節(jié)點(diǎn)均會(huì)以Redis Cluster的方式開始運(yùn)行,但并沒(méi)有自動(dòng)構(gòu)建集群,因?yàn)槿哌€處于“我不認(rèn)識(shí)你,你不屬于我”的狀態(tài),它們每個(gè)都是孤零零的Redis節(jié)點(diǎn),或者是只包含了一個(gè)節(jié)點(diǎn)的集群。我們可以通過(guò)Redis客戶端連接到服務(wù)器查看它們的狀態(tài),圖一給出了狀態(tài)查詢方法和查詢結(jié)果,其中cluster nodes命令用于查看當(dāng)前Redis節(jié)點(diǎn)所屬的Redis集群中的所有節(jié)點(diǎn),而cluster info則用于查看當(dāng)前Redis節(jié)點(diǎn)所屬的Redis集群的整體狀態(tài)。由圖中我們可以看到,Redis集群中僅包含一個(gè)Redis節(jié)點(diǎn),也就是當(dāng)前節(jié)點(diǎn),整個(gè)集群的狀態(tài)是fail。圖一 未形成集群時(shí)Redis節(jié)點(diǎn)狀態(tài) 再次,搭建Redis集群。這里所謂的搭建集群,說(shuō)白了就是讓之前啟動(dòng)的三個(gè)Redis節(jié)點(diǎn)彼此連通,意識(shí)到彼此的存在,那么如何做到這一點(diǎn)呢?答案就是cluster meet命令。該命令的作用就是將當(dāng)前節(jié)點(diǎn)主動(dòng)介紹給另外一個(gè)節(jié)點(diǎn)認(rèn)識(shí),圖二給出了cluster meet命令的執(zhí)行方法和執(zhí)行效果,由圖中可知我們使用cluster meet命令分別將Redis Cluster Node1介紹給了Redis Cluster Node2(節(jié)點(diǎn)IP地址為192.168.32.3,運(yùn)行端口為6379)和Redis Cluster Node3(節(jié)點(diǎn)IP地址為192.168.32.4,運(yùn)行端口為6379),之后我們?cè)俅尾榭醇汗?jié)點(diǎn)和集群狀態(tài)就可以知道,三個(gè)節(jié)點(diǎn)已經(jīng)成功合并到了同一個(gè)集群中。
圖二 搭建Redis集群 再次,為集群中的Redis節(jié)點(diǎn)分配hash slot。通過(guò)上面的操作,我們已經(jīng)將三個(gè)各自為政的Redis節(jié)點(diǎn)規(guī)劃到一個(gè)相同的集群中,那么我們現(xiàn)在是否就已經(jīng)完成了集群搭建的所有工作了呢?非也!通過(guò)圖二中對(duì)集群狀態(tài)的查看我們可以知道,當(dāng)前集群的狀態(tài)還是fail,此時(shí)的Redis集群是不工作的,無(wú)法處理任何Redis命令。那么集群的狀態(tài)為什么還是fail呢?本博主通過(guò)查看官方文檔說(shuō)明找到了原因所在,現(xiàn)摘錄原文如下: The FAIL state for the cluster happens in two cases. 1) If at least one hash slot is not served as the node serving it currently is in FAIL state. 2) If we are not able to reach the majority of masters (that is, if the majorify of masters are simply in PFAIL state, it is enough for the node to enter FAIL mode). 很明顯,導(dǎo)致我們的集群處于fail狀態(tài)的原因不是第二個(gè)條,也就是說(shuō)至少有一個(gè)hash slot沒(méi)有被服務(wù)!稍微考慮一下,可不是!何止有一個(gè)hash slot沒(méi)有被服務(wù),壓根兒就沒(méi)有Redis節(jié)點(diǎn)為任何hash slot服務(wù)!眾所周知,Redis Cluster通過(guò)hash slot將數(shù)據(jù)根據(jù)主鍵來(lái)分區(qū),所以一條key-value數(shù)據(jù)會(huì)根據(jù)算法自動(dòng)映射到一個(gè)hash slot,但是一個(gè)hash slot存儲(chǔ)在哪個(gè)Redis節(jié)點(diǎn)上并不是自動(dòng)映射的,是需要集群管理者自行分配的。那么我們需要為多少個(gè)hash slot分配Redis節(jié)點(diǎn)呢?根據(jù)源碼可知是16384個(gè),即我們要將16384個(gè)hash slot分配到集群內(nèi)的三個(gè)節(jié)點(diǎn)上。Redis中用于分配hash slot的命令有很多,其中包括cluster addslots、cluster delslots和cluster setslot。鑒于我們現(xiàn)在是集群的初始化階段,所以我們可以選擇cluster addslots來(lái)分配hash slot,該命令的語(yǔ)法為cluster?addslots?slot1 [slot2] ... [slotN]。
圖三 Redis Cluster Node1上nodes-6379.conf的內(nèi)容 但是另一個(gè)問(wèn)題又出現(xiàn)了,對(duì)于16384個(gè)hash slot來(lái)說(shuō),我們總不能用cluster addslots一個(gè)個(gè)去分配吧?幸運(yùn)的是,我們還有另外一種方法來(lái)分配hash slot,那就是通過(guò)集群配置文件,也就是我們?cè)诘谌街信渲玫腸luster-config-file參數(shù),來(lái)完成hash slot的分段配置。此時(shí),我們?cè)趫?zhí)行Redis服務(wù)器啟動(dòng)的目錄下找到名字為nodes-6379.conf的配置文件。圖三給出了Redis Cluster Node1上nodes-6379.conf的內(nèi)容,由圖可知該文件中的內(nèi)容與我們執(zhí)行cluster nodes命令得到的結(jié)果一樣,就是對(duì)集群中所有Redis節(jié)點(diǎn)的描述,而我們需要修改的就是為每個(gè)節(jié)點(diǎn)添加上hash slot的分配信息。針對(duì)Redis Cluster Node1上nodes-6379.conf的內(nèi)容,修改內(nèi)容如下:cda76a0a094d2ce624e33bed7f3c75689a4128fd :0 myself,master - 0 0 connected?0-5000(注意是在自身節(jié)點(diǎn)的描述,也就是包含了myself那一行的后面追加hash slot的范圍)。類似的,Redis Cluster Node2上nodes-6379.conf文件中追加5001-10000,Redis Cluster Node3上nodes-6379.conf文件中追加10001-16383。經(jīng)過(guò)這樣的配置后,Redis Cluster Node1負(fù)責(zé)存儲(chǔ)0至5000之間的所有hash slots,Redis Cluster Node2負(fù)責(zé)存儲(chǔ)5001至10000之間的所有hash slots,Redis Cluster Node3負(fù)責(zé)存儲(chǔ)10001至16383的所有hash slots。 保存以上修改,通過(guò)Redis客戶端將三個(gè)Redis服務(wù)器重啟,再次執(zhí)行命令cluster nodes和cluster info,我們就可以看到集群的狀態(tài)已經(jīng)為ok了(如圖四所示),這說(shuō)明之前對(duì)于集群配置文件的修改確實(shí)起到了作用。如果經(jīng)過(guò)以上步驟之后集群狀態(tài)依然是fail的話,可以重新修改一下三個(gè)節(jié)點(diǎn)的nodes-6379.conf,將其中所有除myself那一行以外的所有配置行都刪除,然后再保存重啟服務(wù)器即可。當(dāng)然,這里需要說(shuō)明的一點(diǎn)是,本博主并沒(méi)有看到任何關(guān)于Redis Cluster集群配置文件的官方文檔,以上配置方法盡管有效但并不一定是官方推薦的做法!
圖四 修改集群配置文件后重啟的集群狀態(tài) 最后,執(zhí)行Redis命令。在集群狀態(tài)顯示為ok之后,我們就可以像在Redis單機(jī)版上一樣執(zhí)行Redis命令了。圖五顯示了Redis客戶端連接到Redis Cluster Node1上執(zhí)行“set foo bar”命令的執(zhí)行結(jié)果,由圖可知主鍵foo所屬的hash slot存儲(chǔ)在Redis Cluster Node3上。我們?cè)龠B接到Redis Cluster Node3,執(zhí)行相同的命令,正確執(zhí)行!
圖五 執(zhí)行Redis命令 參考鏈接:http://redis.io/topics/cluster-spec
總結(jié)
以上是生活随笔為你收集整理的Redis Cluster搭建方法简介22211111的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 802.11学习笔记1-WIFI参数含义
- 下一篇: postgresql数据库基础