1. 程式人生 > >redis(9)集群搭建

redis(9)集群搭建

但是 top cas 殺死 div cte build mas targe

一、搭建流程

redis集群至少需要3個redis實例,不過官方推薦采用6個實例;3個master,3個slave。

那麽我們需要做以下幾件事:

1)編譯一個redis-server

2)創建6個redis.conf配置文件

3)啟動6個redis實例

4)redis-trib.rb創建集群

二、創建集群

1)編譯一個redis-server

$ wget http://download.redis.io/releases/redis-4.0.10.tar.gz
$ tar xzf redis-4.0.10.tar.gz
$ cd redis-4.0.10
$ make

詳細可以參考:https://www.cnblogs.com/lay2017/p/9248454.html

2)創建6個redis.conf配置文件

我們先創建以下文件夾目錄:

mkdir redis-cluster
cd redis-cluster
mkdir 7000 7001 7002 7003 7004 7005

然後我們將第一步編譯出來的src/redis-server拷貝一份到redis-cluster下,然後把redis.conf拷貝6份分別放入到上面創建的6個文件夾內。

分別修改每個redis.conf的內容:

port 7000
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
daemonize yes 

這裏的port分別設置為:7000、7001、7002、7003、7004、7005

3)啟動6個redis實例

./redis-server 7000/redis.conf

分別執行啟動命令,加載redis.conf配置文件

查看一下啟動進程:

ps -ef | grep redis

顯示如下:

  501 37933     1   0  9:10PM ??         0:03.85 ../redis-server 127.0.0.1:7000 [cluster] 
  501 37941     1   0  9:11PM ??         0:03.82 ../redis-server 127.0.0.1:7001 [cluster] 
  501 37949     1   0  9:11PM ??         0:03.82 ../redis-server 127.0.0.1:7002 [cluster] 
  501 37968     1   0  9:11PM ??         0:03.75 ../redis-server 127.0.0.1:7003 [cluster] 
  501 37977     1   0  9:11PM ??         0:03.76 ../redis-server 127.0.0.1:7004 [cluster] 
  501 37988     1   0  9:12PM ??         0:03.76 ../redis-server 127.0.0.1:7005 [cluster] 

則表示每個實例已經啟動成功

4)redis-trib.rb創建集群

在src目錄下自帶了redis-trib.rb可以用於創建集群

但是在使用之前 需要安裝ruby,以及redis和ruby連接

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

然後采用redis-trib.rb創建集群

redis-trib.rb create --replicas 1  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 127.0.0.1:7006

如果你最終看到:

[OK] All 16384 slots covered

說明集群創建完成

我們可以用命令檢查一下目前的集群情況

./redis-trib.rb check 127.0.0.1:7000

輸出內容如下:

>>> Performing Cluster Check (using node 127.0.0.1:7000)
M: ca34d6741d5b3f5bfc7941c652a09961fddb6d0a 127.0.0.1:7000
   slots:0-5460 (5461 slots) master
   1 additional replica(s)
S: e04be0db2d11fb98133c163bd97426e0f3f2f540 127.0.0.1:7003
   slots: (0 slots) slave
   replicates ca34d6741d5b3f5bfc7941c652a09961fddb6d0a
M: 048c96b56c043aab8d297b147cfe7068c74498c9 127.0.0.1:7002
   slots:10923-16383 (5461 slots) master
   1 additional replica(s)
M: b711233443a7a097511fc1681403f2d83b5c8773 127.0.0.1:7001
   slots:5461-10922 (5462 slots) master
   1 additional replica(s)
S: cb6ee10ec8a45f68efddc84b4acaf01fbd244627 127.0.0.1:7005
   slots: (0 slots) slave
   replicates 048c96b56c043aab8d297b147cfe7068c74498c9
S: b630796514a48438d177fbe8f89610f1afe9b41f 127.0.0.1:7004
   slots: (0 slots) slave
   replicates b711233443a7a097511fc1681403f2d83b5c8773
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

