Redis搭建(五):Cluster集羣搭建

1、方案

1. 介紹node

  • redis3.0及以上版本實現,集羣中至少應該有奇數個節點,因此至少有三個節點,官方推薦三主三從的配置方式
  • 使用哈希槽的概念,Redis 集羣有16384個哈希槽,每一個key經過CRC16校驗後對16384取模來決定放置哪一個槽。集羣的每一個節點負責一部分hash槽。
  • 使用主從複製模型,每一個節點都會有N-1個slave。若是master不可用,會選舉slave爲新的master繼續服務;若是同個節點的master和slave都失效,整個集羣將不可用。

2. 集羣的不足:redis

  • Redis集羣並不支持處理多個key的操做,由於這須要在不一樣的節點間移動數據,從而達不到像Redis那樣的性能,在高負載的狀況下可能會致使不可預料的錯誤。舉例來講,當兩個set映射到不一樣的redis實例上時,你就不能對這兩個set執行交集操做。
  • 涉及多個key的redis事務不能使用。

2、集羣的搭建

1. 準備配置文件
建立cluster目錄,並建立6個配置文件ruby

 

2. 修改配置文件app

port 7000 //端口7000,7002,7003..
daemonize yes //redis後臺運行
pidfile ./redis_7000.pid //pidfile文件對應7000,7001,7002
cluster-enabled yes //開啓集羣 把註釋#去掉
cluster-config-file nodes_7000.conf //集羣的配置 配置文件首次啓動自動生成 7000,7001,7002
cluster-node-timeout 15000 //請求超時 默認15秒,可自行設置
appendonly yes //aof日誌開啓 有須要就開啓,它會每次寫操做都記錄一條日誌

//若設置密碼,master和slave需同時配置下面兩個參數:
masterauth "12345678"    //鏈接master的密碼
requirepass "12345678"    //本身的密碼

 

3. 啓動、測試全部redis實例性能

  • 建立啓動文件:vi start-all.sh
  • 賦予權限:chmod u+x start-all.sh
  • 啓動:./start-all.sh

 

4. 安裝redis-trib所需的 ruby腳本
ruby redis-trib.rb //測試是否安裝成功,若已經安裝過,可跳過此步測試

安裝ui

cp /usr/andy/redis/redis-3.2.0/src/redis-trib.rb .
yum install ruby
yum install rubygems
gem install redis-3.2.2.gem //需下載redis-3.2.2.gem

 

5. 使用redis-trib.rb建立集羣
執行下面命令建立集羣(需爲真實ip,否則外網沒法訪問):spa

./redis-trib.rb create --replicas 1 192.168.0.217:7000 192.168.0.217:7001 192.168.0.217:7002 192.168.0.217:7003 192.168.0.217:7004 192.168.0.217:7005

能夠看到:.net

  • 7003是7000主節點的從節點,管理槽0-5460
  • 7004是7001主節點的從節點,管理槽5461-10992
  • 7005是7002主節點的從節點,管理槽10992-16383

3、測試

一、測試存取值3d

登陸從節點,查看

 

二、主從切換
結束主節點7000進程,發現7003成了master,而7000節點的狀態爲fail

 

恢復7000節點,發現變成了7003的slave

4、集羣經常使用命令

1. 集羣客戶端命令(redis-cli -c -p port)

集羣

cluster info :打印集羣的信息
cluster nodes :列出集羣當前已知的全部節點( node),以及這些節點的相關信息。


節點

cluster meet ip port:將 ip 和 port 所指定的節點添加到集羣當中,讓它成爲集羣的一份子。
cluster forget <node_id> :從集羣中移除 node_id 指定的節點。
cluster replicate <node_id> :將當前節點設置爲 node_id 指定的節點的從節點。
cluster saveconfig :將節點的配置文件保存到硬盤裏面。


槽(slot)

cluster addslots <slot> [slot ...] :將一個或多個槽( slot)指派( assign)給當前節點。
cluster delslots <slot> [slot ...] :移除一個或多個槽對當前節點的指派。
cluster flushslots :移除指派給當前節點的全部槽,讓當前節點變成一個沒有指派任何槽的節點。
cluster setslot <slot> node <node_id> :將槽 slot 指派給 node_id 指定的節點,若是槽已經指派給另外一個節點,那麼先讓另外一個節點刪除該槽>,而後再進行指派。
cluster setslot <slot> migrating <node_id> :將本節點的槽 slot 遷移到 node_id 指定的節點中。
cluster setslot <slot> importing <node_id> :從 node_id 指定的節點中導入槽 slot 到本節點。
cluster setslot <slot> stable :取消對槽 slot 的導入( import)或者遷移( migrate)。


cluster keyslot <key> :計算鍵 key 應該被放置在哪一個槽上。
cluster countkeysinslot <slot> :返回槽 slot 目前包含的鍵值對數量。
cluster getkeysinslot <slot> <count> :返回 count 個 slot 槽中的鍵

 

2. redis-trib.rb命令詳解

  • 查看redis-trib.rb的參數: ./redis-trib.rb或ruby redis-trib.rb help
  • 命令格式:./redis-trib.rb <參數> ip:port

下面是經常使用的參數:

一、create:建立集羣
二、check:檢查集羣
三、info:查看集羣信息
四、fix:修復集羣
五、reshard:在線遷移slot
六、rebalance:平衡集羣節點slot數量
七、add-node:將新節點加入集羣
八、del-node:從集羣中刪除節點
九、set-timeout:設置集羣節點間心跳鏈接的超時時間
十、call:在集羣所有節點上執行命令
十一、import:將外部redis數據導入集羣
相關文章
相關標籤/搜索