(三) Redis集群的搭建

Redis集群搭建
主要是按照這篇文章的說明搭建的集群環(huán)境筐骇,本文也會(huì)加入自己遇到的一些坑來說明一下秫筏。

Redis 集群采用了P2P的模式种冬,完全去中心化付燥。Redis 把所有的 Key 分成了 16384 個(gè) slot,每個(gè) Redis 實(shí)例負(fù)責(zé)其中一部分 slot 枝哄。集群中的所有信息(節(jié)點(diǎn)肄梨、端口、slot等)膘格,都通過節(jié)點(diǎn)之間定期的數(shù)據(jù)交換而更新峭范。

環(huán)境搭建

系統(tǒng)版本和Redis版本

[root@localhost]~# cat /proc/version
Linux version 3.10.0-957.10.1.el7.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC) ) #1 SMP Mon Mar 18 15:06:45 UTC 2019
[root@localhost]~# redis-server --version
Redis server v=5.0.7 sha=00000000:0 malloc=libc bits=64 build=1c859419f67cffa8

下載

wget http://download.redis.io/releases/redis-5.0.7.tar.gz
tar zxvf redis-5.0.7.tar.gz
mv redis-4.0.10 /usr/local/redis/

編譯安裝

cd /usr/local/redis
make
make install

啟動(dòng),然后redis-cli 連接測(cè)試就可以了瘪贱,不細(xì)說

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

集群搭建

架構(gòu)細(xì)節(jié):
所有的redis節(jié)點(diǎn)彼此互聯(lián)(PING-PONG機(jī)制),內(nèi)部使用二進(jìn)制協(xié)議優(yōu)化傳輸速度和帶寬.
節(jié)點(diǎn)的fail是通過集群中超過半數(shù)的節(jié)點(diǎn)檢測(cè)失效時(shí)才生效.
客戶端與redis節(jié)點(diǎn)直連,不需要中間proxy層.客戶端不需要連接集群所有節(jié)點(diǎn),連接集群中任何一個(gè)可用節(jié)點(diǎn)即可
redis-cluster把所有的物理節(jié)點(diǎn)映射到[0-16383]slot上,cluster 負(fù)責(zé)維護(hù)node<->slot<->key
Redis集群預(yù)分好16384個(gè)桶纱控,當(dāng)需要在 Redis 集群中放置一個(gè) key-value 時(shí),根據(jù) CRC16(key) mod 16384的值菜秦,決定將一個(gè)key放到哪個(gè)桶中甜害。

環(huán)境準(zhǔn)備
Redis集群中要求奇數(shù)節(jié)點(diǎn),所以至少要有三個(gè)節(jié)點(diǎn)球昨,并且每個(gè)節(jié)點(diǎn)至少有一備份節(jié)點(diǎn)尔店,所以至少需要6個(gè)redis服務(wù)實(shí)例。

這里我是用了兩臺(tái)服務(wù)器,分別開啟三個(gè)節(jié)點(diǎn)

  1. 準(zhǔn)備結(jié)構(gòu)目錄
    兩臺(tái)服務(wù)器分別建立如下目錄結(jié)構(gòu)
$ mkdir -p /usr/local/redis/redis-cluster/{7000,7001,7002}

2.為每個(gè)端口創(chuàng)建配置文件嚣州。
注釋千萬別寫在配置的后面鲫售,比如 port 7000 # 端口7000

# 端口7000,7001,7002,與目錄對(duì)應(yīng)
port 7000
#默認(rèn)ip為127.0.0.1该肴,需要改為其他節(jié)點(diǎn)機(jī)器可訪問的ip情竹,否則創(chuàng)建集群時(shí)無法訪問對(duì)應(yīng)的端口,無法創(chuàng)建集群
bind 192.168.3.67
#redis后臺(tái)運(yùn)行
daemonize yes
#開啟集群
cluster-enabled yes
#集群的配置匀哄,配置文件首次啟動(dòng)自動(dòng)生成 7000秦效,7001,7002  
cluster-config-file nodes_7000.conf
#請(qǐng)求超時(shí)涎嚼,默認(rèn)15秒阱州,可自行設(shè)置
cluster-node-timeout 8000
#開啟aof持久化模式,每次寫操作請(qǐng)求都追加到appendonly.aof文件中
appendonly yes
#每次有寫操作的時(shí)候都同步
appendfsync always
#redis服務(wù)日志
logfile "/data/redis/logs/redis.log"
#pidfile文件對(duì)應(yīng)7000法梯,7001苔货,7002
pidfile /var/run/redis_7000.pid

關(guān)于更多配置文件參數(shù)的解釋,可以參考:
https://github.com/linli8/cnblogs/blob/master/redis%E5%89%AF%E6%9C%AC.conf

3.為了方便鹊汛,每個(gè)服務(wù)器一個(gè)啟動(dòng)腳本

for((i=0;i<3;i++));
do /usr/local/bin/redis-server /usr/local/test/redis-cluster/700$i/redis.conf;      
done

關(guān)閉服務(wù)腳本蒲赂。ip需要具體的服務(wù)器地址

for((i=0;i<=2;i++));
do /usr/local/bin/redis-cli -c -h 192.168.3.67 -p 700$i shutdown;
done

4.啟動(dòng)各節(jié)點(diǎn)后阱冶,它們還不是一個(gè)集群刁憋,需要再創(chuàng)建集群
Redis 5.* 集群的創(chuàng)建

redis-cli --cluster create 192.168.3.67:7000 192.168.3.67:7001 192.168.3.67:7002 192.168.3.19:7000 192.168.3.19:7001 192.168.3.19:7002 --cluster-replicas 1

