Redis集羣搭建案例

版本及系統說明

系統:CentOS 6.8 64Xnode

Redis版本:redis-3.2.5linux

集羣說明:redis

  1. 總共6個節點vim

  2. 3個Master節點,分別爲7000、8000、9000.ruby

  3. 3個Slave節點,分別爲700一、800一、9001.app


安裝Redis

# wget http://download.redis.io/releases/redis-3.2.5.tar.gzide

# yum -y install gcc tclui

# mkdir /usr/local/redisspa

# tar xvf redis-3.2.5.tar.gz日誌

# cd redis-3.2.5

# make PREFIX=/usr/local/redis/ install

 

設置Redis到環境變量

# vim /etc/profile

export PATH=$PATH:/usr/local/redis/bin

# source /etc/profile


集羣準備

建立集羣所須要的目錄

# mkdir /usr/local/cluster

# mkdir /usr/local/cluster

# mkdir 7000  7001 8000  8001  9000  9001

 

分別在7000、700一、8000、800一、9000、9001下建立log、data、pid、initscript conf

# mkdir 7000  7001 8000  8001  9000  9001

# mkdir data  initscript log  pid  conf

修改配置文件

# cp /home/roger/redis-3.2.5/redis.conf  /usr/local/cluster/7000/conf/

# vim  /usr/local/cluster/7000/conf/redis.conf

1.註釋bind項

# bind 127.0.0.1

2.關閉保護模式

protected-mode no

3.修改端口爲7000

port 7000

4.設置爲後臺啓動

daemonize yes

5.修改pid的存儲目錄

Pidfile /usr/local/cluster/7000/pid/redis.pid

6.修改日誌存儲目錄

logfile "/usr/local/cluster/7000/log/redis.log"

7.開啓AOF功能

appendonly yes

8.設置AOP文件存儲目錄

dir /usr/local/cluster/7000/data/

9.開啓Redis集羣

cluster-enabled yes

10.開啓集羣配置文件

cluster-config-file nodes-7000.conf

11.開啓集羣節點間超時時間

cluster-node-timeout 15000

 

修改完redis.conf配置文件後把這個配置文件分別複製到7001/8000/8001/9000/9001中的conf文件中

# cp /usr/local/cluster/7000/conf/redis.conf  /usr/local/cluster/7001/conf/

# cp /usr/local/cluster/7000/conf/redis.conf  /usr/local/cluster/8000/conf/

# cp /usr/local/cluster/7000/conf/redis.conf  /usr/local/cluster/8001/conf/

# cp /usr/local/cluster/7000/conf/redis.conf  /usr/local/cluster/9000/conf/

# cp /usr/local/cluster/7000/conf/redis.conf  /usr/local/cluster/9001/conf/

注意:拷貝完後要分別修改對應的相關配置爲指定的端口

配置Redis的啓動腳本

修改端口、redis安裝目錄、pid文件目錄、配置文件目錄

# cp  /home/roger/redis-3.2.5/utils/redis_init_script  /usr/local/cluster/7000/initscript/redis_7000

# vim  /usr/local/cluster/7000/initscript/redis_7000

#!/bin/sh

#

# Simple Redis init.d script conceived to  work on Linux systems

# as it does use of the /proc filesystem.

 

REDISPORT=7000

EXEC=/usr/local/redis/bin/redis-server

CLIEXEC=/usr/local/redis/bin/redis-cli

 

PIDFILE=/usr/local/cluster/${REDISPORT}/pid/redis.pid

CONF="/usr/local/cluster/${REDISPORT}/conf/redis.conf"

 

case "$1" in

     start)

         if [ -f $PIDFILE ]

         then

                echo "$PIDFILE exists,  process is already running or crashed"

         else

                echo "Starting Redis  server..."

                 $EXEC $CONF

         fi

         ;;

     stop)

         if [ ! -f $PIDFILE ]

         then

                echo "$PIDFILE does not  exist, process is not running"

         else

                PID=$(cat $PIDFILE)

                echo "Stopping ..."

                 $CLIEXEC -p  $REDISPORT shutdown

                while [ -x /proc/${PID} ]

                do

                    echo "Waiting for  Redis to shutdown ..."

                    sleep 1

                done

                echo "Redis  stopped"

         fi

         ;;

     *)

         echo "Please use start or stop as first argument"

         ;;

Esac

 

修改問啓動腳本後分別將Redis的啓動腳本拷貝到7001/8000/8001/9000/9001中的initscript文件中

