一、 簡介
redis cluster是一個提供在多個redis間節(jié)點間共享數據的程序集。
redis 集群通過分區(qū)來提供一定程度的可用性:即使集群中有一部分節(jié)點失效或者無法進行通訊,集群也可以繼續(xù)處理命令請求。
Redis 集群提供了以下兩個好處:
(1)將數據自動切分(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目錄中,如果出現安裝時報錯: 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í)行命令的時候,可能會報錯,錯誤內容:/usr/bin/env: ruby: No such file or directory,那是因為缺少ruby環(huán)境,需要安裝
ruby環(huán)境,安裝方式如下:
yum -y install ruby
再次執(zhí)行可能還會報錯,提示缺少rubygems組件,錯誤提示內容:
./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模塊時,可能出現無法連接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é)點信息最左側的ID就是節(jié)點的ID,輸入ID,然后輸入all 表示從所有的
主節(jié)點中隨機轉移,湊夠1000個哈希槽,再然后再輸入yes,redis集群就開始分配哈希槽了。至此,一個新的主節(jié)點就添加完成了,再次
查看節(jié)點信息
redis-cli -c -p 7000 cluster nodes
2> 把某一節(jié)點變成從節(jié)點,則執(zhí)行(假設7006已加入到集群里頭,并且是master,它的節(jié)點ID
是8ea10090316b33042176557866db21229074d6e1)
redis-cli -c -p 7003 cluster replicate 8ea10090316b33042176557866db21229074d6e1
集群刪除節(jié)點
如果刪除的節(jié)點是主節(jié)點,則首先要將這個節(jié)點的哈希槽轉移到其它節(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數量
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集群搭建詳細步驟
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
相關閱讀更多精彩內容
- Redis Cluster Specification 1 設計目標和理由 1.1 Redis Cluster g...
- 在企業(yè)應用中,對于數據的固化一般采用數據庫,但是數據庫的吞吐量還是存在一定的問題的,在高并發(fā)高吞吐要求時,一般會直...