在以前的一篇文章已經介紹了Redis Cluster及其部署,下面說下Redis Cluster平常操做命令:html
1、如下命令是Redis Cluster集羣所獨有的,執行下面命令須要先登陸redis:
[root@manage redis]# redis-cli -c -p 6382 -h 192.168.10.12 (客戶端命令:redis-cli -c -p port -h ip)
192.168.10.12:6382> 登陸redis後,在裏面能夠進行下面命令操做node
集羣
cluster info :打印集羣的信息
cluster nodes :列出集羣當前已知的全部節點( node),以及這些節點的相關信息。
節點
cluster meet <ip> <port> :將 ip 和 port 所指定的節點添加到集羣當中,讓它成爲集羣的一份子。
cluster forget <node_id> :從集羣中移除 node_id 指定的節點。
cluster replicate <master_node_id> :將當前從節點設置爲 node_id 指定的master節點的slave節點。只能針對slave節點操做。
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 槽中的鍵 。redis
2、集羣中Master的下線及恢復
1)Master下線後,其對應的Slaver節點會自動變爲Master節點,以下截圖:緩存
2)原來的Master重啓後變成Slaver節點,並是原來Master節點的Slaver節點bash
三,添加節點服務器
1)新配置二個測試節點 # cd /etc/redis //新增配置 # cp redis-6379.conf redis-6378.conf && sed -i "s/6379/6378/g" redis-6378.conf # cp redis-6382.conf redis-6385.conf && sed -i "s/6382/6385/g" redis-6385.conf //啓動 # redis-server /etc/redis/redis-6385.conf > /var/log/redis/redis-6385.log 2>&1 & # redis-server /etc/redis/redis-6378.conf > /var/log/redis/redis-6378.log 2>&1 & 2)添加主節點 # redis-trib.rb add-node 192.168.10.219:6378 192.168.10.219:6379 註釋: 192.168.10.219:6378是新增的節點 192.168.10.219:6379集羣任一個舊節點 3)添加從節點 # redis-trib.rb add-node --slave --master-id 03ccad2ba5dd1e062464bc7590400441fafb63f2 192.168.10.220:6385 192.168.10.219:6379 註釋: --slave,表示添加的是從節點 --master-id 03ccad2ba5dd1e062464bc7590400441fafb63f2,主節點的node id,在這裏是前面新添加的6378的node id 192.168.10.220:6385,新節點 192.168.10.219:6379集羣任一個舊節點 4)從新分配slot # redis-trib.rb reshard 192.168.10.219:6378 //下面是主要過程 How many slots do you want to move (from 1 to 16384)? 1000 //設置slot數1000 What is the receiving node ID? 03ccad2ba5dd1e062464bc7590400441fafb63f2 //新節點node id 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 //表示所有節點從新洗牌 Do you want to proceed with the proposed reshard plan (yes/no)? yes //確認從新分 新增長的主節點,是沒有slots的, M: 03ccad2ba5dd1e062464bc7590400441fafb63f2 192.168.10.219:6378 slots:0-332,5461-5794,10923-11255 (0 slots) master 主節點若是沒有slots的話,存取數據就都不會被選中。 能夠把分配的過程理解成打撲克牌,all表示你們從新洗牌;輸入某個主節點的node id,而後在輸入done的話,就比如從某個節點,抽牌。 5)查看一下,集羣狀況 [root@slave2 redis]# redis-trib.rb check 192.168.10.219:6379 Connecting to node 192.168.10.219:6379: OK Connecting to node 192.168.10.220:6385: OK Connecting to node 192.168.10.219:6378: OK Connecting to node 192.168.10.220:6382: OK Connecting to node 192.168.10.220:6383: OK Connecting to node 192.168.10.219:6380: OK Connecting to node 192.168.10.219:6381: OK Connecting to node 192.168.10.220:6384: OK >>> Performing Cluster Check (using node 192.168.10.219:6379) M: 5d8ef5a7fbd72ac586bef04fa6de8a88c0671052 192.168.10.219:6379 slots:5795-10922 (5128 slots) master 1 additional replica(s) S: 9c240333476469e8e2c8e80b089c48f389827265 192.168.10.220:6385 slots: (0 slots) slave replicates 03ccad2ba5dd1e062464bc7590400441fafb63f2 M: 03ccad2ba5dd1e062464bc7590400441fafb63f2 192.168.10.219:6378 slots:0-332,5461-5794,10923-11255 (1000 slots) master 1 additional replica(s) M: 19b042c17d2918fade18a4ad2efc75aa81fd2422 192.168.10.220:6382 slots:333-5460 (5128 slots) master 1 additional replica(s) M: b2c50113db7bd685e316a16b423c9b8abc3ba0b7 192.168.10.220:6383 slots:11256-16383 (5128 slots) master 1 additional replica(s) S: 6475e4c8b5e0c0ea27547ff7695d05e9af0c5ccb 192.168.10.219:6380 slots: (0 slots) slave replicates 19b042c17d2918fade18a4ad2efc75aa81fd2422 S: 1ee01fe95bcfb688a50825d54248eea1e6133cdc 192.168.10.219:6381 slots: (0 slots) slave replicates b2c50113db7bd685e316a16b423c9b8abc3ba0b7 S: 9a2a1d75b8eb47e05eee1198f81a9edd88db5aa1 192.168.10.220:6384 slots: (0 slots) slave replicates 5d8ef5a7fbd72ac586bef04fa6de8a88c0671052 [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered.
3、手動改變slave從節點所屬的master主節點(一個slave只能屬於一個master,而一個master能夠有多個slave)網絡
//查看一下6378的從節點 # redis-cli -p 6378 cluster nodes | grep slave | grep 03ccad2ba5dd1e062464bc7590400441fafb63f2 //將6385加入到新的master # redis-cli -c -p 6385 -h 192.168.10.220 192.168.10.220:6385> cluster replicate 5d8ef5a7fbd72ac586bef04fa6de8a88c0671052 //新master的node id OK 192.168.10.220:6385> quit //查看新master的slave # redis-cli -p 6379 cluster nodes | grep slave | grep 5d8ef5a7fbd72ac586bef04fa6de8a88c0671052
4、刪除節點測試
1)刪除從節點 # redis-trib.rb del-node 192.168.10.220:6385 '9c240333476469e8e2c8e80b089c48f389827265' 2)刪除主節點 若是主節點有從節點,將從節點轉移到其餘主節點 若是主節點有slot,去掉分配的slot,而後在刪除主節點 # redis-trib.rb reshard 192.168.10.219:6378 //取消分配的slot,下面是主要過程 How many slots do you want to move (from 1 to 16384)? 1000 //被刪除master的全部slot數量 What is the receiving node ID? 5d8ef5a7fbd72ac586bef04fa6de8a88c0671052 //接收6378節點slot的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:03ccad2ba5dd1e062464bc7590400441fafb63f2 //被刪除master的node-id Source node #2:done Do you want to proceed with the proposed reshard plan (yes/no)? yes //取消slot後,reshard 新增master節點後,也進行了這一步操做,當時是分配,如今去掉。反着的。 # redis-trib.rb del-node 192.168.10.219:6378 '03ccad2ba5dd1e062464bc7590400441fafb63f2' 新的master節點被刪除了,這樣就回到了,就是這篇文章開頭,尚未添加節點的狀態
5、複製遷移ui
在redis集羣中經過"cluster replicate <master_node_id> "命令能夠將一個slave節點從新配置爲另一個master的slave。 注意:這個只是針對slave節點,即登陸到slave節點的reids中,執行這個命令。 好比172.16.60.204:7003是172.16.60.202:7000主節點的slave節點,也能夠把他設置成172.16.60.205:7004主節點的slave節點。 172.16.60.205:7004主節點的ID是48cbab906141dd26241ccdbc38bee406586a8d03 則操做爲 [root@redis-new01 ~]# /data/redis-4.0.6/src/redis-cli -h 172.16.60.204 -c -p 7003 172.16.60.204:7003> cluster replicate 48cbab906141dd26241ccdbc38bee406586a8d03 OK 172.16.60.204:7003> 這樣172.16.60.204:7003節點就變成了172.16.60.205:7004主節點的slave節點,而再也不是172.16.60.202:7000主節點的slave節點! 這樣能夠自動的將一個複製節點從一個master下移動到另一個master下。 這種狀況下的複製節點的自動重配置被稱爲複製遷移。 複製遷移能夠提高系統的可靠性和抗災性。 在某種狀況下,你想讓集羣的複製節點從一個master遷移到另外一個master的緣由多是: 集羣的抗崩潰能力老是跟集羣中master 擁有的平均slave數量成正比。 好比,若是一個集羣中每一個master只有一個slave,當master和slave都掛掉的時候這個集羣就崩潰了。由於此時有一些哈希槽沒法找到了。 雖然網絡分裂會把一堆節點從集羣中孤立出來(這樣你一下就會知道集羣出問題了),可是其餘的更常見的硬件或者軟件的問題並不會在多臺機器上同時發生, 因此很 可能在你的這個集羣(平均每一個master只有一個slave)有一個slave在早上4點掛掉,而後他的master在隨後的早上6點掛掉。這樣依然會 致使集羣崩潰。 能夠經過給每一個master都再多加一個slave節點來改進系統的可靠性,可是這樣很昂貴。複製遷移容許只給某些master增長slave。比方說你的集羣有20個節點, 10個master,每一個master都有1個slave。而後你增長3個 slave到集羣中並把他們分配給某幾個master節點,這樣某些master就會擁有多於1個slave。 當某個 master失去了slave的時候,複製遷移能夠將slave節點從擁有富餘slave的master旗下遷移給沒有slave的master。因此當 你的slave在早上4點掛掉的時候, 另外一個slave會被遷移過來取代它的位置,這樣當master節點在早上5點掛掉的時候,依然有一個slave可 以被選舉爲master,集羣依然能夠正常運行。 因此簡而言之,關於複製遷移應該注意下面幾個方面: - 集羣在遷移的時候會嘗試去遷移擁有最多slave數量的master旗下的slave。 - 想利用複製遷移特性來增長系統的可用性,你只須要增長一些slave節點給單個master(哪一個master節點並不重要)。 - 複製遷移是由配置項cluster-migration-barrier控制的
6、升級節點spa
升級從服務器節點很簡單,由於你只須要中止節點而後用已更新的Redis版本重啓。若是有客戶端使用從服務器節點分離讀請求,它們應該可以在某個節點 不可用時從新鏈接另外一個從服務器。 升級主服務器要稍微複雜一些,建議的步驟是: 1)使用cluster failover來觸發一次手工故障轉移主服務器(請看本文檔的手工故障轉移小節)。 2)等待主服務器變爲從服務器。 3)像升級從服務器那樣升級這個節點。 4)若是你想讓你剛剛升級的節點成爲主服務器,觸發一次新的手工故障轉移,讓升級的節點從新變回主服務器。 能夠按照這些步驟來一個節點一個節點的升級,直到所有節點升級完畢。
目前redis cluster集羣的啓動只能空節點啓動,當節點有數據時會有err警告,可是隻要進行fix就行了 redis-trib.rb fix 用這個命令修復下就OK了。
7、Redis緩存清理
1)登錄redis # src/redis-cli -c -h 192.168.1.100 -p 6379 2)執行: 192.168.1.100:6379> dbsize 3) 192.168.1.100:6379> flushall ================================================================ redis集羣指定key值得緩存清理: 1)登陸至指定端口的redis服務器 # src/redis-cli -c -h 192.168.1.100 -p 6379 2)查看全部key值 (或者使用info命令也能查看出來) keys * 3)刪除指定索引的值 del key