# cp  /usr/local/cluster/7000/initscript/redis_7000  /usr/local/cluster/7001/initscript/redis_7001

# cp  /usr/local/cluster/7000/initscript/redis_7000  /usr/local/cluster/8000/initscript/redis_8000

# cp  /usr/local/cluster/7000/initscript/redis_7000  /usr/local/cluster/8001/initscript/redis_8001

# cp  /usr/local/cluster/7000/initscript/redis_7000  /usr/local/cluster/9000/initscript/redis_9000

# cp  /usr/local/cluster/7000/initscript/redis_7000  /usr/local/cluster/9001/initscript/redis_9001 

 

拷貝完後分別修改各個的啓動腳本端口

啓動Redis實例

分別啓動這6個Redis實例

# /usr/local/cluster/7000/initscript/redis_7000  start

# /usr/local/cluster/7001/initscript/redis_7001  start

# /usr/local/cluster/8000/initscript/redis_8000  start

# /usr/local/cluster/8001/initscript/redis_8001  start

# /usr/local/cluster/9000/initscript/redis_9000  start

# /usr/local/cluster/9001/initscript/redis_9001  start

 

啓動後經過命令查看

# ps -ef | grep redis

以下顯示則說明啓動成功

wKiom1hc7smz_3GxAABEDWRk6Dw632.png

升級ruby安裝gem

安裝gem須要ruby的版本在1.8.7以上。默認安裝的是1.8.7版本。

# yum install  ruby  ruby-devel  rubygems  rpm-build

 

檢查ruby版本

# ruby -v

ruby 1.8.7 (2013-06-27 patchlevel 374)  [x86_64-linux]

 

檢查是否安裝rubygems

# rpm -qa | grep ruby

ruby-1.8.7.374-4.el6_6.x86_64

ruby-rdoc-1.8.7.374-4.el6_6.x86_64

ruby-libs-1.8.7.374-4.el6_6.x86_64

rubygems-1.3.7-5.el6.noarch

ruby-devel-1.8.7.374-4.el6_6.x86_64

ruby-irb-1.8.7.374-4.el6_6.x86_64

 

gem安裝redis ruby接口

# gem install redis

Successfully installed redis-3.3.2

1 gem installed

Installing ri documentation for  redis-3.3.2...

Installing RDoc documentation for  redis-3.3.2...

集羣開始

建立集羣

經過集羣管理器建立集羣,集羣管理器所在位置

# cd /home/roger/redis-3.2.5/src/

說明:

  1. --replicas是指定Redis Cluster中的每一個master節點配備幾個Slave節點。

  2. 節點角色由順序決定,先是Master,後是Slave。

  3. 下邊的命令則是:建立一個Redis集羣,每一個Master節點配備一個Slave節點,前邊三個是Master節點,後邊三個是Slave節點。

 

# cd /home/roger/redis-3.2.5/src/

# ./redis-trib.rb  create  --replicas  1  192.168.0.203:7000   192.168.0.203:8000    192.168.0.203:9000  192.168.0.203:7001  192.168.0.203:8001  192.168.0.203:9001

以下顯示這redis集羣建立成功

>>> Creating cluster

>>> Performing hash slots  allocation on 6 nodes...

Using 3 masters:

192.168.0.203:7000

192.168.0.203:8000

192.168.0.203:9000

Adding replica 192.168.0.203:7001  to 192.168.0.203:7000

Adding replica  192.168.0.203:8001 to 192.168.0.203:8000

Adding replica  192.168.0.203:9001 to 192.168.0.203:9000

M:  ad9aa41d76bd9554c36cfda867c51def07711868 192.168.0.203:7000

    slots:0-5460 (5461 slots) master

M: ba355902c49493a7fff1b9689a19dcc019438a8a  192.168.0.203:8000

    slots:5461-10922 (5462 slots) master

M:  7db64e29859983cc57acb6b02ba9f90ed6d4a2ab 192.168.0.203:9000

    slots:10923-16383 (5461 slots) master

S:  8b6e6090e576bd31dbb9a5d896b482aab7c6af37 192.168.0.203:7001

    replicates ad9aa41d76bd9554c36cfda867c51def07711868

S:  4fa3f6acf3a1cbeaab19d3f3b3394957a5729eda 192.168.0.203:8001

    replicates ba355902c49493a7fff1b9689a19dcc019438a8a

S:  6bc537e386b0e92c2cbeef4e6f8713aba838f137 192.168.0.203:9001

    replicates 7db64e29859983cc57acb6b02ba9f90ed6d4a2ab

Can I set the above configuration? (type  'yes' to accept): yes

