Redis叢集搭建與維護
一、概述
Redis3.0版本之後支援Cluster.
二、redis cluster安裝
1、下載和解包
cd /usr/local/ wget http://download.redis.io/releases/redis-3.2.1.tar.gz tar -zxvf ./redis-3.2.1.tar.gz
2、 編譯安裝
確認安裝了gcc
yum install gcc cd redis-3.2.1 make MALLOC=libc make install
建立叢集目錄
我們計劃叢集中 Redis 節點的埠號為 9001-9006
,埠號即叢集下各例項資料夾。資料存放在 埠號/data
資料夾中。
mkdir /usr/local/redis-cluster cd redis-cluster/ mkdir -p 9001/data 9002/data 9003/data 9004/data 9005/data 9006/data
2.複製執行指令碼
在 /usr/local/redis-cluster
下建立 bin
資料夾,用來存放叢集執行指令碼,並把安裝好的 Redis 的 src
路徑下的執行指令碼拷貝過來。看命令
mkdir redis-cluster/bin cd /usr/local/redis/src cp mkreleasehdr.sh redis-benchmark redis-check-aof redis-cli redis-server redis-trib.rb /usr/local/redis-cluster/bin
3.複製新 Redis 例項
我們現在從已安裝好的 Redis 中複製一個新的例項到 9001
資料夾,並修改 redis.conf
配置。
cp -rf /usr/local/redis/* /usr/local/redis-cluster/9001
注意,修改 /usr/local/redis-cluster/9001/redis.conf
配置和單點唯一區別是下圖部分,其餘還是常規的這幾項:
port 9001(每個節點的埠號) daemonize yes bind 192.168.119.131(綁定當前機器 IP) dir /usr/local/redis-cluster/9001/data/(資料檔案存放位置) pidfile /var/run/redis_9001.pid(pid 9001和port要對應) cluster-enabled yes(啟動叢集模式) cluster-config-file nodes9001.conf(9001和port要對應) cluster-node-timeout 15000 appendonly yes
叢集搭建配置重點就是取消下圖中的這三個配置的註釋:
再複製出五個新 Redis 例項
我們已經完成了一個節點了,其實接下來就是機械化的再完成另外五個節點,其實可以這麼做:把 9001 例項
複製到另外五個資料夾中,唯一要修改的就是 redis.conf
中的所有和埠的相關的資訊即可,其實就那麼四個位置。開始操作,看圖:
cp -rf /usr/local/redis-cluster/9001/* /usr/local/redis-cluster/9002 cp -rf /usr/local/redis-cluster/9001/* /usr/local/redis-cluster/9003 cp -rf /usr/local/redis-cluster/9001/* /usr/local/redis-cluster/9004 cp -rf /usr/local/redis-cluster/9001/* /usr/local/redis-cluster/9005 cp -rf /usr/local/redis-cluster/9001/* /usr/local/redis-cluster/9006
修改 9002-9006 的 redis.conf 檔案
其實非常簡單了,你通過搜尋會發現其實只有四個點需要修改,我們全域性替換下吧,進入相應的節點資料夾,做替換就好了。命令非常簡單,看圖:
vim redis.conf
:%s/9001/9002/g
其實我們也就是替換了下面這四行:
port 9002 dir /usr/local/redis-cluster/9002/data/ cluster-config-file nodes-9002.conf pidfile /var/run/redis_9002.pid
到這裡,我們已經把最基本的環境搞定了,接下來就是啟動了。
1.啟動 9001-9006 六個節點
/usr/local/bin/redis-server /usr/local/redis-cluster/9001/redis.conf /usr/local/bin/redis-server /usr/local/redis-cluster/9002/redis.conf /usr/local/bin/redis-server /usr/local/redis-cluster/9003/redis.conf /usr/local/bin/redis-server /usr/local/redis-cluster/9004/redis.conf /usr/local/bin/redis-server /usr/local/redis-cluster/9005/redis.conf /usr/local/bin/redis-server /usr/local/redis-cluster/9006/redis.conf
可以檢查一下是否啟動成功:netstate -nltp | grep redis
2.隨便找一個節點測試試
/usr/local/redis-cluster/bin/redis-cli -h 192.168.119.131 -p 9001
set name mafly
連線成功了,但好像報錯了阿???
這是因為雖然我們配置並啟動了 Redis 叢集服務,但是他們暫時還並不在一個叢集中,互相直接發現不了,而且還沒有可儲存的位置,就是所謂的slot(槽)。
3.安裝叢集所需軟體
由於 Redis 叢集需要使用 ruby 命令,所以我們需要安裝 ruby 和相關介面
yum install ruby
yum install rubygems
gem install redis
安裝redis時出錯:
看樣子要升級ruby版本
升級Ruby的版本
安裝rvm,我不知道這是個什麼東西,但是感覺像是Ruby的一個包管理器。
curl -L get.rvm.io | bash -s stable
WTF,又出問題了
氣急敗壞的照著他說的做
# gpg2 --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 gpg: keyring `/root/.gnupg/secring.gpg' created gpg: requesting key D39DC0E3 from hkp server keys.gnupg.net gpg: /root/.gnupg/trustdb.gpg: trustdb created gpg: key D39DC0E3: public key "Michal Papis (RVM signing) <[email protected]>" imported gpg: no ultimately trusted keys found gpg: Total number processed: 1 gpg: imported: 1 (RSA: 1)
然後重新下載rvm安裝,成功了
curl -L get.rvm.io | bash -s stable
source /usr/local/rvm/scripts/rvm
檢視Ruby可用版本
可以看到最新的版本是2.6,保守起見安裝2.4.4
rvm install 2.4.4
至此,我們升級了Ruby的版本。
重新安裝gem redis介面
gem install redis
建立叢集:
/usr/local/redis-cluster/bin/redis-trib.rb create --replicas 1 192.168.119.131:9001 192.168.119.131:9002 192.168.119.131:9003 192.168.119.131:9004 192.168.119.131:9005 192.168.119.131:9006
簡單解釋一下這個命令:呼叫 ruby 命令來進行建立叢集,--replicas 1
表示主從複製比例為 1:1,即一個主節點對應一個從節點;然後,預設給我們分配好了每個主節點和對應從節點服務,以及 solt 的大小,因為在 Redis 叢集中有且僅有 16383 個 solt ,預設情況會給我們平均分配,當然你可以指定,後續的增減節點也可以重新分配。
上圖則代表叢集搭建成功啦!!!
這裡需要注意的是,當防火牆埠號沒有開啟全,會報waiting for the cluster to join....一直等待的情況,這是因為:
叢集不僅需要開通redis客戶端連線的埠,而且需要開通叢集匯流排埠
叢集匯流排埠為redis客戶端連線的埠 + 10000 如redis埠為6379 則叢集匯流排埠為16379驗證一下:
依然是通過客戶端命令連線上,通過叢集命令看一下狀態和節點資訊等。
/usr/local/redis-cluster/bin/redis-cli -c -h 192.168.119.131 -p 9001
cluster info
cluster nodes
通過命令,可以詳細的看出叢集資訊和各個節點狀態,主從資訊以及連線數、槽資訊等。這麼看到,我們已經真的把 Redis 叢集搭建部署成功啦!
設定一個 mafly:
你會發現,當我們 set name mafly
時,出現了 Redirected to slot
資訊並自動連線到了9002
節點。這也是叢集的一個數據分配特性,這裡不詳細說了。
重啟叢集服務
通過pkill -9 redis殺死 reids 程序之後,重新啟動各個節點,叢集自動建立成功。
注意:如果在建立叢集的時候,建立失敗了,如果將來再想重新建立需要刪除data目錄下的*.aof和*.conf,*,rdb檔案,再重新啟動所以redis服務再建立叢集即可。