Redis-Cluster搭建筆記

集羣節點分配原理node


Redis Cluster可靠集羣至少須要3個節點,6個Redis實例(3M3S),每一個節點上保存1M1S實例且不能互爲主從,固然這些Redis Cluster會自動分配。redis

該狀況下,集羣的16384個slot會被分配至3個Master節點上,分別爲:算法

M1:0 - 5460centos

M2:5461 - 10922ruby

M3:10923 - 16383bash

集羣的HASH算法爲:CRC16('key')%16384,根據結果分配至目標Master實例;網絡


 

 

安裝redis實例app


 

1:準備3個CentOS7節點,注意打開須要的端口ui

2:下載redis-4.0.8源碼,地址爲:https://redis.io/download/spa

3:解壓壓縮包並安裝:

tar -xzf redis-4.0.8.tar.gz
cd redis-4.0.8
make
make install PREFIX=/usr/etc/redis-cluster

4:進入集羣目錄/usr/etc/redis-cluster

5:修改bin文件夾爲redis01,並複製redis.conf配置文件至redis01目錄

6:修改配置文件redis.con:

daemonize yes            # 之後臺進程運行
port 7001                    # 監聽端口
cluster-enabled yes        # 開啓cluster
cluster-config-file nodes.conf    # 集羣節點文件
appendonly yes

除此之外,爲支持網絡鏈接,須要將redis的保護模式關閉,或設置訪問密碼:

protected-mode no                # 保護模式關閉
requirepass                            # 訪問密碼

7:複製redis01至redis02-redis06,一共六份,分別對應6個實例,修改相關的redis.conf,分配各自的端口號(或IP地址)


 

 

安裝redis cluster集羣


 

1:複製redis源碼文件夾下src下的redis-trib.rb至redis-cluster目錄

cp /usr/etc/redis-4.0.8/src/redis-trib.rb /usr/etc/redis-cluster

2:安裝ruby及rubygems

yum install ruby 
yum install rubygems

3:CentOS7的yum安裝的ruby版本爲2.0.0,須要升級:

yum install centos-release-scl-rh      # 會在/etc/yum.repos.d/目錄下多出一個CentOS-SCLo-scl-rh.repo源 
yum install rh-ruby23  -y         # 直接yum安裝便可  
scl  enable  rh-ruby23 bash        # 必要一步
ruby -v # 可查看ruby版本爲2.3

4:以後安裝gem的redis,如下未指定版本,對redis-4.0.8會安裝redis-4.0.1.gem

gem install redis

5:編寫全部實例的啓動腳本:

cd redis01
./redis-server redis.conf
cd ..
cd redis02
./redis-server redis.conf
cd ..
cd redis03
./redis-server redis.conf
cd ..
cd redis04
./redis-server redis.conf
cd ..
cd redis05
./redis-server redis.conf
cd ..
cd redis06
./redis-server redis.conf
cd ..

6:設置腳本權限並啓動

chmod 777 ./start-all.sh
./start-all.sh

7:可用如下指令查看redis實例狀態,或關閉全部節點服務

ps -ef | grep redis         # 查看redis實例狀態
pkill -9 redis            # 殺死全部redis進程

8:使用redis-trib.rb建立集羣

./redis-trib.rb create --replicas 1 192.168.137.129:7001 192.168.137.129:7002 192.168.137.129:7003 192.168.137.129:7004 192.168.137.129:7005 192.168.137.129:7006

9:檢查集羣

./redis-trib.rb check 192.168.137.129:7001
./redis-trib.rb info 192.168.137.129:7001

正常狀況下集羣建立完畢,6個實例組成3M3S集羣,客戶端使用時可鏈接集羣中任意一個節點(經過配置鏈接池便可);


 

集羣擴容及縮容、Reshard


 

1:向集羣中添加新的節點

 先向192.168.137.129:7001實例所在集羣添加一個新的Master節點(節點IP爲192.168.137.129:7007,紅色散列值爲節點ID):

./redis-trib.rb add-node --master-id 19007025ca203a9c12878549aa8e50a1627a5353 192.168.137.129:7007 192.168.137.129:7001

 再向節點添加Slave節點(節點IP爲192.168.137.129:7008),如不指定Master節點的話,會默認掛接Slave節點最少的主節點:

./redis-trib.rb add-node --slave 192.168.137.129:7008 192.168.137.129:7001

 

2:檢查集羣當前狀態,正常狀況下目前集羣是一個4M4S的集羣,但新增節點未分配Slot,可經過reshard指令從新分配slot:

./redis-trib.rb reshard 192.168.137.129:7001

開始對192.168.137.129:7001實例所在集羣開始從新分配slot,根據命令行提示,會須要指定將多少slot分配至新節點,以及新節點的節點ID(散列值);

在指定來源節點的時候,若是但願從整個集羣平均分配slot至新節點,則直接輸入all便可。

 

3:移除集羣中的節點

./redis-trib.rb del-node 192.168.137.129:7008  ${node-id} 

node-id爲節點ID(散列值)

須要注意的是:

若是刪除節點爲M節點,則須要先將該節點上的slot從新reshard到該集羣中其它M節點之上才能移除該節點;

若是刪除節點爲S節點,則可直接使用del-node進行刪除;

相關文章
相關標籤/搜索