>>> Nodes configuration updated

>>> Assign a different config  epoch to each node

>>> Sending CLUSTER MEET  messages to join the cluster

Waiting for the cluster to join...

>>> Performing Cluster Check  (using node 192.168.0.203:7000)

M:  ad9aa41d76bd9554c36cfda867c51def07711868 192.168.0.203:7000

    slots:0-5460 (5461 slots) master

    1 additional replica(s)

M:  7db64e29859983cc57acb6b02ba9f90ed6d4a2ab 192.168.0.203:9000

    slots:10923-16383 (5461 slots) master

    1 additional replica(s)

M:  ba355902c49493a7fff1b9689a19dcc019438a8a 192.168.0.203:8000

    slots:5461-10922 (5462 slots) master

    1 additional replica(s)

S:  8b6e6090e576bd31dbb9a5d896b482aab7c6af37 192.168.0.203:7001

    slots: (0 slots) slave

    replicates ad9aa41d76bd9554c36cfda867c51def07711868

S:  6bc537e386b0e92c2cbeef4e6f8713aba838f137 192.168.0.203:9001

    slots: (0 slots) slave

    replicates 7db64e29859983cc57acb6b02ba9f90ed6d4a2ab

S: 4fa3f6acf3a1cbeaab19d3f3b3394957a5729eda  192.168.0.203:8001

    slots: (0 slots) slave

    replicates ba355902c49493a7fff1b9689a19dcc019438a8a

[OK] All nodes agree about slots  configuration.

>>> Check for open slots...

>>> Check slots coverage...

[OK] All 16384 slots covered.

 

從上邊打印信息能夠觀察出:

    Redis集羣有6個節點,7000、8000、9000是三個Master節點。700一、800、9001是三個Slave節點。M-S的關係爲7000(M)-7001(S)、8000(M)-8001(S)、9000(M)-9001(S)。

其中7000有5461個槽點(0-5460),8000有5462個槽點(5461-10922),9000有5461個槽點(10923-16383)。

目前爲止Redis搭建成功。

檢查集羣狀態

經過check鏈接Redis集羣中任意節點

 

# /home/roger/redis-3.2.5/src/redis-trib.rb  check   192.168.0.203:7000

>>> Performing Cluster Check  (using node 192.168.0.203:7000)

M:  ad9aa41d76bd9554c36cfda867c51def07711868 192.168.0.203:7000

    slots:0-5794,10923-11255 (6128 slots) master

    1 additional replica(s)

M:  7db64e29859983cc57acb6b02ba9f90ed6d4a2ab 192.168.0.203:9000

    slots:11256-16383 (5128 slots) master

    1 additional replica(s)

S:  6bc537e386b0e92c2cbeef4e6f8713aba838f137 192.168.0.203:9001

    slots: (0 slots) slave

    replicates 7db64e29859983cc57acb6b02ba9f90ed6d4a2ab

M:  ba355902c49493a7fff1b9689a19dcc019438a8a 192.168.0.203:8000

    slots:5795-10922 (5128 slots) master

    1 additional replica(s)

S:  4fa3f6acf3a1cbeaab19d3f3b3394957a5729eda 192.168.0.203:8001

    slots: (0 slots) slave

    replicates ba355902c49493a7fff1b9689a19dcc019438a8a

S:  8b6e6090e576bd31dbb9a5d896b482aab7c6af37 192.168.0.203:7001

    slots: (0 slots) slave

    replicates ad9aa41d76bd9554c36cfda867c51def07711868

[OK] All nodes agree about slots configuration.

>>> Check for open slots...

>>> Check slots coverage...

[OK] All 16384 slots covered.

 

查看集羣信息

使用redis-cli命令進入集羣環境  -c是必須加的參數

# redis-cli -c -p 7000

wKioL1hc7x3jfgLPAABnB_peklg950.png

能夠經過該命令查看各個節點的節點ID。


設置開機自啓動

# vim /etc/rc.local

/usr/local/cluster/7000/initscript/redis_7000  start

/usr/local/cluster/7001/initscript/redis_7001  start

/usr/local/cluster/8000/initscript/redis_8000  start

/usr/local/cluster/8001/initscript/redis_8001  start

/usr/local/cluster/9000/initscript/redis_9000  start

/usr/local/cluster/9001/initscript/redis_9001  start

 

 

集羣節點操做

添加主節點

準備Redis實例

# cd /usr/local/cluster

# cp -R 7000 6000

移除6000下rdb、aop、集羣節點文件等。只保留其redis.conf和啓動腳本。