然后集群創(chuàng)建成功了,三個(gè)主節(jié)點(diǎn)木蹬,三個(gè)從節(jié)點(diǎn)至耻。
redis-cluster會(huì)
連接測(cè)試

[root@localhost]/# redis-cli -c -p 7000 -h 192.168.3.67
192.168.3.67:7000> ping
PONG
192.168.3.67:7000> set test hello
-> Redirected to slot [6918] located at 192.168.3.67:7002
OK
192.168.3.67:7002> get test
"hello"
192.168.3.67:7002> 

列出集群節(jié)點(diǎn)

192.168.3.67:7002> cluster nodes
7e3c8af7c86f9920437ad70520590696fcc0e1b5 192.168.3.67:7002@17002 myself,master - 0 1578570522000 8 connected 5461-10922
f74070c491e275c4731673d47ac6a7e3004f14cb 192.168.3.19:7000@17000 slave 7e3c8af7c86f9920437ad70520590696fcc0e1b5 0 1578570521000 8 connected
2350bc9e786e3a4e12020cfa16e85647515dca00 192.168.3.67:7001@17001 master - 0 1578570522274 2 connected 10923-16383
95a7ac66e0d6e0ffee5dbc0515a61627bb4ed7ee 192.168.3.67:7000@17000 master - 0 1578570520270 1 connected 0-5460
89ca241d20d9927f47176bb47cdc83ffaf6bbd9a 192.168.3.19:7001@17001 slave 2350bc9e786e3a4e12020cfa16e85647515dca00 0 1578570521272 5 connected
93b001ad06b35f5b2a9a750ea4e69fc6652dbabe 192.168.3.19:7002@17002 slave 95a7ac66e0d6e0ffee5dbc0515a61627bb4ed7ee 0 1578570522274 6 connected

查看集群信息- cluster info

192.168.3.67:7002> cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:8
cluster_my_epoch:8
cluster_stats_messages_ping_sent:1018448
cluster_stats_messages_pong_sent:200700
cluster_stats_messages_sent:1219148
cluster_stats_messages_ping_received:200700
cluster_stats_messages_pong_received:194506
cluster_stats_messages_received:395206

其他的命令不繼續(xù)說明了

遇到的問題

make
錯(cuò)誤一:
cc: Command not found
原因 :沒有安裝gcc
解決:yum install gcc
然后再次make

錯(cuò)誤2
:error: jemalloc/jemalloc.h: No such file or directory
原因:一些編譯依賴或原來編譯遺留出現(xiàn)的問題
解決:make distclean 清理一下,
然后再make镊叁。
make 成功后 提示Hint: It's a good idea to run 'make test'
輸入:make test

錯(cuò)誤3:
make[1]: Entering directory `/root/software/redis-3.0.0/src'
You need tcl 8.5 or newer in order to run the Redis test
原因:沒有安裝tcl
解決方案:yum install -y tcl
然后
make test
然后make

錯(cuò)誤4
Hint: It's a good idea to run 'make test'
安裝完tcl之后還是出錯(cuò)尘颓,如下
實(shí)際這根本就不是錯(cuò),只是一個(gè)提示而已
繼續(xù)安裝make install 就可以了

cd src && make all
make[1]: Entering directory `/home/redis-5.0.6/src'
 
Hint: It's a good idea to run 'make test' ;)
 
make[1]: Leaving directory `/home/redis-5.0.6/src'
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末晦譬,一起剝皮案震驚了整個(gè)濱河市疤苹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌敛腌,老刑警劉巖卧土,帶你破解...
    沈念sama閱讀 211,743評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異像樊,居然都是意外死亡尤莺,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門生棍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來颤霎,“玉大人,你說我怎么就攤上這事∮呀矗” “怎么了晴音?”我有些...
    開封第一講書人閱讀 157,285評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)缔杉。 經(jīng)常有香客問我段多,道長(zhǎng),這世上最難降的妖魔是什么壮吩? 我笑而不...
    開封第一講書人閱讀 56,485評(píng)論 1 283
  • 正文 為了忘掉前任进苍,我火速辦了婚禮,結(jié)果婚禮上鸭叙,老公的妹妹穿的比我還像新娘觉啊。我一直安慰自己,他們只是感情好沈贝,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評(píng)論 6 386
  • 文/花漫 我一把揭開白布杠人。 她就那樣靜靜地躺著,像睡著了一般宋下。 火紅的嫁衣襯著肌膚如雪嗡善。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,821評(píng)論 1 290
  • 那天学歧,我揣著相機(jī)與錄音罩引,去河邊找鬼。 笑死枝笨,一個(gè)胖子當(dāng)著我的面吹牛袁铐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播横浑,決...
    沈念sama閱讀 38,960評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼剔桨,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了徙融?” 一聲冷哼從身側(cè)響起洒缀,我...
    開封第一講書人閱讀 37,719評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎欺冀,沒想到半個(gè)月后树绩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,186評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡脚猾,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評(píng)論 2 327
  • 正文 我和宋清朗相戀三年葱峡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片龙助。...
    茶點(diǎn)故事閱讀 38,650評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡砰奕,死狀恐怖蛛芥,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情军援,我是刑警寧澤仅淑,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站胸哥,受9級(jí)特大地震影響涯竟,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜空厌,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評(píng)論 3 313
  • 文/蒙蒙 一庐船、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧嘲更,春花似錦筐钟、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至宠哄,卻和暖如春壹将,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背毛嫉。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工诽俯, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人狱庇。 一個(gè)月前我還...
    沈念sama閱讀 46,370評(píng)論 2 360
  • 正文 我出身青樓惊畏,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親密任。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評(píng)論 2 349

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