3、創(chuàng)建Redis集群
1> 安裝ruby環(huán)境
創(chuàng)建集群要用到ruby的一個(gè)腳本,在創(chuàng)建集群前,先安裝ruby的運(yùn)行環(huán)境和ruby的redis客戶端。
shell> yum -y install ruby rubygems
shell> gem sources --add https://ruby.taobao.org/ --remove https://rubygems.org/ ?# 配置taobao的源
shell> gem install redis --version 3.2.0
2> 創(chuàng)建集群
shell> redis-trib.rb create --replicas 1 192.168.0.201:6379 192.168.0.201:6380 192.168.0.201:6381 192.168.0.202:16379 192.168.0.202:16380 192.168.0.202:16381
參數(shù)說(shuō)明:
1> redis-trib.rb腳本默認(rèn)安裝在$REDIS_SRC_HOME/src目錄下,在安裝redis服務(wù)時(shí),已將其拷貝到/usr/bin目錄下
2> create:創(chuàng)建集群參數(shù)
3> –replicas 1:每個(gè)master有1個(gè)slave節(jié)點(diǎn)
根據(jù)節(jié)點(diǎn)順序確定master與slave節(jié)點(diǎn),前邊的優(yōu)先選擇做為master節(jié)點(diǎn),后邊優(yōu)先選擇做為slave節(jié)點(diǎn)。由腳本自動(dòng)分配,但master和slave絕對(duì)不會(huì)分配在同一臺(tái)機(jī)器上。
3> 檢查Redis集群狀態(tài)
shell> redis-trib.rb check 192.168.0.201:6379
從上圖可以看出,192.168.0.201:6379、192.168.0.201:6380、192.168.0.201:6381被選為了master節(jié)點(diǎn)。192.168.0.202:16379被選為192.168.0.201:6381的slave節(jié)點(diǎn),192.168.0.202:16380被選為192.168.0.201:6379的slave節(jié)點(diǎn),192.168.0.202:16381被選為192.168.0.201:6380的slave節(jié)點(diǎn)。
到這兒Redis的集群就配置成功了!
4、驗(yàn)證Redis集群
數(shù)據(jù)存儲(chǔ)測(cè)試
# 連接到201的6379節(jié)點(diǎn)
shell> redis-cli -c -h 192.168.0.201 -p 6379
192.168.0.201:6379> set foo abc
-> Redirected to slot [12182] located at 192.168.0.201:6380
OK
192.168.0.201:6380>
set foo abc本想在201的6379節(jié)點(diǎn)保存foo這個(gè)key,但201的6379節(jié)點(diǎn)并沒(méi)有存,而是將請(qǐng)求轉(zhuǎn)發(fā)給了201的6380節(jié)點(diǎn)存儲(chǔ)。而且客戶端自動(dòng)切換到了6380節(jié)點(diǎn)。這是神馬情況?這其實(shí)是redis集群數(shù)據(jù)存儲(chǔ)的機(jī)制,通過(guò)crc16算法計(jì)算key的hash值,然后對(duì)16384取模,得到一個(gè)0~16384以內(nèi)的slot值來(lái)決定由哪個(gè)節(jié)點(diǎn)存儲(chǔ),而每一個(gè)節(jié)點(diǎn)在創(chuàng)建集群的時(shí)候,都會(huì)均勻的分配相應(yīng)的slot數(shù)量。有關(guān)數(shù)據(jù)存儲(chǔ)的機(jī)制,請(qǐng)參考后面的文章。
自動(dòng)選主測(cè)試
從上邊的集群狀態(tài)中得知,192.168.0.202:16381被選為192.168.0.201:6380的slave節(jié)點(diǎn),現(xiàn)在把6380 master節(jié)點(diǎn)kill掉,看redis會(huì)不會(huì)將16381選主為master節(jié)點(diǎn),并將剛剛保存的foo這個(gè)key有沒(méi)有復(fù)制到16381節(jié)點(diǎn)中。如下圖所示:
從上圖測(cè)試結(jié)果可以看出,當(dāng)master節(jié)點(diǎn)掛掉之后,slave節(jié)點(diǎn)自動(dòng)選舉成了master節(jié)點(diǎn),并且之前保存在master節(jié)點(diǎn)的數(shù)據(jù)foo也成功復(fù)制給了slave節(jié)點(diǎn)。