修改redis.conf配置文件,對比上述的集羣準備。

修改啓動腳本端口。

啓動添加的Redis實例

啓動添加的主節點

#/usr/local/cluster/6000/initscript/redis_6000  start

執行添加主節點

命令說明:

    redis-trib.rb  add-node 添加的節點IP:端口  已有的集羣主節點IP:口

 

# /home/roger/redis-3.2.5/src/redis-trib.rb  add-node   192.168.0.203:6000    192.168.0.203:7000

>>> Adding node  192.168.0.203:6000 to cluster 192.168.0.203:7000

>>> Performing Cluster Check  (using node 192.168.0.203:7000)

M:  ad9aa41d76bd9554c36cfda867c51def07711868 192.168.0.203:7000

    slots:0-5460 (5461 slots) master

    1 additional replica(s)

M:  7db64e29859983cc57acb6b02ba9f90ed6d4a2ab 192.168.0.203:9000

    slots:10923-16383 (5461 slots) master

    1 additional replica(s)

S:  6bc537e386b0e92c2cbeef4e6f8713aba838f137 192.168.0.203:9001

    slots: (0 slots) slave

    replicates 7db64e29859983cc57acb6b02ba9f90ed6d4a2ab

M:  ba355902c49493a7fff1b9689a19dcc019438a8a 192.168.0.203:8000

    slots:5461-10922 (5462 slots) master

    1 additional replica(s)

S:  4fa3f6acf3a1cbeaab19d3f3b3394957a5729eda 192.168.0.203:8001

    slots: (0 slots) slave

    replicates ba355902c49493a7fff1b9689a19dcc019438a8a

S:  8b6e6090e576bd31dbb9a5d896b482aab7c6af37 192.168.0.203:7001

    slots: (0 slots) slave

    replicates ad9aa41d76bd9554c36cfda867c51def07711868

[OK] All nodes agree about slots  configuration.

>>> Check for open slots...

>>> Check slots coverage...

[OK] All 16384 slots covered.

>>> Send CLUSTER MEET to node  192.168.0.203:6000 to make it join the cluster.

[OK] New node added correctly.

 

檢查集羣狀態

# /home/roger/redis-3.2.5/src/redis-trib.rb  check  192.168.0.203:7000

>>> Performing Cluster Check  (using node 192.168.0.203:7000)

M:  ad9aa41d76bd9554c36cfda867c51def07711868 192.168.0.203:7000

    slots:0-5460 (5461 slots) master

    1 additional replica(s)

M:  7db64e29859983cc57acb6b02ba9f90ed6d4a2ab 192.168.0.203:9000

    slots:10923-16383 (5461 slots) master

    1 additional replica(s)

S:  6bc537e386b0e92c2cbeef4e6f8713aba838f137 192.168.0.203:9001

    slots: (0 slots) slave

    replicates 7db64e29859983cc57acb6b02ba9f90ed6d4a2ab

M:  b01491cf1bb07bbcbc4d5abfdf181d04e274eb4d 192.168.0.203:6000

   slots: (0 slots) master

   0 additional replica(s)

M: ba355902c49493a7fff1b9689a19dcc019438a8a  192.168.0.203:8000

    slots:5461-10922 (5462 slots) master

    1 additional replica(s)

S:  4fa3f6acf3a1cbeaab19d3f3b3394957a5729eda 192.168.0.203:8001

    slots: (0 slots) slave

    replicates ba355902c49493a7fff1b9689a19dcc019438a8a

S:  8b6e6090e576bd31dbb9a5d896b482aab7c6af37 192.168.0.203:7001

    slots: (0 slots) slave

    replicates ad9aa41d76bd9554c36cfda867c51def07711868

[OK] All nodes agree about slots  configuration.

>>> Check for open slots...

>>> Check slots coverage...

[OK] All 16384 slots covered.

    從上面打印的信息能夠知道,向Redis集羣中添加了一個空的Master節點,集羣沒有分配任何hash槽,因此須要從新分配hash槽。

從新分配hash

執行命令

命令說明:

         redis-trib.rbreshard 集羣中任意一個可用的主節點IP:端口

從新分配hash槽、並輸入要分配的hash槽數量

# /home/roger/redis-3.2.5/src/redis-trib.rb  reshard  192.168.0.203:7000

>>> Performing Cluster Check  (using node 192.168.0.203:7000)

M:  ad9aa41d76bd9554c36cfda867c51def07711868 192.168.0.203:7000

    slots:0-5460 (5461 slots) master

    1 additional replica(s)

