redis集群搭建

一顾孽、redis在linux環(huán)境下的安裝

1.獲取redis資源

  wget [http://download.redis.io/releases/redis-4.0.8.tar.gz](http://download.redis.io/releases/redis-4.0.8.tar.gz)

2.解壓

  tar xzvf redis-4.0.8.tar.gz

3.安裝

  cd redis-4.0.8
  make
  cd src
  make install PREFIX=/usr/local/redis

4.移動配置文件到安裝目錄下

  cd ../
  mkdir /usr/local/redis/etc
  mv redis.conf /usr/local/redis/etc

5.配置redis為后臺啟動

  vi /usr/local/redis/etc/redis.conf //將daemonize no 改成daemonize yes

6.將redis加入到開機啟動

  vi /etc/rc.local //在里面添加內(nèi)容:/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf (意思就是開機調(diào)用這段開啟redis的命令)

7.開啟redis

  /usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf  

8.將redis-cli,redis-server拷貝到bin下,讓redis-cli指令可以在任意目錄下直接使用

  cp /usr/local/redis/bin/redis-server /usr/local/bin/
  cp /usr/local/redis/bin/redis-cli /usr/local/bin/

二齐疙、Redis集群

一袁翁、Redis Cluster(Redis集群)簡介

  • redis是一個開源的key value存儲系統(tǒng)沛贪,受到了廣大互聯(lián)網(wǎng)公司的青睞耘纱。redis3.0版本之前只支持單例模式殴玛,在3.0版本及以后才支持集群,我這里用的是redis3.0.0版本翘地;
  • redis集群采用P2P模式申尤,是完全去中心化的,不存在中心節(jié)點或者代理節(jié)點衙耕;
  • redis集群是沒有統(tǒng)一的入口的昧穿,客戶端(client)連接集群的時候連接集群中的任意節(jié)點(node)即可,集群內(nèi)部的節(jié)點是相互通信的(PING-PONG機制)橙喘,每個節(jié)點都是一個redis實例时鸵;
  • 為了實現(xiàn)集群的高可用,即判斷節(jié)點是否健康(能否正常使用)厅瞎,redis-cluster有這么一個投票容錯機制:如果集群中超過半數(shù)的節(jié)點投票認為某個節(jié)點掛了饰潜,那么這個節(jié)點就掛了(fail)。這是判斷節(jié)點是否掛了的方法和簸;
  • 那么如何判斷集群是否掛了呢? -> 如果集群中任意一個節(jié)點掛了彭雾,而且該節(jié)點沒有從節(jié)點(備份節(jié)點),那么這個集群就掛了锁保。這是判斷集群是否掛了的方法薯酝;
  • 那么為什么任意一個節(jié)點掛了(沒有從節(jié)點)這個集群就掛了呢? -> 因為集群內(nèi)置了16384個slot(哈希槽)爽柒,并且把所有的物理節(jié)點映射到了這16384[0-16383]個slot上吴菠,或者說把這些slot均等的分配給了各個節(jié)點。當需要在Redis集群存放一個數(shù)據(jù)(key-value)時霉赡,redis會先對這個key進行crc16算法橄务,然后得到一個結(jié)果。再把這個結(jié)果對16384進行求余穴亏,這個余數(shù)會對應(yīng)[0-16383]其中一個槽蜂挪,進而決定key-value存儲到哪個節(jié)點中重挑。所以一旦某個節(jié)點掛了,該節(jié)點對應(yīng)的slot就無法使用棠涮,那么就會導(dǎo)致集群無法正常工作谬哀。
  • 綜上所述,每個Redis集群理論上最多可以有16384個節(jié)點严肪。

二史煎、集群搭建需要的環(huán)境

2.1 Redis集群至少需要3個節(jié)點,因為投票容錯機制要求超過半數(shù)節(jié)點認為某個節(jié)點掛了該節(jié)點才是掛了驳糯,所以2個節(jié)點無法構(gòu)成集群篇梭。
2.2 要保證集群的高可用,需要每個節(jié)點都有從節(jié)點酝枢,也就是備份節(jié)點恬偷,所以Redis集群至少需要6臺服務(wù)器。因為我沒有那么多服務(wù)器帘睦,也啟動不了那么多虛擬機袍患,所在這里搭建的是偽分布式集群,即一臺服務(wù)器虛擬運行6個redis實例竣付,修改端口號為(7001-7006)诡延,當然實際生產(chǎn)環(huán)境的Redis集群搭建和這里是一樣的。
2.3 安裝ruby

三古胆、集群搭建具體步驟如下(注意要關(guān)閉防火墻)

3.1 在usr/local目錄下新建redis-cluster目錄肆良,用于存放集群節(jié)點
3.2 把redis目錄下的bin目錄下的所有文件復(fù)制到/usr/local/redis-cluster/redis01目錄下,不用擔心這里沒有redis01目錄赤兴,會自動創(chuàng)建的妖滔。操作命令如下(注意當前所在路徑):

cp -r redis/bin/ redis-cluster/redis01

3.3 刪除redis01目錄下的快照文件dump.rdb,并且修改該目錄下的redis.cnf文件桶良,具體修改兩處地方:一是端口號修改為7001,二是開啟集群創(chuàng)建模式沮翔,打開注釋即可陨帆。修改端口號為7001,默認是6379將cluster-enabled yes 的注釋打開
3.4 將redis-cluster/redis01文件復(fù)制5份到redis-cluster目錄下(redis02-redis06),創(chuàng)建6個redis實例采蚀,模擬Redis集群的6個節(jié)點疲牵。然后將其余5個文件下的redis.conf里面的端口號分別修改為7002-7006。分別如下圖所示:創(chuàng)建redis02-06目錄

image.jpeg

分別修改redis.conf文件端口號為7002-70063.5 接著啟動所有redis節(jié)點榆鼠,由于一個一個啟動太麻煩了纲爸,所以在這里創(chuàng)建一個批量啟動redis節(jié)點的腳本文件,命令為start-all.sh妆够,文件內(nèi)容如下:

cd redis01 
./redis-server redis.conf 
cd .. 
cd redis02 
./redis-server redis.conf 
cd .. 
cd redis03 
./redis-server redis.conf 
cd .. 
cd redis04 
./redis-server redis.conf 
cd .. 
cd redis05 
./redis-server redis.conf 
cd .. 
cd redis06 
./redis-server redis.conf 
cd ..

有坑识啦,無法啟動

解決方法:
我們可以通過vi編輯器來查看文件的format格式负蚊。

步驟如下:

1.首先用vi命令打開文件[root@localhost test]# vi test.sh
2.在vi命令模式中使用 :set ff 命令可以看到文件的格式為fileformat=dos
3.修改文件format為unix使用vi/vim修改文件format命令::set ff=unix或者::set fileformat=unix然后:wq保存退出,重新執(zhí)行腳本就正常了
3.6 創(chuàng)建好啟動腳本文件之后颓哮,需要修改該腳本的權(quán)限家妆,使之能夠執(zhí)行,指令如下:

chmod +x start-all.sh

3.7 執(zhí)行start-all.sh腳本冕茅,啟動6個redis節(jié)點
3.8 至此6個redis節(jié)點啟動成功伤极,接下來正式開啟搭建集群,以上都是準備條件姨伤。大家不要覺得圖片多看起來冗長所以覺得麻煩哨坪,其實以上步驟也就一句話的事情:創(chuàng)建6個redis實例(6個節(jié)點)并啟動。

要搭建集群的話乍楚,需要使用一個工具(腳本文件)齿税,這個工具在redis解壓文件的源代碼里。因為這個工具是一個ruby腳本文件炊豪,所以這個工具的運行需要ruby的運行環(huán)境凌箕,就相當于java語言的運行需要在jvm上。所以需要安裝ruby词渤,指令如下:

yum install ruby

然后需要把ruby相關(guān)的包安裝到服務(wù)器牵舱,我這里用的是redis-3.0.0.gem,大家需要注意的是:redis的版本和ruby包的版本最好保持一致缺虐。

https://rubygems.org/gems/redis/versions/3.0.0

將Ruby包安裝到服務(wù)器:需要先下載再安裝芜壁,安裝命令如下:

gem install redis-3.0.0.gem
``
3.9 上一步中已經(jīng)把ruby工具所需要的運行環(huán)境和ruby包安裝好了,接下來需要把這個ruby腳本工具復(fù)制到usr/local/redis-cluster目錄下高氮。那么這個ruby腳本工具在哪里呢慧妄?之前提到過,在redis解壓文件的源代碼里剪芍,即redis/src目錄下的redis-trib.rb文件塞淹。
3.10 將該ruby工具(redis-trib.rb)復(fù)制到redis-cluster目錄下,指令如下:
```shell
cp redis-trib.rb /usr/local/redis-cluster

然后使用該腳本文件搭建集群罪裹,指令如下:

./redis-trib.rb create --replicas 1 172.35.5.13:7001 172.35.5.13:7002 172.35.5.13:7003 172.35.5.13:7004 172.35.5.13:7005 172.35.5.13:7006

注意:此處大家應(yīng)該根據(jù)自己的服務(wù)器ip輸入對應(yīng)的ip地址饱普!
注意:注釋掉redis.conf中的bind 127.0.0.1,并將protected-mode 參數(shù)改為no

中途有個地方需要手動輸入yes即可至此状共,Redi集群搭建成功套耕!大家注意最后一段文字,顯示了每個節(jié)點所分配的slots(哈希槽)峡继,這里總共6個節(jié)點冯袍,其中3個是從節(jié)點,所以3個主節(jié)點分別映射了0-5460碾牌、5461-10922康愤、10933-16383solts儡循。
注意:某個輸入 'yes' 的地方不要輸 'y' 要輸入 'yes'

image.jpeg

3.11 最后連接集群節(jié)點,連接任意一個即可:

redis01/redis-cli -p 7001 -c
image.jpeg

報錯:

image.jpeg

解決:
將每個redis節(jié)點中的redis.conf配置文件中的 cluster-config-file nodes-7006.conf放開并更根據(jù)端口更改文件名

注意:一定要加上-c翘瓮,不然節(jié)點之間是無法自動跳轉(zhuǎn)的贮折!如下圖可以看到,存儲的數(shù)據(jù)(key-value)是均勻分配到不同的節(jié)點的:

image.jpeg
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末资盅,一起剝皮案震驚了整個濱河市调榄,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌呵扛,老刑警劉巖每庆,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異今穿,居然都是意外死亡缤灵,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進店門蓝晒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來腮出,“玉大人,你說我怎么就攤上這事芝薇∨叱埃” “怎么了?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵洛二,是天一觀的道長馋劈。 經(jīng)常有香客問我,道長晾嘶,這世上最難降的妖魔是什么妓雾? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮垒迂,結(jié)果婚禮上械姻,老公的妹妹穿的比我還像新娘。我一直安慰自己娇斑,他們只是感情好策添,可當我...
    茶點故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著毫缆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪乐导。 梳的紋絲不亂的頭發(fā)上苦丁,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天,我揣著相機與錄音物臂,去河邊找鬼旺拉。 笑死产上,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的蛾狗。 我是一名探鬼主播晋涣,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼沉桌!你這毒婦竟也來了谢鹊?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤留凭,失蹤者是張志新(化名)和其女友劉穎佃扼,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蔼夜,經(jīng)...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡兼耀,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了求冷。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瘤运。...
    茶點故事閱讀 38,716評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖匠题,靈堂內(nèi)的尸體忽然破棺而出拯坟,到底是詐尸還是另有隱情,我是刑警寧澤梧躺,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布似谁,位于F島的核電站,受9級特大地震影響掠哥,放射性物質(zhì)發(fā)生泄漏巩踏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一续搀、第九天 我趴在偏房一處隱蔽的房頂上張望塞琼。 院中可真熱鬧,春花似錦禁舷、人聲如沸彪杉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽派近。三九已至,卻和暖如春洁桌,著一層夾襖步出監(jiān)牢的瞬間渴丸,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留谱轨,地道東北人戒幔。 一個月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓,卻偏偏與公主長得像土童,于是被迫代替她去往敵國和親诗茎。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,612評論 2 350

推薦閱讀更多精彩內(nèi)容