99热99这里只有精品6国产,亚洲中文字幕在线天天更新,在线观看亚洲精品国产福利片 ,久久久久综合网

歡迎加入QQ討論群258996829
麥子學(xué)院 頭像
蘋(píng)果6袋
6
麥子學(xué)院

Redis的的集群如何搭建?

發(fā)布時(shí)間:2017-03-29 15:34  回復(fù):0  查看:2322   最后回復(fù):2017-03-29 15:34  
Redis  集群是一個(gè)提供在 多個(gè)Redis 間節(jié)點(diǎn)間共享數(shù)據(jù)   的程序集,本文和大家分享的主要是redis 集群搭建相關(guān)內(nèi)容,一起來(lái)看看吧,希望對(duì)大家 學(xué)習(xí)redis有所幫助 。
  Redis 集群并不支持處理多個(gè) keys 的命令 , 因?yàn)檫@需要在不同的節(jié)點(diǎn)間移動(dòng)數(shù)據(jù) , 從而達(dá)不到像 Redis 那樣的性能 , 在高負(fù)載的情況下可能會(huì)導(dǎo)致不可預(yù)料的錯(cuò)誤。
  Redis  集群通過(guò)分區(qū)來(lái)提供  一定程度的可用性 , 在實(shí)際環(huán)境中當(dāng)某個(gè)節(jié)點(diǎn)宕機(jī)或者不可達(dá)的情況下繼續(xù)處理命令 . Redis  集群的優(yōu)勢(shì) :
  ·  自動(dòng)分割數(shù)據(jù)到不同的節(jié)點(diǎn)上。
  ·  整個(gè)集群的部分節(jié)點(diǎn)失敗或者不可達(dá)的情況下能夠繼續(xù)處理命令。
   Redis 集群的主從復(fù)制模型
  為了使在部分節(jié)點(diǎn)失敗或者大部分節(jié)點(diǎn)無(wú)法通信的情況下集群仍然可用,所以集群使用了主從復(fù)制模型, 每個(gè)節(jié)點(diǎn)都會(huì)有 N-1 個(gè)復(fù)制品 .
  在我們例子中具有A , B , C 三個(gè)節(jié)點(diǎn)的集群 , 在沒(méi)有復(fù)制模型的情況下 , 如果節(jié)點(diǎn) B 失敗了,那么整個(gè)集群就會(huì)以為缺少 5501-11000 這個(gè)范圍的槽而不可用 .
  然而如果在集群創(chuàng)建的時(shí)候(或者過(guò)一段時(shí)間)我們?yōu)槊總€(gè)節(jié)點(diǎn)添加一個(gè)從節(jié)點(diǎn)A1 , B1 , C1, 那么整個(gè)集群便有三個(gè) master 節(jié)點(diǎn)和三個(gè) slave 節(jié)點(diǎn)組成,這樣在節(jié)點(diǎn) B 失敗后,集群便會(huì)選舉 B1 為新的主節(jié)點(diǎn)繼續(xù)服務(wù),整個(gè)集群便不會(huì)因?yàn)椴壅也坏蕉豢捎昧?/span>
  不過(guò)當(dāng)B B1  都失敗后,集群是不可用的 .
   搭建并使用Redis集群
  搭建集群的第一件事情我們需要一些運(yùn)行在  集群模式的Redis 實(shí)例 這意味這集群并不是由一些普通的 Redis 實(shí)例組成的,集群模式需要通過(guò)配置啟用,開(kāi)啟集群模式后的 Redis 實(shí)例便可以使用集群特有的命令和特性了 .
  下面是一個(gè)最少選項(xiàng)的集群的配置文件:
   port 7000
  cluster-enabled yes
  cluster-config-file nodes.conf
  cluster-node-timeout 5000
  appendonly yes
  文件中的 cluster-enabled  選項(xiàng)用于開(kāi)實(shí)例的集群模式, 而  cluster-conf-file  選項(xiàng)則設(shè)定了保存節(jié)點(diǎn)配置文件的路徑, 默認(rèn)值為 nodes.conf. 節(jié)點(diǎn)配置文件無(wú)須人為修改, 它由  Redis  集群在啟動(dòng)時(shí)創(chuàng)建, 并在有需要時(shí)自動(dòng)進(jìn)行更新。
  要讓集群正常運(yùn)作至少需要三個(gè)主節(jié)點(diǎn),不過(guò)在剛開(kāi)始試用集群功能時(shí),  強(qiáng)烈建議使用六個(gè)節(jié)點(diǎn):  其中三個(gè)為主節(jié)點(diǎn),  而其余三個(gè)則是各個(gè)主節(jié)點(diǎn)的從節(jié)點(diǎn)。
  首先,  讓我們進(jìn)入一個(gè)新目錄,  并創(chuàng)建六個(gè)以端口號(hào)為名字的子目錄,  稍后我們?cè)趯⒚總€(gè)目錄中運(yùn)行一個(gè) Redis  實(shí)例: 命令如下 :
  mkdir cluster-test cd cluster-testmkdir 7000 7001 7002 7003 7004 7005
  在文件夾 7000  至  7005  中, 各創(chuàng)建一個(gè)  redis.conf  文件, 文件的內(nèi)容可以使用上面的示例配置文件, 但記得將配置中的端口號(hào)從  7000  改為與文件夾名字相同的號(hào)碼。
  從 Redis Github  頁(yè)面 的  unstable  分支中取出最新的  Redis  源碼, 編譯出可執(zhí)行文件  redis-server  , 并將文件復(fù)制到  cluster-test 文件夾, 然后使用類(lèi)似以下命令, 在每個(gè)標(biāo)簽頁(yè)中打開(kāi)一個(gè)實(shí)例:
   cd 7000
  ../redis-server ./redis. conf
  實(shí)例打印的日志顯示,  因?yàn)?/span> nodes.conf  文件不存在, 所以每個(gè)節(jié)點(diǎn)都為它自身指定了一個(gè)新的  ID 
  [ 82462] 26 Nov 11:56:55.329 * No cluster configuration found, I'm 97a3a64667477371c4479320d683e4c8db5858b1
  實(shí)例會(huì)一直使用同一個(gè) ID  , 從而在集群中保持一個(gè)獨(dú)一無(wú)二( unique )的名字。
   搭建集群
  現(xiàn)在我們已經(jīng)有了六個(gè)正在運(yùn)行中的 Redis  實(shí)例, 接下來(lái)我們需要使用這些實(shí)例來(lái)創(chuàng)建集群, 并為每個(gè)節(jié)點(diǎn)編寫(xiě)配置文件。
  通過(guò)使用 Redis  集群命令行工具  redis-trib  , 編寫(xiě)節(jié)點(diǎn)配置文件的工作可以非常容易地完成:  redis-trib  位于  Redis  源碼的  src  文件夾中, 它是一個(gè)  Ruby  程序, 這個(gè)程序通過(guò)向?qū)嵗l(fā)送特殊命令來(lái)完成創(chuàng)建新集群, 檢查集群, 或者對(duì)集群進(jìn)行重新分片( reshared )等工作。
  ./ redis-trib.rb  create  --replicas  1  127.0.0.1:7000  127.0.0.1:7001  127.0.0.1:7002  127.0.0.1:7003  127.0.0.1:7004 127.0.0.1:7005
  這個(gè)命令在這里用于創(chuàng)建一個(gè)新的集群選項(xiàng) –replicas 1  表示我們希望為集群中的每個(gè)主節(jié)點(diǎn)創(chuàng)建一個(gè)從節(jié)點(diǎn)。
  之后跟著的其他參數(shù)則是這個(gè)集群實(shí)例的地址列表,3 個(gè) master3 個(gè) slave redis-trib  會(huì)打印出一份預(yù)想中的配置給你看, 如果你覺(jué)得沒(méi)問(wèn)題的話, 就可以輸入  yes  ,  redis-trib  就會(huì)將這份配置應(yīng)用到集群當(dāng)中 , 讓各個(gè)節(jié)點(diǎn)開(kāi)始互相通訊 , 最后可以得到如下信息:
  [OK]  All  16384  slots  covered
  這表示集群中的 16384  個(gè)槽都有至少一個(gè)主節(jié)點(diǎn)在處理, 集群運(yùn)作正常。
  集群
   cluster info  :打印集群的信息
  cluster nodes  :列出集群當(dāng)前已知的所有節(jié)點(diǎn)(  node ),以及這些節(jié)點(diǎn)的相關(guān)信息。
   節(jié)點(diǎn)
  cluster meet < ip> < port:將  ip  和  port  所指定的節(jié)點(diǎn)添加到集群當(dāng)中,讓它成為集群的一份子。
  cluster forget < node_id:從集群中移除  node_id  指定的節(jié)點(diǎn)。
  cluster replicate < node_id:將當(dāng)前節(jié)點(diǎn)設(shè)置為  node_id  指定的節(jié)點(diǎn)的從節(jié)點(diǎn)。
  cluster saveconfig  :將節(jié)點(diǎn)的配置文件保存到硬盤(pán)里面。
   (slot)
  cluster addslots < slot> [slot ...]  :將一個(gè)或多個(gè)槽(  slot )指派(  assign )給當(dāng)前節(jié)點(diǎn)。
  cluster delslots < slot> [slot ...]  :移除一個(gè)或多個(gè)槽對(duì)當(dāng)前節(jié)點(diǎn)的指派。
  cluster flushslots  :移除指派給當(dāng)前節(jié)點(diǎn)的所有槽,讓當(dāng)前節(jié)點(diǎn)變成一個(gè)沒(méi)有指派任何槽的節(jié)點(diǎn)。
  cluster setslot < slot> node < node_id:將槽  slot  指派給  node_id  指定的節(jié)點(diǎn),如果槽已經(jīng)指派給另一個(gè)節(jié)點(diǎn),那么先讓另一個(gè)節(jié)點(diǎn)刪除該槽 > ,然后再進(jìn)行指派。
  cluster setslot < slot> migrating < node_id:將本節(jié)點(diǎn)的槽  slot  遷移到  node_id  指定的節(jié)點(diǎn)中。
  cluster setslot < slot> importing < node_id:從  node_id  指定的節(jié)點(diǎn)中導(dǎo)入槽  slot  到本節(jié)點(diǎn)。
  cluster setslot < slot> stable  :取消對(duì)槽  slot  的導(dǎo)入(  import )或者遷移(  migrate )。
  
  cluster keyslot :計(jì)算鍵  key  應(yīng)該被放置在哪個(gè)槽上。
  cluster countkeysinslot :返回槽  slot  目前包含的鍵值對(duì)數(shù)量。
  cluster getkeysinslot :返回  count  個(gè)  slot  槽中的鍵
   使用集群
  測(cè)試 Redis  集群比較簡(jiǎn)單的辦法就是使用  redis-rb-cluster  或者  redis-cli  , 接下來(lái)我們將使用  redis-cli  為例來(lái)進(jìn)行演示:
  $ redis-cli -c -p 7000
  redis 127.0.0.1:7000>  set foo bar
  -> Redirected  to slot [12182] located at 127.0.0.1:7002
  OK
  redis 127.0.0.1:7002>  set hello world
  -> Redirected  to slot [866] located at 127.0.0.1:7000
  OK
  redis 127.0.0.1:7000>  get foo
  -> Redirected  to slot [12182] located at 127.0.0.1:7002"bar"
  redis 127.0.0.1:7000>  get hello
  -> Redirected  to slot [866] located at 127.0.0.1:7000"world"
   添加一個(gè)從節(jié)點(diǎn)
  有兩種方法添加從節(jié)點(diǎn),可以像添加主節(jié)點(diǎn)一樣使用redis-trib  命令,也可以像下面的例子一樣使用  –slave 選項(xiàng) :
  ./ redis-trib.rb  add-node  --slave  127.0.0.1:7006  127.0.0.1:7000
  此處的命令和添加一個(gè)主節(jié)點(diǎn)命令類(lèi)似,此處并沒(méi)有指定添加的這個(gè)從節(jié)點(diǎn)的主節(jié)點(diǎn),這種情況下系統(tǒng)會(huì)在其他的復(fù)制集中的主節(jié)點(diǎn)中隨機(jī)選取一個(gè)作為這個(gè)從節(jié)點(diǎn)的主節(jié)點(diǎn)。
  你可以通過(guò)下面的命令指定主節(jié)點(diǎn):
  ./ redis-trib.rb  add-node  --slave  --master-id  3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e  127.0.0.1:7006 127.0.0.1:7000
  也可以使用CLUSTER REPLICATE  命令添加 . 這個(gè)命令也可以改變一個(gè)從節(jié)點(diǎn)的主節(jié)點(diǎn)。
  例如,要給主節(jié)點(diǎn) 127.0.0.1:7005 添加一個(gè)從節(jié)點(diǎn),該節(jié)點(diǎn)哈希槽的范圍 1423-16383,  節(jié)點(diǎn)  ID 3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e, 我們需要鏈接新的節(jié)點(diǎn)(已經(jīng)是空的主節(jié)點(diǎn))并執(zhí)行命令 :
   redis 127.0.0.1:7006>  cluster  replicate 3 c3a0c74aae0b56170ccb03a76b60cfe7dc1912e
  我們新的從節(jié)點(diǎn)有了一些哈希槽,其他的節(jié)點(diǎn)也知道(過(guò)幾秒后會(huì)更新他們自己的配置),可以使用如下命令確認(rèn):
  $ redis-cli -p 7000 cluster nodes | grep slave | grep 3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e
  f093c80dde814da99c5cf72a7dd01590792b783b 127.0.0.1:7006 slave 3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e 0 1385543617702 3 connected2938205e12de373867bf38f1ca29d31d0ddb3e46 127.0.0.1:7002 slave 3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e 0 1385543617198 3 connected
  節(jié)點(diǎn) 3c3a0c…  有兩個(gè)從節(jié)點(diǎn),  7002 ( 已經(jīng)存在的 和  7006 ( 新添加的 ).
   移除一個(gè)節(jié)點(diǎn)
  只要使用  del-node  命令即可:
  ./redis-trib del-node 127.0.0.1:7000 ``
  第一個(gè)參數(shù)是任意一個(gè)節(jié)點(diǎn)的地址, 第二個(gè)節(jié)點(diǎn)是你想要移除的節(jié)點(diǎn)地址。
  使用同樣的方法移除主節(jié)點(diǎn), 不過(guò)在移除主節(jié)點(diǎn)前,需要  確保這個(gè)主節(jié)點(diǎn)是空的 .  如果不是空的 , 需要將這個(gè)節(jié)點(diǎn)的數(shù)據(jù)重新分片到其他主節(jié)點(diǎn)上 .
  替代移除主節(jié)點(diǎn)的方法是手動(dòng)執(zhí)行故障恢復(fù),被移除的主節(jié)點(diǎn)會(huì)作為一個(gè)從節(jié)點(diǎn)存在,不過(guò)這種情況下不會(huì)減少集群節(jié)點(diǎn)的數(shù)量,也需要重新分片數(shù)據(jù)。
來(lái)源: Linux 公社
您還未登錄,請(qǐng)先登錄

熱門(mén)帖子

最新帖子

?