M:  7db64e29859983cc57acb6b02ba9f90ed6d4a2ab 192.168.0.203:9000

    slots:10923-16383 (5461 slots) master

    1 additional replica(s)

S:  6bc537e386b0e92c2cbeef4e6f8713aba838f137 192.168.0.203:9001

    slots: (0 slots) slave

    replicates 7db64e29859983cc57acb6b02ba9f90ed6d4a2ab

M: b01491cf1bb07bbcbc4d5abfdf181d04e274eb4d  192.168.0.203:6000

    slots: (0 slots) master

    0 additional replica(s)

M:  ba355902c49493a7fff1b9689a19dcc019438a8a 192.168.0.203:8000

    slots:5461-10922 (5462 slots) master

    1 additional replica(s)

S: 4fa3f6acf3a1cbeaab19d3f3b3394957a5729eda  192.168.0.203:8001

    slots: (0 slots) slave

    replicates ba355902c49493a7fff1b9689a19dcc019438a8a

S:  8b6e6090e576bd31dbb9a5d896b482aab7c6af37 192.168.0.203:7001

    slots: (0 slots) slave

    replicates ad9aa41d76bd9554c36cfda867c51def07711868

[OK] All nodes agree about slots  configuration.

>>> Check for open slots...

>>> Check slots coverage...

[OK] All 16384 slots covered.

How many slots do you want to  move (from 1 to 16384)?1000

輸入接收節點ID

輸入接收hash槽的節點ID(經過查詢集羣信息能夠獲取添加的Master的節點ID)。

What is the receiving node ID?b01491cf1bb07bbcbc4d5abfdf181d04e274eb4d

設置hash槽來源

輸入hash槽的源節點,能夠是單獨某個集羣節點的node ID,也能夠輸入all。又集羣來分配hash槽。輸入done結束槽的設置。(hash槽從源節點中移動事後,分配後的hash槽在源節點中不存在,在新的Master節點中)

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:all

確認移動hash

輸入yes開始移動hash槽到目標節點ID

Do you want to proceed with the  proposed reshard plan (yes/no)?yes

檢驗集羣狀態

查看分配後的集羣信息,已經從新分配了hash槽

# /home/roger/redis-3.2.5/src/redis-trib.rb  check  192.168.0.203:7000

>>> Performing Cluster Check  (using node 192.168.0.203:7000)

M:  ad9aa41d76bd9554c36cfda867c51def07711868 192.168.0.203:7000

    slots:333-5460 (5128 slots) master

   1  additional replica(s)

M:  7db64e29859983cc57acb6b02ba9f90ed6d4a2ab 192.168.0.203:9000

    slots:11256-16383 (5128 slots) master

    1 additional replica(s)

S:  6bc537e386b0e92c2cbeef4e6f8713aba838f137 192.168.0.203:9001

    slots: (0 slots) slave

    replicates 7db64e29859983cc57acb6b02ba9f90ed6d4a2ab

M:  b01491cf1bb07bbcbc4d5abfdf181d04e274eb4d 192.168.0.203:6000

   slots:0-332,5461-5794,10923-11255 (1000  slots) master

   0 additional replica(s)

M:  ba355902c49493a7fff1b9689a19dcc019438a8a 192.168.0.203:8000

    slots:5795-10922 (5128 slots) master

    1 additional replica(s)

S:  4fa3f6acf3a1cbeaab19d3f3b3394957a5729eda 192.168.0.203:8001

    slots: (0 slots) slave

    replicates ba355902c49493a7fff1b9689a19dcc019438a8a

S: 8b6e6090e576bd31dbb9a5d896b482aab7c6af37  192.168.0.203:7001

    slots: (0 slots) slave

    replicates ad9aa41d76bd9554c36cfda867c51def07711868

[OK] All nodes agree about slots  configuration.

>>> Check for open slots...

>>> Check slots coverage...

[OK] All 16384 slots covered.

從上邊打印信息中能夠或者,新添加的Master節點已經分配了1000個hash槽點,hash槽點範圍0-332,5461-5794,10923-11255

添加從節點

準備Redis實例

# cd /usr/local/cluster

# cp -R 7001 6001

移除6000下rdb、aop、集羣節點文件等。只保留其redis.conf和啓動腳本。

修改redis.conf配置文件,對比上述的集羣準備。

修改啓動腳本端口。

啓動添加的Redis實例

啓動添加的redis服務

# /usr/local/cluster/6001/initscript/redis_6001  start

執行添加從節點

         命令說明:

