一、 簡介
redis cluster是一個提供在多個redis間節(jié)點間共享數(shù)據(jù)的程序集。
redis 集群通過分區(qū)來提供一定程度的可用性:即使集群中有一部分節(jié)點失效或者無法進行通訊,集群也可以繼續(xù)處理命令請求酌予。
Redis 集群提供了以下兩個好處:
(1)將數(shù)據(jù)自動切分(split)到多個節(jié)點的能力。
(2)當集群中的一部分節(jié)點失效或者無法進行通訊時, 仍然可以繼續(xù)處理命令請求的能力昏滴。
二、搭建過程
1对人、前提條件
(1)要讓集群正常工作至少需要3個主節(jié)點
(2)redis版本要在3.0.0以上
2谣殊、redis的安裝
wget http://download.redis.io/redis-stable.tar.gz
tar xzvf redis-stable.tar.gz
cd redis-stable
make;make install
安裝完,可執(zhí)行程序被復制到/usr/local/bin目錄中牺弄,如果出現(xiàn)安裝時報錯: error: jemalloc/jemalloc.h: No such file or
directory姻几,則采用 make MALLOC=libc
3、redis cluster集群的搭建(本例子創(chuàng)建的是6個節(jié)點)
(1)創(chuàng)建集群所需要的目錄
mkdir -p /usr/local/cluster
cd /usr/local/cluster
mkdir 7000
mkdir 7001
mkdir 7002
mkdir 7003
mkdir 7004
mkdir 7005
備注:此例子搭建的集群均在同一臺機器上
(2)修改配置文件redis.conf
cp redis.conf /usr/local/cluster
vi redis.conf
修改配置文件中的下面選項:
port 7000
daemonize yes
cluster-enabled yes
cluster-config-file nodes-7000.conf
cluster-node-timeout 5000
appendonly yes
appendfilename "appendonly-7000.aof"
dir "/usr/local/cluster/7000"
修改完redis.conf配置文件中的這些配置項之后把這個配置文件分別拷貝到7000/7001/7002/7003/7004/7005目錄下面:
cp /usr/local/cluster/redis.conf /usr/local/cluster/7000
sed 's/7000/7001/g' /usr/local/cluster/7000/redis.conf > /usr/local/cluster/7001/redis.conf
sed 's/7000/7002/g' /usr/local/cluster/7000/redis.conf > /usr/local/cluster/7002/redis.conf
sed 's/7000/7003/g' /usr/local/cluster/7000/redis.conf > /usr/local/cluster/7003/redis.conf
sed 's/7000/7004/g' /usr/local/cluster/7000/redis.conf > /usr/local/cluster/7004/redis.conf
sed 's/7000/7005/g' /usr/local/cluster/7000/redis.conf > /usr/local/cluster/7005/redis.conf
(3)啟動6個實例
redis-server /usr/local/cluster/7000/redis.conf
redis-server /usr/local/cluster/7001/redis.conf
redis-server /usr/local/cluster/7002/redis.conf
redis-server /usr/local/cluster/7003/redis.conf
redis-server /usr/local/cluster/7004/redis.conf
redis-server /usr/local/cluster/7005/redis.conf
(4)創(chuàng)建集群
回到redis安裝包目錄势告,進入src蛇捌,執(zhí)行
./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
執(zhí)行命令的時候,可能會報錯咱台,錯誤內(nèi)容:/usr/bin/env: ruby: No such file or directory豁陆,那是因為缺少ruby環(huán)境,需要安裝
ruby環(huán)境吵护,安裝方式如下:
yum -y install ruby
再次執(zhí)行可能還會報錯盒音,提示缺少rubygems組件表鳍,錯誤提示內(nèi)容:
./redis-trib.rb:24:in `require': no such file to load -- rubygems (LoadError)
from ./redis-trib.rb:24
使用yum安裝:
yum -y install rubygems
gem install redis
注:使用gem安裝ruby的redis模塊時,可能出現(xiàn)無法連接gem服務器祥诽,安裝失敗的情況譬圣,那么這時需要手工下載并安裝,具體如下:
wget https://rubygems.global.ssl.fastly.net/gems/redis-3.2.1.gem
gem install -l ./redis-3.2.1.gem
(5)集群動態(tài)添加節(jié)點或刪除節(jié)點
集群添加節(jié)點
首先把需要添加的節(jié)點啟動雄坪,
mkdir /usr/local/cluster/7006
sed 's/7000/7006/g' /usr/local/cluster/7000/redis.conf >/usr/local/cluster/7006/redis.conf
redis-server /usr/local/cluster/7006/redis.conf
接著厘熟,將新節(jié)點回到集群中,
./redis-trib.rb add-node 127.0.0.1:7006 127.0.0.1:7000
執(zhí)行redis-cli -c -p 7000 cluster nodes维哈,查看新增節(jié)點信息
增加節(jié)點后绳姨,這個新節(jié)點可以成為主節(jié)點或從節(jié)點,
1> 把新節(jié)點變成主節(jié)點阔挠,則需要給這個節(jié)點分配一定的哈希槽飘庄,執(zhí)行
./redis-trib.rb reshard 127.0.0.1:7000
系統(tǒng)會提示移動多少,這里移動1000
How many slots do you want to move (from 1 to 16384)? 1000
What is the receiving node ID?
指定這些移動出來的哈希槽移動哪個節(jié)點购撼,而剛才查看節(jié)點信息最左側(cè)的ID就是節(jié)點的ID,輸入ID,然后輸入all 表示從所有的
主節(jié)點中隨機轉(zhuǎn)移跪削,湊夠1000個哈希槽,再然后再輸入yes迂求,redis集群就開始分配哈希槽了碾盐。至此,一個新的主節(jié)點就添加完成了揩局,再次
查看節(jié)點信息
redis-cli -c -p 7000 cluster nodes
2> 把某一節(jié)點變成從節(jié)點毫玖,則執(zhí)行(假設(shè)7006已加入到集群里頭,并且是master,它的節(jié)點ID
是8ea10090316b33042176557866db21229074d6e1)
redis-cli -c -p 7003 cluster replicate 8ea10090316b33042176557866db21229074d6e1
集群刪除節(jié)點
如果刪除的節(jié)點是主節(jié)點凌盯,則首先要將這個節(jié)點的哈希槽轉(zhuǎn)移到其它節(jié)點付枫,執(zhí)行命令:
./redis-trib.rb reshard 127.0.0.1:7000
How many slots do you want to move (from 1 to 16384)? 1000 #被刪除的slot數(shù)量
What is the receiving node ID? c62d68a6c7c9e08283f1dffc397b099181a60129 #接收slot的節(jié)點ID
Please enter all the source node IDs.
Type 'all' to use all the nodes as source nodes for the hash slots.
Type 'done' once you entered all the source nodes IDs.
Source node #1:8ea10090316b33042176557866db21229074d6e1#被刪除的節(jié)點ID
Source node #2:done
然后再執(zhí)行刪除節(jié)點命令:
./redis-trib.rb del-node 127.0.0.1:7006 8ea10090316b33042176557866db21229074d6e1
如果刪除的節(jié)點是從節(jié)點,則直接執(zhí)行刪除節(jié)點命令十气。
redis cluster集群搭建詳細步驟
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
- 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來喧伞,“玉大人走芋,你說我怎么就攤上這事绩郎。” “怎么了翁逞?”我有些...
- 文/不壞的土叔 我叫張陵肋杖,是天一觀的道長。 經(jīng)常有香客問我挖函,道長状植,這世上最難降的妖魔是什么? 我笑而不...
- 正文 為了忘掉前任怨喘,我火速辦了婚禮津畸,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘必怜。我一直安慰自己肉拓,他們只是感情好,可當我...
- 文/花漫 我一把揭開白布棚赔。 她就那樣靜靜地躺著帝簇,像睡著了一般。 火紅的嫁衣襯著肌膚如雪靠益。 梳的紋絲不亂的頭發(fā)上丧肴,一...
- 文/蒼蘭香墨 我猛地睜開眼眶痰,長吁一口氣:“原來是場噩夢啊……” “哼瘤旨!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起竖伯,我...
- 正文 年R本政府宣布滓侍,位于F島的核電站,受9級特大地震影響牲芋,放射性物質(zhì)發(fā)生泄漏撩笆。R本人自食惡果不足惜,卻給世界環(huán)境...
- 文/蒙蒙 一缸浦、第九天 我趴在偏房一處隱蔽的房頂上張望夕冲。 院中可真熱鬧,春花似錦裂逐、人聲如沸歹鱼。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽弥姻。三九已至,卻和暖如春掺涛,著一層夾襖步出監(jiān)牢的瞬間庭敦,已是汗流浹背。 一陣腳步聲響...
推薦閱讀更多精彩內(nèi)容
- 1 Redis介紹1.1 什么是NoSql為了解決高并發(fā)拧粪、高可擴展修陡、高可用、大數(shù)據(jù)存儲問題而產(chǎn)生的數(shù)據(jù)庫解決方...
- redis集群分為服務端集群和客戶端分片既们,redis3.0以上版本實現(xiàn)了集群機制濒析,即服務端集群正什,3.0以下使用客戶...
- Redis Cluster Specification 1 設(shè)計目標和理由 1.1 Redis Cluster g...
- 在企業(yè)應用中啥纸,對于數(shù)據(jù)的固化一般采用數(shù)據(jù)庫,但是數(shù)據(jù)庫的吞吐量還是存在一定的問題的婴氮,在高并發(fā)高吞吐要求時斯棒,一般會直...