我們看到:

  master主節點是:7000、7001、7002,7003是7000的從節點、7004是7001的從節點、7005是7002的從節點;

  7000分配的哈希槽[0,5460],7001分配的哈希槽[5461,10922],7002分配的哈希槽[10923,16383]

5)測試

5-1、測試設置值、取值

我們使用redis-cli命令連接7000,並設置一個值:

lay-macdeAir:redis-cluster lay$ ./redis-cli -c -p 7000
127.0.0.1:7000> set name lay
-> Redirected to slot [5798] located at 127.0.0.1:7001
OK

我們連接7001,執行獲取這個值:

lay-macdeAir:redis-cluster lay$ ./redis-cli -c -p 7001
127.0.0.1:7001> get name
"lay"

我們發現我們從7001中獲取7000設置的值,集群的數據共享成功。

5-2、測試主從切換

當前有6個實例

  501 37933     1   0  9:10PM ??         0:03.85 ../redis-server 127.0.0.1:7000 [cluster] 
  501 37941     1   0  9:11PM ??         0:03.82 ../redis-server 127.0.0.1:7001 [cluster] 
  501 37949     1   0  9:11PM ??         0:03.82 ../redis-server 127.0.0.1:7002 [cluster] 
  501 37968     1   0  9:11PM ??         0:03.75 ../redis-server 127.0.0.1:7003 [cluster] 
  501 37977     1   0  9:11PM ??         0:03.76 ../redis-server 127.0.0.1:7004 [cluster] 
  501 37988     1   0  9:12PM ??         0:03.76 ../redis-server 127.0.0.1:7005 [cluster] 

我們先殺死7000

lay-macdeAir:redis-cluster lay$ kill -9 37933
lay-macdeAir:redis-cluster lay$ ps -ef|grep redis
  501 37941     1   0  9:11PM ??         0:05.08 ../redis-server 127.0.0.1:7001 [cluster] 
  501 37949     1   0  9:11PM ??         0:05.08 ../redis-server 127.0.0.1:7002 [cluster] 
  501 37968     1   0  9:11PM ??         0:05.02 ../redis-server 127.0.0.1:7003 [cluster] 
  501 37977     1   0  9:11PM ??         0:05.00 ../redis-server 127.0.0.1:7004 [cluster] 
  501 37988     1   0  9:12PM ??         0:05.01 ../redis-server 127.0.0.1:7005 [cluster]

檢查現在集群情況

lay-macdeAir:redis-cluster lay$ ./redis-trib.rb check 127.0.0.1:7001
>>> Performing Cluster Check (using node 127.0.0.1:7001)
M: b711233443a7a097511fc1681403f2d83b5c8773 127.0.0.1:7001
   slots:5461-10922 (5462 slots) master
   1 additional replica(s)
S: cb6ee10ec8a45f68efddc84b4acaf01fbd244627 127.0.0.1:7005
   slots: (0 slots) slave
   replicates 048c96b56c043aab8d297b147cfe7068c74498c9
M: 048c96b56c043aab8d297b147cfe7068c74498c9 127.0.0.1:7002
   slots:10923-16383 (5461 slots) master
   1 additional replica(s)
M: e04be0db2d11fb98133c163bd97426e0f3f2f540 127.0.0.1:7003
   slots:0-5460 (5461 slots) master
   0 additional replica(s)
S: b630796514a48438d177fbe8f89610f1afe9b41f 127.0.0.1:7004
   slots: (0 slots) slave
   replicates b711233443a7a097511fc1681403f2d83b5c8773
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

我們看到7000掛掉以後它的從節點7003提升為了主節點,並且所有16384個哈希槽都覆蓋了

以上我們簡單實現了redis-cluster模塊的集群效果,參考官方文檔:https://redis.io/topics/cluster-tutorial

redis(9)集群搭建