./redis-trib.rbadd-node --slave --master-id 主節點id 添加的從節點IP和端口 集羣已有的節點IP和端口

# /home/roger/redis-3.2.5/src/redis-trib.rb  add-node   --slave  --master-id  b01491cf1bb07bbcbc4d5abfdf181d04e274eb4d  192.168.0.203:6001  192.168.0.203:7000

>>> Adding node  192.168.0.203:6001 to cluster 192.168.0.203:7000

>>> Performing Cluster Check  (using node 192.168.0.203:7000)

M:  ad9aa41d76bd9554c36cfda867c51def07711868 192.168.0.203:7000

    slots:333-5460 (5128 slots) master

    1 additional replica(s)

M:  7db64e29859983cc57acb6b02ba9f90ed6d4a2ab 192.168.0.203:9000

    slots:11256-16383 (5128 slots) master

    1 additional replica(s)

S:  6bc537e386b0e92c2cbeef4e6f8713aba838f137 192.168.0.203:9001

    slots: (0 slots) slave

    replicates 7db64e29859983cc57acb6b02ba9f90ed6d4a2ab

M:  b01491cf1bb07bbcbc4d5abfdf181d04e274eb4d 192.168.0.203:6000

    slots:0-332,5461-5794,10923-11255 (1000 slots) master

    0 additional replica(s)

M:  ba355902c49493a7fff1b9689a19dcc019438a8a 192.168.0.203:8000

    slots:5795-10922 (5128 slots) master

    1 additional replica(s)

S:  4fa3f6acf3a1cbeaab19d3f3b3394957a5729eda 192.168.0.203:8001

    slots: (0 slots) slave

    replicates ba355902c49493a7fff1b9689a19dcc019438a8a

S: 8b6e6090e576bd31dbb9a5d896b482aab7c6af37  192.168.0.203:7001

    slots: (0 slots) slave

    replicates ad9aa41d76bd9554c36cfda867c51def07711868

[OK] All nodes agree about slots  configuration.

>>> Check for open slots...

>>> Check slots coverage...

[OK] All 16384 slots covered.

>>> Send CLUSTER MEET to node  192.168.0.203:6001 to make it join the cluster.

Waiting for the cluster to join.

>>> Configure node as replica of  192.168.0.203:6000.

[OK] New node added correctly.

 

檢查集羣狀態

# /home/roger/redis-3.2.5/src/redis-trib.rb  check  192.168.0.203:7000

>>> Performing Cluster Check  (using node 192.168.0.203:7000)

M:  ad9aa41d76bd9554c36cfda867c51def07711868 192.168.0.203:7000

    slots:333-5460 (5128 slots) master

    1 additional replica(s)

M: 7db64e29859983cc57acb6b02ba9f90ed6d4a2ab  192.168.0.203:9000

    slots:11256-16383 (5128 slots) master

    1 additional replica(s)

S:  79f0cbf6221fea7268bf076f57cbf2b3aac2c1d1 192.168.0.203:6001

   slots: (0 slots) slave

   replicates  b01491cf1bb07bbcbc4d5abfdf181d04e274eb4d

S: 6bc537e386b0e92c2cbeef4e6f8713aba838f137  192.168.0.203:9001

    slots: (0 slots) slave

    replicates 7db64e29859983cc57acb6b02ba9f90ed6d4a2ab

M:  b01491cf1bb07bbcbc4d5abfdf181d04e274eb4d 192.168.0.203:6000

    slots:0-332,5461-5794,10923-11255 (1000 slots) master

    1 additional replica(s)

M:  ba355902c49493a7fff1b9689a19dcc019438a8a 192.168.0.203:8000

    slots:5795-10922 (5128 slots) master

    1 additional replica(s)

S:  4fa3f6acf3a1cbeaab19d3f3b3394957a5729eda 192.168.0.203:8001

    slots: (0 slots) slave

    replicates ba355902c49493a7fff1b9689a19dcc019438a8a

S:  8b6e6090e576bd31dbb9a5d896b482aab7c6af37 192.168.0.203:7001

    slots: (0 slots) slave

    replicates ad9aa41d76bd9554c36cfda867c51def07711868

[OK] All nodes agree about slots  configuration.

>>> Check for open slots...

>>> Check slots coverage...

[OK] All 16384 slots covered.

    從上邊的打印信息能夠獲知,已經添加6001爲6000的Slave節點。

移除從節點

執行移除操做

         命令說明:

./redis-trib.rb  del-node 須要移除的SlaveIP和端口  該節點ID

