redis集羣搭建詳細指南 (macOS,centOS適用)

2019年9月17日 更新可用

PS:本文的路徑自己注意和修改

安裝部署任何一個應用其實都很簡單,只要安裝步驟一步一步來就行了。下面說一下 Redis 集羣搭建規劃,由於集羣至少需要6個節點(3主3從模式),所以,沒有這麼多機器給我玩,我本地也起不了那麼多虛擬機(電腦太爛),現在計劃是在一臺機器上模擬一個集羣,當然,這和生產環境的集羣搭建沒本質區別。

我現在就要在已經有安裝了 Redis 的情況下開始進行集羣搭建,如果你還不是很清楚如何安裝 Redis ,可以去看這以下文章 (遇到的報錯可以看下文章尾部,或有解決方案)。
MacOs安裝redis
centOs安裝redis(自己改路徑哦)
請注意,下面所有集羣搭建環境都基於已安裝好的 Redis 做的。

1.創建文件夾
我們計劃集羣中 Redis 節點的端口號爲 9001-9006 ,端口號即集羣下各實例文件夾。數據存放在 端口號/data 文件夾中。

mkdir ~/workspace/redis-cluster
cd redis-cluster/
mkdir -p 9001/data 9002/data 9003/data 9004/data 9005/data 9006/data

2.複製執行腳本
~/workspace/redis-cluster 下創建 bin 文件夾,用來存放集羣運行腳本,並把安裝好的 Redis 的 src 路徑下的運行腳本拷貝過來。看命令:

mkdir bin
cd ~/workspace/redis-5.0.5/src
cp mkreleasehdr.sh redis-benchmark redis-check-aof  redis-cli redis-server redis-trib.rb ~/workspace/redis-cluster/bin/

redis-check-dump

3.複製一個新 Redis 實例
我們現在從已安裝好的 Redis 中複製一個新的實例到 9001 文件夾,並修改 redis.conf 配置。

