今天我們來講一下redis cluster集群的搭建橱野。
在redis3.0以前,redis只有主從和哨兵兩種集群方式,在3.0版本以后又新添加了一種cluster集群方式斑粱。其實(shí)單純的從集群的角度三热,哨兵模式已經(jīng)能夠滿足我們對(duì)于高可用的需要了鼓择,但是為什么還有新提供cluster集群的方式呢?
在3.0以前就漾,在存儲(chǔ)大數(shù)據(jù)量的時(shí)候呐能,我們通常會(huì)對(duì)要存儲(chǔ)的鍵值對(duì)的key的hashcode進(jìn)行取模操作,根據(jù)取模后的結(jié)果來將該鍵值對(duì)存放到對(duì)應(yīng)的服務(wù)器上抑堡。但是這樣的操作就會(huì)引發(fā)一個(gè)問題摆出,如何動(dòng)態(tài)的擴(kuò)展,一旦增加或刪除機(jī)器夷野,那么都會(huì)導(dǎo)致某些key在redis服務(wù)器中無法命中懊蒸。因此,3.0版本以后悯搔,redis增加了cluster方式的集群搭建骑丸。這種方式采用了hash slot(即hash槽)的概念,使多個(gè)redis實(shí)例整合到一起一起構(gòu)成了一個(gè)集群妒貌,數(shù)據(jù)分散到對(duì)應(yīng)的實(shí)例上通危。
接下來,我們就來介紹redis cluster集群模式的搭建方式灌曙,本示例中菊碟,我們以一臺(tái)服務(wù)器上的不同端口來模擬不同的服務(wù)器
1.下載redis安裝包(這里我們使用redis最新的5.0.0版本來介紹)
wget http://download.redis.io/releases/redis-5.0.0.tar.gz
2.解壓
tar zxvf redis-5.0.0.tar.gz
3.進(jìn)入到解壓好的redis-5.0.0目錄
cd redis-5.0.0
4.編譯
make
5.在usr目錄下創(chuàng)建redis-cluster目錄
mkdir redis-cluster
6.在剛剛創(chuàng)建的redis-cluster目錄下創(chuàng)建對(duì)應(yīng)的redis實(shí)例的存放目錄
mkdir 7001
mkdir 7002
mkdir 7003
mkdir 7004
mkdir 7005
mkdir 7006
7.將redis的配置文件redis.conf復(fù)制到對(duì)應(yīng)的目錄下
cp /usr/redis-5.0.0/redis.conf /usr/redis-cluster/700*
8.并將不同目錄下的redis.conf文件進(jìn)行修改
vi redis.conf
9.修改以下配置項(xiàng)
port 700*
bind 192.168.109.202
daemonize yes
cluster-enabled yes
cluster-config-file nodes-700.conf
cluster-node-timeout 5000
pidfile /var/run/redis_700.pid
appendonly yes
10.分別啟動(dòng)6個(gè)redis節(jié)點(diǎn)
/usr/redis-5.0.0/src/redis-server /usr/redis-cluster/700*/redis.conf
11.啟動(dòng)成功后可以檢查各個(gè)redis服務(wù)的狀態(tài)
ps -ef | grep redis
12.安裝ruby環(huán)境
yum -y install ruby ruby-devel rubygems rpm-build
gem install redis
13.啟動(dòng)集群
/usr/redis-5.0.0/src/redis-trib.rb create --replicas 1 192.168.109.202:7001 192.168.109.202:7002 192.168.109.202:7003 192.168.109.202:7004 192.168.109.202:7005 192.168.109.202:7006
提示redis-trib.rb程序不可用在刺,功能已經(jīng)遷移到redis-cli中逆害,那我們使用redis-cli來啟動(dòng)集群
/usr/redis-5.0.0/src/redis-cli --cluster create 192.168.109.202:7001 192.168.109.202:7002 192.168.109.202:7003 192.168.109.202:7004 192.168.109.202:7005 192.168.109.202:7006 --cluster-replicas 1
輸入yes繼續(xù)
最終的結(jié)果顯示有6個(gè)節(jié)點(diǎn)加入到集群中头镊,三個(gè)主節(jié)點(diǎn),三個(gè)從節(jié)點(diǎn)魄幕,并且只有主節(jié)點(diǎn)上分配有槽相艇,而從節(jié)點(diǎn)上是沒有分配槽的,一共有16384個(gè)槽纯陨。
14.通過redis-cli連接redis數(shù)據(jù)庫
/usr/redis-5.0.0/src/redis-cli -h 192.168.109.202 -c -p 7001
此時(shí)我們向redis中傳入鍵值對(duì)坛芽,會(huì)發(fā)現(xiàn)這個(gè)鍵值對(duì)被分發(fā)到了7002的redis服務(wù)上,也就是第5798個(gè)槽中
15.關(guān)閉redis cluster集群
pkill redis
至此翼抠,已經(jīng)為大家演示了redis cluster集群的搭建方式咙轩,以下是其中可能會(huì)遇到的問題
1.由于redis5.0版本將redis-trib.rb的功能移到了redis-cli中,因此阴颖,在使用5.0版本搭建cluster集群的時(shí)候活喊,是不需要安裝ruby環(huán)境的,5.0之前的版本需要
2.gem install redis
在執(zhí)行該命令時(shí)膘盖,會(huì)報(bào)錯(cuò)redis requires Ruby version >= 2.2.2胧弛,原因是centos默認(rèn)的ruby版本是2.0.0,因此我們需要升級(jí)ruby的版本侠畔。
a.先安裝curl
sudo yum install curl
b.再安裝rvm
gpg2 --keyserver hkp://keys.gnupg.net --recv-keys D39DC0E3
curl -L get.rvm.io | bash -s stable
c.使rvm的配置生效
source /usr/local/rvm/scripts/rvm
d.查看rvm庫中已有的ruby版本
rvm list known
e.選擇一個(gè)版本進(jìn)行安裝
rvm install ruby2.3.3
f.選擇該版本
rvm use ruby2.3.3
g.移除原有版本
rvm remove ruby2.0.0
此時(shí)在進(jìn)行g(shù)em install redis即可结缚。
3.在執(zhí)行curl -L get.rvm.io | bash -s stable命令的時(shí)候,可能會(huì)出現(xiàn)SSL connect error錯(cuò)誤
解決辦法:
a.升級(jí)nss (Network Security Service, 網(wǎng)絡(luò)安全服務(wù))
yum update nss
b.若沒有nss
yum install nss