集羣節點分配原理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進行刪除;