cp -r ~/workspace/redis-5.0.5/* ~/workspace/redis-cluster/9001

注意,修改 redis.conf 配置(和單點唯一區別是下圖部分,其餘還是常規的這幾項):

// 打開redis.conf文件
vi ~/workspace/redis-cluster/9001/redis.conf

下面是需要修改的內容:

port 6379 --> port 9001(每個節點的端口號)
daemonize no --> daemonize yes
bind 127.0.0.1(綁定當前機器 IP)
dir ./ --> dir ./data/(數據文件存放位置)
pidfile /var/run/redis_6379.pid --> pidfile ./redis_9001.pid(pid 9001和port要對應,創建時創建這個文件,服務關閉時候刪除這個文件,不創建也可以,貌似只有提示的作用)
# cluster-enabled yes --> cluster-enabled yes(啓動集羣模式)
# cluster-config-file nodes-6379.conf --> cluster-config-file nodes-9001.conf(9001和port要對應,集羣自己維護的配置文件,同一個系統上不能重複)
# cluster-node-timeout 15000 --> cluster-node-timeout 15000
appendonly no --> appendonly yes (允許一次或一秒內的寫入異常,更多信息https://redis.io/topics/persistence)

集羣搭建配置重點就是取消下圖中的這三個配置的註釋:
cluster_conf

4.再複製出五個新 Redis 實例
我們已經完成了一個節點了,其實接下來就是機械化的再完成另外五個節點,其實可以這麼做:把 9001 實例 複製到另外五個文件夾中,唯一要修改的就是 redis.conf 中的所有和端口的相關的信息即可,其實就那麼四個位置。開始操作,看圖:

cp9001-9006

\cp -rf ~/workspace/redis-cluster/9001/* ~/workspace/redis-cluster/9002
\cp -rf ~/workspace/redis-cluster/9001/* ~/workspace/redis-cluster/9003
\cp -rf ~/workspace/redis-cluster/9001/* ~/workspace/redis-cluster/9004
\cp -rf ~/workspace/redis-cluster/9001/* ~/workspace/redis-cluster/9005
\cp -rf ~/workspace/redis-cluster/9001/* ~/workspace/redis-cluster/9006

\cp -rf 命令是不使用別名來複制,因爲 cp 其實是別名 cp -i,操作時會有交互式確認,比較煩人。

5.修改 9002-9006 的 redis.conf 文件
其實非常簡單了,你通過搜索會發現其實只有三個點需要修改,我們全局替換下吧,進入相應的節點文件夾,做替換就好了。命令非常簡單,看圖:

%s-9001-9002g

// 以9002爲例子,如果9003把下面的9002改成9003就好
vim ~/workspace/redis-cluster/9002/redis.conf
:%s/9001/9002/g

回車後,就會有替換幾個地方成功的提示,不放心可以手工檢查下:

%s-success
其實我們也就是替換了下面這四行:

port 9001
cluster-config-file nodes-9001.conf
pidfile ./redis_9001.pid

到這裏,我們已經把最基本的環境搞定了,接下來就是啓動了。

其實我們已經幾乎搭建好了

1.啓動 9001-9006 六個節點
少廢話,直接看圖:
redis-server_start

// redis-server 需要設置環境變量 該命令文件在你安裝redis安裝位置根目錄src文件下面
redis-server ~/workspace/redis-cluster/9001/redis.conf 
redis-server ~/workspace/redis-cluster/9002/redis.conf 
redis-server ~/workspace/redis-cluster/9003/redis.conf 
redis-server ~/workspace/redis-cluster/9004/redis.conf 
redis-server ~/workspace/redis-cluster/9005/redis.conf 
redis-server ~/workspace/redis-cluster/9006/redis.conf

可以檢查一下是否啓動成功:ps -el | grep redis
看的出來,六個節點已經全部啓動成功了。

2.隨便找一個節點測試試

redis-cli -h 127.0.0.1 -p 9001

set name mafly

redis-server_start_test

連接成功了,但好像報錯了阿???
(error) CLUSTERDOWN Hash slot not served(不提供集羣的散列槽),這是什麼鬼?
這是因爲雖然我們配置並啓動了 Redis 集羣服務,但是他們暫時還並不在一個集羣中,互相直接發現不了,而且還沒有可存儲的位置,就是所謂的slot(槽)

3.安裝集羣所需軟件
由於 Redis 集羣需要使用 ruby 命令,所以我們需要安裝 ruby 和相關接口。

MacOS:

// brew 安裝 https://www.cnblogs.com/mingm/p/10653198.html
brew install ruby
gem install redis 

centOS:

yum install ruby
yum install rubygems
gem install redis 

yum_ruby

這纔是真正的創建集羣

先不廢話,直接敲命令:

redis-cli --cluster create 127.0.0.1:9001 127.0.0.1:9002 127.0.0.1:9003 127.0.0.1:9004 127.0.0.1:9005 127.0.0.1:9006 --cluster-replicas 1

cluster_create

簡單解釋一下這個命令:調用 ruby 命令來進行創建集羣,--replicas 1 表示主從複製比例爲 1:1,即一個主節點對應一個從節點;然後,默認給我們分配好了每個主節點和對應從節點服務,以及 solt 的大小,因爲在 Redis 集羣中有且僅有 16383 個 solt ,默認情況會給我們平均分配,當然你可以指定,後續的增減節點也可以重新分配。

M: 10222dee93f6a1700ede9f5424fccd6be0b2fb73 爲主節點Id

S: 9ce697e49f47fec47b3dc290042f3cc141ce5aeb 127.0.0.1:9004 replicates 10222dee93f6a1700ede9f5424fccd6be0b2fb73 從節點下對應主節點Id

目前來看,9001-9003 爲主節點,9004-9006 爲從節點,並向你確認是否同意這麼配置。輸入 yes 後,會開始集羣創建。

cluster_create_success

上圖則代表集羣搭建成功啦!!!

驗證一下:
依然是通過客戶端命令連接上,通過集羣命令看一下狀態和節點信息等。

redis-cli -c -h 127.0.0.1 -p 9001
cluster info
cluster nodes

cluster_info

通過命令,可以詳細的看出集羣信息和各個節點狀態,主從信息以及連接數、槽信息等。這麼看到,我們已經真的把 Redis 集羣搭建部署成功啦!

設置一個 mafly:
你會發現,當我們 set name mafly 時,出現了 Redirected to slot 信息並自動連接到了9002節點。這也是集羣的一個數據分配特性,這裏不詳細說了。

redirected_9002

總結一下

這一篇 Redis 集羣部署搭建的文章真的是一步一步的走下來的,只要你安裝我的步驟來,就保證你能成功搭建一個 Redis 集羣玩玩,也可以這麼說,除了步驟繁瑣外,幾乎不存在技術含量,估計能看完的人都感覺累(說真的,寫這種文章真的很累人)。

接下來可能就是動態擴容、增加節點和減少節點,重新分配槽大小等,當然,還有最重要的就是怎麼和我們程序結合起來,以及如何更好的把 Redis 緩存集羣發揮出應有的效果,這些纔是最重要的。

錯誤總結

錯誤詳情信息:

user@user-70DGA014CN:~/redis-cluster$ redis-cli -p 9000
127.0.0.1:9000> set name chenxinming
(error) MOVED 5798 127.0.0.1:9001

初級解決辦法:更換至9001端口即可

user@user-70DGA014CN:~/redis-cluster$ redis-cli -p 9001
127.0.0.1:9001> set name chenxinming
OK
127.0.0.1:9001>

最終解決方法:

 redis-cli -c -h 192.168.3.99 -p 9000
 127.0.0.1:9002> set foo bar
OK

感謝 Mafly 的文章。
感謝 Jason_M_Ho 的文章。

其他相關文章推薦:
redis 在 mac 下的安裝與使用
redis cluster學習筆記
redis mget性能衰減分析
redis分片和hash tag
redis 集羣管理常用技巧
node 框架 ioredis github
redis官網命令API

錯誤解決(Executing test client: couldn’t execute “src/redis-benchmark”: no such file or directory):
redis安裝報錯解決辦法

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章