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


一、方案

1. 介紹

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

2. 集群的不足:

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

二、集群的搭建

1. 准備配置文件
創建cluster目錄,並創建6個配置文件

 

2. 修改配置文件

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 //測試是否安裝成功,若已經安裝過,可跳過此步

安裝

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,不然外網無法訪問):

./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

可以看到:

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

三、測試

1、測試存取值

登錄從節點,查看

 

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

 

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

四、集群常用命令

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

下面是常用的參數:

1、create:創建集群
2、check:檢查集群
3、info:查看集群信息
4、fix:修復集群
5、reshard:在線遷移slot
6、rebalance:平衡集群節點slot數量
7、add-node:將新節點加入集群
8、del-node:從集群中刪除節點
9、set-timeout:設置集群節點間心跳連接的超時時間
10、call:在集群全部節點上執行命令
11、import:將外部redis數據導入集群

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM