linux下redis集羣搭建

詳細可以參看《redis官網文檔》或者《redis中文網》,按照步驟操作就可以了

redis單機版安裝,詳細參看《linux下安裝redis》

進入到redis的目錄下,創建cluster-test目錄,進入cluster-test目錄,創建7000,7001,7002,7003,7004,7005目錄

mkdir cluster-test
cd cluster-test/
mkdir 7000 7001 7002 7003 7004 7005

按照如下配置修改redis.conf,並放入對應的目錄中

//默認ip爲127.0.0.1 直接註釋掉 配置文件56行
bind 127.0.0.1
//端口7000,7002,7003  配置文件92行
port  7000                                              
// daemonize 的參數爲yes,表示後臺運行 配置文件136行
daemonize    yes                               
//pidfile文件對應7000,7001,7002  我是一臺虛擬機創建6個redis實例,所以需要改配置文件,配置文件158行
pidfile  /var/run/redis_7000.pid 
//aof日誌開啓,默認是no  有需要就開啓,它會每次寫操作都記錄一條日誌 配置文件672行
appendonly  yes   
//開啓集羣  把註釋#去掉 配置文件814行
cluster-enabled  yes  
//集羣的配置 配置文件首次啓動自動生成 7000,7001,7002  配置文件822行
cluster-config-file  nodes_7000.conf 
//請求超時  默認15秒,可自行設置 配置文件828行
cluster-node-timeout  15000

啓動redis集羣

./redis-server cluster-test/7000/redis.conf
./redis-server cluster-test/7001/redis.conf
./redis-server cluster-test/7002/redis.conf
./redis-server cluster-test/7003/redis.conf
./redis-server cluster-test/7004/redis.conf
./redis-server cluster-test/7005/redis.conf

查看redis啓動的進程

ps -ef|grep redis

 

搭建集羣

現在我們已經有了六個正在運行中的 Redis 實例, 接下來我們需要使用這些實例來創建集羣, 併爲每個節點編寫配置文件。

通過使用 Redis 集羣命令行工具 redis-trib , 編寫節點配置文件的工作可以非常容易地完成: redis-trib 位於 Redis 源碼的 src 文件夾中, 它是一個 Ruby 程序, 這個程序通過向實例發送特殊命令來完成創建新集羣, 檢查集羣, 或者對集羣進行重新分片(reshared)等工作。

首先進入redis的tar包解壓的目錄(我的是在/opt/redis-4.0.10/src下)

cd /opt/redis-4.0.10/src

 

./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
 

這個命令在這裏用於創建一個新的集羣, 選項–replicas 1 表示我們希望爲集羣中的每個主節點創建一個從節點。之後跟着的其他參數則是這個集羣實例的地址列表,3個master3個slave redis-trib 會打印出一份預想中的配置給你看, 如果你覺得沒問題的話, 就可以輸入 yes , redis-trib 就會將這份配置應用到集羣當中,讓各個節點開始互相通訊,最後可以得到如下信息:

 

輸入yes 成功後,如下所示

另外,如果執行命令的時候報錯;這個工具是用 ruby 實現的,所以需要安裝 ruby

yum -y install ruby ruby-devel rubygems rpm-build

再執行

gem install redis

如果執行gem install redis出錯,可以參看《執行gem install redis時提示redis requires Ruby version >= 2.2.2.錯誤解決方法》

集羣測試

可以看到,set的時候,會把參數塞到不同的槽位上(節點上)