1. 程式人生 > >redis叢集新增節點和刪除節點

redis叢集新增節點和刪除節點

redis叢集新增節點

1、主節點:如果新增的是主節點,那麼我們需要建立一個空節點,然後將某些雜湊槽移動到這個空節點裡面。

2、從節點:如果新增的是從節點,我們也需要建立一個空節點,然後把這個新節點設定成叢集中某個主節點的複製品。

新增節點:

1、首先把需要新增的節點啟動

建立7006目錄,拷貝7000中的redis.conf到7006中,然後修改埠port為7006,修改好後進入7006目錄啟動這個節點:

redis-server redis.conf

2、執行以下命令,將這個新節點新增到叢集中:

redis-trib.rb add-node 192.168.33.130:7006 192.168.33.130:7000

 結果圖示:

3、執行命令檢視剛才新增的節點:

redis-cli -c -p 7000 cluster nodes

 

4、增加了新的節點之後,這個新的節點可以成為主節點或者是從節點

     4.1將這個新增節點變成從節點

前面我們已經把這個新節點新增到叢集中了,現在我們要讓新節點成為192.168.33.130:7001的從節點,只需要執行下面的命令就可以了,命令後面的節點ID就是192.168.33.130:7001的節點ID。(注意,這個從節點雜湊槽必須為空,如果不為空,則需要轉移掉雜湊槽使之為空)

redis-cli -c -p 7006 cluster replicate a246963893faf03c45cc19ef4188f82f5393bfef

 

使用下面命令來確認一下192.168.33.130:7006是否已經成為192.168.33.130:7001的從節點。

redis-cli -p 7000 cluster nodes | grep slave | grep a246963893faf03c45cc19ef4188f82f5393bfef

 

     4.2、將這個新增節點變成主節點:

使用redis-trib程式,將叢集中的某些雜湊槽移動到新節點裡面,這個新節點就成為真正的主節點了。執行下面的命令對叢集中的雜湊槽進行移動:

redis-trib.rb reshard 192.168.33.130:7000

命令執行後,系統會提示我們要移動多少雜湊槽,這裡移動1000個

 然後還需要指定把這些雜湊槽轉移到哪個節點上

輸入我們剛才新增的節點的ID

d113e0f033c98e2f6b88fb93e6e98866256d85c4

然後需要我們指定轉移哪幾個幾點的雜湊槽

 輸入all 表示從所有的主節點中隨機轉移,湊夠1000個雜湊槽

然後再輸入yes,redis叢集就開始分配雜湊槽了。

至此,一個新的主節點就新增完成了,執行命令檢視現在的叢集中節點的狀態

redis-cli -c -p 7000 cluster nodes

結果圖示:

 

 

 Redis叢集刪除節點

1、如果刪除的節點是主節點,這裡我們刪除192.168.33.130:7006節點,這個節點有1000個雜湊槽

首先要把節點中的雜湊槽轉移到其他節點中,執行下面的命令:

redis-trib.rb reshard 192.168.33.130:7000

系統會提示我們要移動多少雜湊槽,這裡移動1000個,因為192.168.33.130:7006節點有1000個雜湊槽。

 然後系統提示我們輸入要接收這些雜湊槽的節點的ID,這裡使用192.168.33.130:7001的節點ID

 然後要我們選擇從那些節點中轉出雜湊槽,這裡一定要輸入192.168.33.130:7006這個節點的ID

最後輸入done表示輸入完畢。

最後一步,使用下面的命令把這個節點刪除

如果是從節點,直接刪除即可。

redis-trib.rb del-node 192.168.33.130:7000 d113e0f033c98e2f6b88fb93e6e98866256d85c4   //最後一個引數為需要刪除節點的ID

 

 

 

java操作redis叢集 

向Redis叢集中存入鍵值:

程式碼示例:

import java.util.HashSet;
//需要再pom.xml中引入jedis依賴
import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisCluster;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
 
public class RedisCluster {
    public static void main(String[] args) {
        //初始化集合,用於裝下面的多個主機和埠
        HashSet<HostAndPort> nodes = new HashSet<HostAndPort>();
        
        //建立多個主機和埠例項
        HostAndPort hostAndPort = new HostAndPort("192.168.33.130", 7000);
        HostAndPort hostAndPort1 = new HostAndPort("192.168.33.130", 7001);
        HostAndPort hostAndPort2 = new HostAndPort("192.168.33.130", 7002);
        HostAndPort hostAndPort3 = new HostAndPort("192.168.33.130", 7003);
        HostAndPort hostAndPort4 = new HostAndPort("192.168.33.130", 7004);
        HostAndPort hostAndPort5 = new HostAndPort("192.168.33.130", 7005);
        
        //新增多個主機和埠到集合中
        nodes.add(hostAndPort);
        nodes.add(hostAndPort1);
        nodes.add(hostAndPort2);
        nodes.add(hostAndPort3);
        nodes.add(hostAndPort4);
        nodes.add(hostAndPort5);
        
        //建立config
        JedisPoolConfig poolConfig = new JedisPoolConfig();
        //通過config建立叢集例項
        JedisCluster jedisCluster = new JedisCluster(nodes,poolConfig);
        //獲取叢集中的key為name鍵的值
        String str = jedisCluster.get("name");
        System.out.println(str);
    }
}


列印結果:

Alice