# /home/roger/redis-3.2.5/src/redis-trib.rb  del-node  192.168.0.203:6001  79f0cbf6221fea7268bf076f57cbf2b3aac2c1d1

>>> Removing node  79f0cbf6221fea7268bf076f57cbf2b3aac2c1d1 from cluster 192.168.0.203:6001

>>> Sending CLUSTER FORGET  messages to the cluster...

>>> SHUTDOWN the node.

檢查集羣狀態

該節點已移除

# /home/roger/redis-3.2.5/src/redis-trib.rb  check  192.168.0.203:7000

M:  ad9aa41d76bd9554c36cfda867c51def07711868 192.168.0.203:7000

    slots:333-5460 (5128 slots) master

    1 additional replica(s)

M:  7db64e29859983cc57acb6b02ba9f90ed6d4a2ab 192.168.0.203:9000

    slots:11256-16383 (5128 slots) master

    1 additional replica(s)

S:  6bc537e386b0e92c2cbeef4e6f8713aba838f137 192.168.0.203:9001

    slots: (0 slots) slave

    replicates 7db64e29859983cc57acb6b02ba9f90ed6d4a2ab

M:  b01491cf1bb07bbcbc4d5abfdf181d04e274eb4d 192.168.0.203:6000

    slots:0-332,5461-5794,10923-11255 (1000 slots) master

    0 additional replica(s)

M:  ba355902c49493a7fff1b9689a19dcc019438a8a 192.168.0.203:8000

    slots:5795-10922 (5128 slots) master

    1 additional replica(s)

S: 4fa3f6acf3a1cbeaab19d3f3b3394957a5729eda  192.168.0.203:8001

    slots: (0 slots) slave

    replicates ba355902c49493a7fff1b9689a19dcc019438a8a

S:  8b6e6090e576bd31dbb9a5d896b482aab7c6af37 192.168.0.203:7001

    slots: (0 slots) slave

    replicates ad9aa41d76bd9554c36cfda867c51def07711868

[OK] All nodes agree about slots  configuration.

>>> Check for open slots...

>>> Check slots coverage...

[OK] All 16384 slots covered.

 

移除主節點

         Redis集羣中移除Master節點,須要先將Master節點上的hash槽先移動到其它的主節點上,再移除一個空的Master節點(沒有分配hash槽的Master節點)

從新分配hash

執行命令並設置移除hash槽的數量

    命令說明

        redis-trib.rbreshard  須要移動hash槽的Master節點的IP:端口

 

# /home/roger/redis-3.2.5/src/redis-trib.rb  reshard  192.168.0.203:6000

>>> Performing Cluster Check  (using node 192.168.0.203:6000)

M: b01491cf1bb07bbcbc4d5abfdf181d04e274eb4d  192.168.0.203:6000

   slots:0-332,5461-5794,10923-11255 (1000  slots) master

   0 additional replica(s)

S:  8b6e6090e576bd31dbb9a5d896b482aab7c6af37 192.168.0.203:7001

    slots: (0 slots) slave

    replicates ad9aa41d76bd9554c36cfda867c51def07711868

S:  6bc537e386b0e92c2cbeef4e6f8713aba838f137 192.168.0.203:9001

    slots: (0 slots) slave

    replicates 7db64e29859983cc57acb6b02ba9f90ed6d4a2ab

M:  7db64e29859983cc57acb6b02ba9f90ed6d4a2ab 192.168.0.203:9000

    slots:11256-16383 (5128 slots) master

    1 additional replica(s)

M:  ba355902c49493a7fff1b9689a19dcc019438a8a 192.168.0.203:8000

    slots:5795-10922 (5128 slots) master

    1 additional replica(s)

S:  4fa3f6acf3a1cbeaab19d3f3b3394957a5729eda 192.168.0.203:8001

    slots: (0 slots) slave

    replicates ba355902c49493a7fff1b9689a19dcc019438a8a

M:  ad9aa41d76bd9554c36cfda867c51def07711868 192.168.0.203:7000

    slots:333-5460 (5128 slots) master

    1 additional replica(s)

[OK] All nodes agree about slots configuration.

>>> Check for open slots...

>>> Check slots coverage...

[OK] All 16384 slots covered.

How many slots do you want to  move (from 1 to 16384)? 1000

         在這兒設置須要移動的hash槽的數量

設置hash槽的接收節點ID

選擇要接收這些hash槽的節點ID(這裏目前只能設置一個Master節點的節點ID)。

What is the receiving node ID? ad9aa41d76bd9554c36cfda867c51def07711868

