上一篇文章,咱們搭建了Redis-cluster集羣,這篇博客跟你們講一下如何在一個運行的集羣上增長節點或者刪除節點。node
首先咱們要新創建一個節點,將redis01 複製一份改成redis07,而後修改端口號也改成7007 ,而後咱們執行[root@localhost redis07]# ./redis-server redis.conf 啓動之後,而後進行查看,發現有一個端口號爲7007的redis實例已經啓動了!咱們怎麼把這個redis 實例添加到集羣中呢。web
在將7007 端口號的redis實例添加到集羣以前,必定要確保這個redis實例沒有存儲過數據,也不能持久化的數據文件,不然在添加的時候會報錯的!咱們執行命令 ./redis-trib add-node127.0.0.1:7007 to cluster 127.0.0.1:7001 (若是這句命令有誤,能夠用這個: ./redis-trib add-node127.0.0.1:7007 127.0.0.1:7001)就能夠將端口號爲7007的實例添加到redis-cluster中。以下如所示。redis
咱們執行在任意一個客戶端下執行 cluster nodes 命令,能夠看到7007 已經做爲主節點添加到咱們的集羣中了,可是能夠看到他沒有分配哈希槽,沒有分配哈希槽的話表示就沒有存儲數據的能力,因此咱們須要將其餘節點上的哈希槽分配到這個節點上。緩存
下邊咱們看一下如何分配哈希槽。咱們隨便進入一個客戶端,而後咱們執行 ./redis-trib.rb reshard 192.168.20.140:7001, 就能夠看到以下圖所示提示,問咱們須要移動多少個哈希槽,咱們在這裏移動1000個。架構
完之後,又會問咱們須要覆蓋的節點id是什麼,這個id就是咱們新建立的節點id。而後讓咱們輸入源節點,若是這裏咱們輸入all的話,他會隨機的從全部的節點中抽取1000個做爲新節點的哈希槽。性能
咱們輸入all之後,會出下下圖所示東西,表示hash槽正在移動。spa
移動完之後,咱們進入客戶端,執行cluster nodes 命令,查看集羣節點的狀態,咱們會看到原來沒有哈希槽的7007節點,分配到了1000個哈希槽,並且是不連續的。說明是從原來的三個節點中抽取的。.net
這樣咱們一個新的節點就添加好了, 可是咱們發現總共是7個節點,其中的六個互爲住備,但有一個是有主,沒有備,因此咱們須要在爲該節點添加一個備份節點。咱們在建立一個實例,端口號爲7008,啓動之後咱們只命令./redis-trib.rb add-node --slave127.0.0.1:7008 127.0.0.1:7007 ,第一個實例127.0.0.1:7008爲備份節點,第二個實例127.0.0.1:7007爲主節點。而後咱們在執行,cluster nodes 命令,就會發現新添加的節點已經做爲7007 備份節點開始工做了!orm
刪除節點也分兩種,一種是主節點,一種是從節點。在從節點中,咱們沒有分配哈希槽,因此刪除很簡單,咱們直接執行./redis-trib.rb del-node 127.0.0.1:700865ee465423c925326a5137668541151b4c37d2d9 有兩個參數ip:port 和節點的id。 咱們就能夠將從節點從集羣中刪除了。server
而在刪除主節點的時候,由於在主節點中存放着數據,因此咱們在刪除以前,要把這些數據遷移走,而且把該節點上的哈希槽分配到其餘主節點上。
咱們執行./redis-trib.rb reshard 127.0.0.1:7007,問咱們有多少個哈希槽要移走,由於咱們這個節點上有1000 個因此咱們這裏輸入1000,以下如所示。
這樣期間會詢問咱們是否要重新分配,咱們輸入yes。而後就看到7007上的全部節點都被移動到了7001.這樣咱們就操做完了。而後再執行./redis-trib.rb del-node127.0.0.1:7007 61f786c40bcc170006a440abd7dc773e6dd15a19 ,就會看到7007 端口的實例也被從集羣中移除了。
咱們進入客戶端,看一下集羣節點的狀況。會看到7007 節點和7008 節點就都被咱們移除集羣了!
這篇博客爲你們說了集羣節點的維護,下一篇文章給你們說一下在程序中咱們如何使用redis集羣。