設置移除hash槽的節點並退出設置

輸入被移除的節點ID(設置的ID爲移除節點的ID),而後輸入done退出設置

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:b01491cf1bb07bbcbc4d5abfdf181d04e274eb4d

Source node #2:done

肯定移動hash

打印被移動的hash槽後,輸入yes確認開始移動hash槽

Do you want to proceed with the proposed  reshard plan (yes/no)?yes

 

檢查集羣狀態

# /home/roger/redis-3.2.5/src/redis-trib.rb  check  192.168.0.203:7000

>>> Performing Cluster Check  (using node 192.168.0.203:7000)

M:  ad9aa41d76bd9554c36cfda867c51def07711868 192.168.0.203:7000

    slots:0-5794,10923-11255 (6128 slots) master

    1 additional replica(s)

M: 7db64e29859983cc57acb6b02ba9f90ed6d4a2ab  192.168.0.203:9000

    slots:11256-16383 (5128 slots) master

    1 additional replica(s)

S:  6bc537e386b0e92c2cbeef4e6f8713aba838f137 192.168.0.203:9001

    slots: (0 slots) slave

    replicates 7db64e29859983cc57acb6b02ba9f90ed6d4a2ab

M:  b01491cf1bb07bbcbc4d5abfdf181d04e274eb4d 192.168.0.203:6000

   slots: (0 slots) master

   0 additional replica(s)

M:  ba355902c49493a7fff1b9689a19dcc019438a8a 192.168.0.203:8000

    slots:5795-10922 (5128 slots) master

    1 additional replica(s)

S: 4fa3f6acf3a1cbeaab19d3f3b3394957a5729eda  192.168.0.203:8001

    slots: (0 slots) slave

    replicates ba355902c49493a7fff1b9689a19dcc019438a8a

S:  8b6e6090e576bd31dbb9a5d896b482aab7c6af37 192.168.0.203:7001

    slots: (0 slots) slave

    replicates ad9aa41d76bd9554c36cfda867c51def07711868

[OK] All nodes agree about slots  configuration.

>>> Check for open slots...

>>> Check slots coverage...

[OK] All 16384 slots covered.

         從上面的打印信息能夠獲知6000這個Master節點上的全部hash槽點已經移動到其它的Master節點上,當前6000這個Master節點爲一個空的Master節點。

移除空的master節點

# /home/roger/redis-3.2.5/src/redis-trib.rb  del-node  192.168.0.203:6000  b01491cf1bb07bbcbc4d5abfdf181d04e274eb4d

>>> Removing node  b01491cf1bb07bbcbc4d5abfdf181d04e274eb4d from cluster 192.168.0.203:6000

>>> Sending CLUSTER FORGET  messages to the cluster...

>>> SHUTDOWN the node.

 

檢查集羣狀態

# /home/roger/redis-3.2.5/src/redis-trib.rb  check  192.168.0.203:7000

>>> Performing Cluster Check  (using node 192.168.0.203:7000)

M:  ad9aa41d76bd9554c36cfda867c51def07711868 192.168.0.203:7000

    slots:0-5794,10923-11255 (6128 slots) master

    1 additional replica(s)

M:  7db64e29859983cc57acb6b02ba9f90ed6d4a2ab 192.168.0.203:9000

    slots:11256-16383 (5128 slots) master

    1 additional replica(s)

S: 6bc537e386b0e92c2cbeef4e6f8713aba838f137  192.168.0.203:9001

    slots: (0 slots) slave

    replicates 7db64e29859983cc57acb6b02ba9f90ed6d4a2ab

M:  ba355902c49493a7fff1b9689a19dcc019438a8a 192.168.0.203:8000

    slots:5795-10922 (5128 slots) master

    1 additional replica(s)

S: 4fa3f6acf3a1cbeaab19d3f3b3394957a5729eda  192.168.0.203:8001

    slots: (0 slots) slave

    replicates ba355902c49493a7fff1b9689a19dcc019438a8a

S:  8b6e6090e576bd31dbb9a5d896b482aab7c6af37 192.168.0.203:7001

    slots: (0 slots) slave

    replicates ad9aa41d76bd9554c36cfda867c51def07711868

[OK] All nodes agree about slots  configuration.

>>> Check for open slots...

>>> Check slots coverage...

[OK] All 16384 slots covered.

    從上邊的打印信息能夠獲知6000這個Master節點已經從當前Redis集羣中移除,因此成功移除了6000這個Master節點。

相關文章
相關標籤/搜索