暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Redis-3:集群

suger 2023-06-08
96


14、Redis集群

在哨兵模式中,仍然只有一个Master节点。当并发写请求较大时,哨兵模式并不能缓解写压力。我们知道只有主节点才具有写能力,那如果在一个集群中,能够配置多个主节点,是不是就可以缓解写压力了呢?这个就是redis-cluster集群模式。

Redis-cluster集群概念

(1)由多个Redis服务器组成的分布式网络服务集群;

(2)集群之中有多个Master主节点,每一个主节点都可读可写;

(3)节点之间会互相通信,两两相连;

(4)Redis集群无中心节点。

故障转移

(1) Redis集群的主节点内置了类似Redis Sentinel的节点故障检测和自动故障转移功能,当集群中的某个主节点下线时,集群中的其他在线主节点会注意到这一点,并对已下线的主节点进行故障转移。

(2) 集群进行故障转移的方法和Redis Sentinel进行故障转移的方法基本一样,不同的是,在集群里面,故障转移是由集群中其他在线的主节点负责进行的,所以集群不必另外使用Redis Sentinel。

 

集群分片策略

(1) Redis-cluster分片策略,是用来解决key存储位置的。

(2) 集群将整个数据库分为16384个槽位slot,所有key-value数据都存储在这些slot中的某一个上。一个slot槽位可以存放多个数据,key的槽位计算公式为:slot_number=crc16(key)%16384,其中crc16为16位的循环冗余校验和函数。

(3) 集群中的每个主节点都可以处理0个至16383个槽,当16384个槽都有某个节点在负责处理时,集群进入上线状态,并开始处理客户端发送的数据命令请求。

 

集群redirect转向

(1) 由于Redis集群无中心节点,请求会随机发给任意主节点;

(2) 主节点只会处理自己负责槽位的命令请求,其它槽位的命令请求,该主节点会返回客户端一个转向错误;

(3) 客户端根据错误中包含的地址和端口重新向正确的负责的主节点发起命令请求。

 

图示:

 

14.1、Redis集群搭建

步1、规划

Redis集群最少需要6个节点,3主3从,可以分布在一台或者多台主机上。

真集群:6台主机,每台主机的redis服务使用的IP不同,端口号随意,一样不一样都可以

假集群,一台主机,redis服务使用的IP相同,端口号不同

本例子是在一台主机上创建假集群,不同的端口表示不同的redis节点,如下:

主节点:127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003

从节点:127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006

 

步2、创建cluster/700x目录

在REDIS_HOME目录下,创建cluster/700x目录。

# mkdir -p cluster/{7001,7002,7003,7004,7005,7006}

 

步3、添加配置文件

将redis.conf保存到700x各一份,并修改以下配置:

# cp redis.conf cluster/7001/

配置内容:(其他几个配置文件,根据端口号依次修改)

bind  0.0.0.0

port 7001

daemonize yes

pidfile  /var/run/redis_7001.pid

dir "./"        # node.conf文件保存路径

logfile     "/var/log/redis/7001.log"  

appendonly yes

appendfsync always

cluster-enabled yes

cluster-config-file nodes-7001.conf #  该文件中包含集群信息,在生成redis集群时,由redis自动生成,保存到当前目录下

 

步4、启动每一个节点

开发一个脚本文件,便于一次启动所有节点,启动时,必须要进入700x目录,这样cluster-config-file会自动生成到这个目录下:

start-all.sh

 

#!/bin/bash

cd ./7001 && app/redis-5.0.5/src/redis-server redis.conf

cd ../7002 && /app/redis-5.0.5/src/redis-server redis.conf

cd ../7003 && /app/redis-5.0.5/src/redis-server redis.conf

cd ../7004 && /app/redis-5.0.5/src/redis-server redis.conf

cd ../7005 && /app/redis-5.0.5/src/redis-server redis.conf

cd ../7006 && /app/redis-5.0.5/src/redis-server redis.conf

cd ..

 

#chmod +x start-all.sh

 

启动:

./start-all.sh

 

查看进程:

[root@server101 7006]# ps -aux | grep redis

root   3053  0.1  0.1 144532  2548 ?        Ssl  12:46   0:00 /app/redis-5.0.5/src/redis-server 0.0.0.0:7001 [cluster]

root   3055  0.1  0.1 144532  2548 ?        Ssl  12:46   0:00 /app/redis-5.0.5/src/redis-server 0.0.0.0:7002 [cluster]

root   3057  0.1  0.1 144532  2552 ?        Ssl  12:46   0:00 /app/redis-5.0.5/src/redis-server 0.0.0.0:7003 [cluster]

root   3059  0.1  0.1 144532  2548 ?        Ssl  12:46   0:00 /app/redis-5.0.5/src/redis-server 0.0.0.0:7004 [cluster]

root   3061  0.1  0.1 144532  2552 ?        Ssl  12:46   0:00 /app/redis-5.0.5/src/redis-server 0.0.0.0:7005 [cluster]

root   3127  0.0  0.1 144532  2548 ?        Ssl  12:48   0:00 /app/redis-5.0.5/src/redis-server 0.0.0.0:7006 [cluster]

 

使用tree命令,查看创建的文件:

[root@server101 cluster]# tree .

.

├── 7001

│   ├── appendonly.aof

│   ├── nodes-7001.conf

│   └── redis.conf

├── 7002

│   ├── appendonly.aof

│   ├── nodes-7002.conf

│   └── redis.conf

├── 7003

│   ├── appendonly.aof

│   ├── nodes-7003.conf

│   └── redis.conf

├── 7004

│   ├── appendonly.aof

│   ├── nodes-7004.conf

│   └── redis.conf

├── 7005

│   ├── appendonly.aof

│   ├── nodes-7005.conf

│   └── redis.conf

├── 7006

│   ├── appendonly.aof

│   ├── nodes-7006.conf

│   └── redis.conf

└── start-all.sh

 

 

停止的脚本stop-all.sh文件:

#!/bin/bash

pgrep redis-server | xargs -exec kill -9

 

设置可执行:

#chmod  +x  stop-all.sh

 

 

停止后再次启动,不会再次创建node-700x.conf文件,因为之前已经创建:

[root@server101 cluster]# vim stop-all.sh

[root@server101 cluster]# ./stop-all.sh

[root@server101 cluster]# ps -aux | grep redis

root      3188  0.0  0.0 112728   972 pts/1    S+   12:53   0:00 grep --color=auto redis

[root@server101 cluster]# ./start-all.sh

[root@server101 cluster]# ps -aux | grep redis

root   3191  0.2  0.1 144532  2556 ?        Ssl  12:53   0:00 /app/redis-5.0.5/src/redis-server 0.0.0.0:7001 [cluster]

root   3196  0.1  0.1 144532  2556 ?        Ssl  12:53   0:00 /app/redis-5.0.5/src/redis-server 0.0.0.0:7002 [cluster]

root   3201  0.1  0.1 144532  2552 ?        Ssl  12:53   0:00 /app/redis-5.0.5/src/redis-server 0.0.0.0:7003 [cluster]

root   3206  0.1  0.1 144532  2552 ?        Ssl  12:53   0:00 /app/redis-5.0.5/src/redis-server 0.0.0.0:7004 [cluster]

root   3211  0.1  0.1 144532  2552 ?        Ssl  12:53   0:00 /app/redis-5.0.5/src/redis-server 0.0.0.0:7005 [cluster]

root   3216  0.1  0.1 144532  2548 ?        Ssl  12:53   0:00 /app/redis-5.0.5/src/redis-server 0.0.0.0:7006 [cluster]

 

步5、执行集群命令

[root@server101 cluster]# /app/redis-5.0.5/src/redis-cli \

> --cluster create \

> 192.168.56.101:7001 192.168.56.101:7002 192.168.56.101:7003 \

> 192.168.56.101:7004 192.168.56.101:7005 192.168.56.101:7006 \

> --cluster-replicas 1

以下是执行的结果:

>>> Performing hash slots allocation on 6 nodes...

Master[0] -> Slots 0 - 5460

Master[1] -> Slots 5461 - 10922

Master[2] -> Slots 10923 - 16383

Adding replica 192.168.56.101:7005 to 192.168.56.101:7001

Adding replica 192.168.56.101:7006 to 192.168.56.101:7002

Adding replica 192.168.56.101:7004 to 192.168.56.101:7003

>>> Trying to optimize slaves allocation for anti-affinity

[WARNING] Some slaves are in the same host as their master

M: b2d9a70f96e4b382a51b8c0c43d891336e9dda1a 192.168.56.101:7001

   slots:[0-5460] (5461 slots) master

M: ca57fd6745a5fb4061169a0c0b885da145f75dfd 192.168.56.101:7002

   slots:[5461-10922] (5462 slots) master

M: 4c193abb8928d21a3bb043ed9ee76035fc01b557 192.168.56.101:7003

   slots:[10923-16383] (5461 slots) master

S: 170cfc9bd661385575f37dce67e74b2ed84ae4a1 192.168.56.101:7004

   replicates ca57fd6745a5fb4061169a0c0b885da145f75dfd

S: cbcb3ff96d650258946514b60274efb6ec3a60d2 192.168.56.101:7005

   replicates 4c193abb8928d21a3bb043ed9ee76035fc01b557

S: 67fd36b8dd0db9556a82fec6f7ee839b18919329 192.168.56.101:7006

   replicates b2d9a70f96e4b382a51b8c0c43d891336e9dda1a

Can I set the above configuration? (type 'yes' to accept): yes  输入yes

>>> Nodes configuration updated

>>> Assign a different config epoch to each node

>>> Sending CLUSTER MEET messages to join the cluster

Waiting for the cluster to join

.....

>>> Performing Cluster Check (using node 192.168.56.101:7001)

M: b2d9a70f96e4b382a51b8c0c43d891336e9dda1a 192.168.56.101:7001

   slots:[0-5460] (5461 slots) master 主节点及槽值

   1 additional replica(s)

S: 67fd36b8dd0db9556a82fec6f7ee839b18919329 192.168.56.101:7006

   slots: (0 slots) slave

   replicates b2d9a70f96e4b382a51b8c0c43d891336e9dda1a

S: 170cfc9bd661385575f37dce67e74b2ed84ae4a1 192.168.56.101:7004

   slots: (0 slots) slave

   replicates ca57fd6745a5fb4061169a0c0b885da145f75dfd

M: 4c193abb8928d21a3bb043ed9ee76035fc01b557 192.168.56.101:7003

   slots:[10923-16383] (5461 slots) master 主节点及槽值

   1 additional replica(s)

S: cbcb3ff96d650258946514b60274efb6ec3a60d2 192.168.56.101:7005

   slots: (0 slots) slave

   replicates 4c193abb8928d21a3bb043ed9ee76035fc01b557

M: ca57fd6745a5fb4061169a0c0b885da145f75dfd 192.168.56.101:7002

   slots:[5461-10922] (5462 slots) master 主节点及槽值

   1 additional replica(s)

[OK] All nodes agree about slots configuration.

>>> Check for open slots...

>>> Check slots coverage...

[OK] All 16384 slots covered.

 

 

步6、查看节点信息

查看集群信息,需要添加-c参数。

 

[root@server101 cluster]# /app/redis-5.0.5/src/redis-cli -h 192.168.56.101 -p 7001 -c cluster nodes

 

以下是显示的结果信息:

67fd36b8dd0db9556a82fec6f7ee839b18919329 192.168.56.101:7006@17006 slave b2d9a70f96e4b382a51b8c0c43d891336e9dda1a 0 1570337965876 6 connected

 

170cfc9bd661385575f37dce67e74b2ed84ae4a1 192.168.56.101:7004@17004 slave ca57fd6745a5fb4061169a0c0b885da145f75dfd 0 1570337965000 4 connected

 

4c193abb8928d21a3bb043ed9ee76035fc01b557 192.168.56.101:7003@17003 master - 0 1570337966958 3 connected 10923-16383

 

cbcb3ff96d650258946514b60274efb6ec3a60d2 192.168.56.101:7005@17005 slave 4c193abb8928d21a3bb043ed9ee76035fc01b557 0 1570337967965 5 connected

 

ca57fd6745a5fb4061169a0c0b885da145f75dfd 192.168.56.101:7002@17002 master - 0 1570337966000 2 connected 5461-10922

 

b2d9a70f96e4b382a51b8c0c43d891336e9dda1a 192.168.56.101:7001@17001 myself,master - 0 1570337967000 1 connected 0-5460

 

 


 

参数说明:

 

-c:表示以集群方式连接惹redis

-h:指定IP地址

-p:指定端口

cluster nodes:查询集群节点信息

cluster info:查询集群状态信息

 

 

 

[root@server101 cluster]# /app/redis-5.0.5/src/redis-cli -h 192.168.56.101 -p 7001 -c cluster info

cluster_state:ok

cluster_slots_assigned:16384

cluster_slots_ok:16384

cluster_slots_pfail:0

cluster_slots_fail:0

cluster_known_nodes:6

cluster_size:3

cluster_current_epoch:6

cluster_my_epoch:1

cluster_stats_messages_ping_sent:308

cluster_stats_messages_pong_sent:321

cluster_stats_messages_sent:629

cluster_stats_messages_ping_received:316

cluster_stats_messages_pong_received:308

cluster_stats_messages_meet_received:5

cluster_stats_messages_received:629

 

或使用--cluster check检查状态:

[root@server101 cluster]# /app/redis-5.0.5/src/redis-cli --cluster check 192.168.56.101:7004

192.168.56.101:7003 (4c193abb...) -> 0 keys | 5461 slots | 1 slaves.

192.168.56.101:7001 (b2d9a70f...) -> 0 keys | 5461 slots | 1 slaves.

192.168.56.101:7002 (ca57fd67...) -> 0 keys | 5462 slots | 1 slaves.

[OK] 0 keys in 3 masters.

0.00 keys per slot on average.

>>> Performing Cluster Check (using node 192.168.56.101:7004)

S: 170cfc9bd661385575f37dce67e74b2ed84ae4a1 192.168.56.101:7004

   slots: (0 slots) slave

   replicates ca57fd6745a5fb4061169a0c0b885da145f75dfd

S: cbcb3ff96d650258946514b60274efb6ec3a60d2 192.168.56.101:7005

   slots: (0 slots) slave

   replicates 4c193abb8928d21a3bb043ed9ee76035fc01b557

S: 67fd36b8dd0db9556a82fec6f7ee839b18919329 192.168.56.101:7006

   slots: (0 slots) slave

   replicates b2d9a70f96e4b382a51b8c0c43d891336e9dda1a

M: 4c193abb8928d21a3bb043ed9ee76035fc01b557 192.168.56.101:7003

   slots:[10923-16383] (5461 slots) master

   1 additional replica(s)

M: b2d9a70f96e4b382a51b8c0c43d891336e9dda1a 192.168.56.101:7001

   slots:[0-5460] (5461 slots) master

   1 additional replica(s)

M: ca57fd6745a5fb4061169a0c0b885da145f75dfd 192.168.56.101:7002

   slots:[5461-10922] (5462 slots) master

   1 additional replica(s)

[OK] All nodes agree about slots configuration.

>>> Check for open slots...

>>> Check slots coverage...

[OK] All 16384 slots covered.

 

 

步7、操作测试

注意跳转:

[root@server101 cluster]# /app/redis-5.0.5/src/redis-cli -h 192.168.56.101 -p 7001 -c

192.168.56.101:7001> set k1 v1

-> Redirected to slot [12706] located at 192.168.56.101:7003

OK

192.168.56.101:7003> set k2 v2

-> Redirected to slot [449] located at 192.168.56.101:7001

OK

192.168.56.101:7001> set k3 v3

OK

 

步8、Java代码连接

注意,只有在创建集群时,指定的ip地址为:192.168.56.101才可以实现远程连接,如果指定的是127.0.0.1,则会连接失败。出现:Too many Cluster redirections。

 

以下是连接成功的代码:

@Testpublic void testCluster1() throws Exception {

    Set<HostAndPort> sets = new HashSet<>();

    sets.add(new HostAndPort("192.168.56.101", 7001));

    sets.add(new HostAndPort("192.168.56.101", 7002));

    sets.add(new HostAndPort("192.168.56.101", 7003));

    sets.add(new HostAndPort("192.168.56.101", 7004));

    sets.add(new HostAndPort("192.168.56.101", 7005));

    sets.add(new HostAndPort("192.168.56.101", 7006));

    JedisCluster cluster = new JedisCluster(sets);

    String str = cluster.set("k7""v7"); 

   System.err.println("str is:" + str);    cluster.close();

}

 

步9、spring配置

spring Redis 集群连接:

 

<bean id="pool" class="redis.clients.jedis.JedisPoolConfig">

   <property name="maxTotal" value="30"/>

   <property name="maxIdle" value="10"/>

</bean>

   <bean id="jedisCluster" class="redis.clients.jedis.JedisCluster">

       <constructor-arg index="0">

           <set>

              <bean class="redis.clients.jedis.HostAndPort">

                   <constructor-arg value="192.168.56.101"/>

                   <constructor-arg value="7001"/>

               </bean>

               <bean class="redis.clients.jedis.HostAndPort">

                   <constructor-arg value="192.168.56.101"/>

                   <constructor-arg value="7002"/>

               </bean>

               <bean class="redis.clients.jedis.HostAndPort"

                  <constructor-arg value="192.168.56.101"/>

                   <constructor-arg value="7003"/>

               </bean>

               <bean class="redis.clients.jedis.HostAndPort">

                   <constructor-arg value="192.168.56.101"/>

                   <constructor-arg value="7004"/>

               </bean>

               <bean class="redis.clients.jedis.HostAndPort">

                   <constructor-arg value="192.168.56.101"/>

                   <constructor-arg value="7005"/>

               </bean>

               <bean class="redis.clients.jedis.HostAndPort">

                   <constructor-arg value="192.168.56.101"/>

                   <constructor-arg value="7006"/>

               </bean>

           </set>

       </constructor-arg>

   <constructor-arg index="1" ref="pool"></constructor-arg>

   </bean>

 

测试:

@Slf4j@ExtendWith(SpringExtension.class)

@ContextConfiguration(locations = { "classpath:spring/spring-redis-cluster.xml" })

public class Demo06_Cluster {

    @Autowired

    private JedisCluster jedisCluster;

    @Test

    public void testCluster() throws Exception{

        String str =  jedisCluster.get("k7");//输出k7对应的value值,成功。

        System.err.println(str);

    }

 

 

14.2、更多配置

添加新主节点

redis-cli --cluster add-node new_host:new_port existing_host:existing_port --cluster-master-id node_id

 

hash槽重新分配

添加完新节点后,需要对新添加的主节点进行hash槽重新分配,这样该主节点才能存储数据,redis共有16384个槽。

 

redis-cli --cluster reshard host:port --cluster-from node_id --cluster-to node_id --cluster-slots <args> --cluster-yes

添加新从节点

redis-cli --cluster add-node new_host:new_port existing_host:existing_port --cluster-slave --cluster-master-id node_id

删除节点

redis-cli --cluster  del-node host:port node_id

 

 

示例

# 创建集群

redis-cli --cluster create host1:port1 ... hostN:portN --cluster-replicas <arg>

# 例子

redis-cli --cluster create 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006 --cluster-replicas 1

# 例子说明

host1:port1 ... hostN:portN表示的是要添加的集群的节点IP和端口,

--cluster-replicas <arg>表示的是主从节点比例,参数1表示前三个是主节点,后三个是从节点

也就是说7001,7002,7003端口对应的节点是主节点,7004,7005,7006对应的节点是从节点

 

# 查询集群节点信息

redis-cli -c -p 7001 cluster nodes        

7d388cc31df969d3e1715ce9644318bfd48317b1 127.0.0.1:7004@17004 slave 59b6597448b668a355d85dcc7a0623bc36263e5f 0 1564923261350 4 connected

bbe8b7035bfd31c47bec7d612acc112cd2869368 127.0.0.1:7003@17003 master - 0 1564923263366 3 connected 10923-16383

456921ae96af71d8183101f798cf5ceda4b0381e 127.0.0.1:7005@17005 slave bbe8b7035bfd31c47bec7d612acc112cd2869368 0 1564923262000 5 connected

5612ffbb0407dbda50828b505a16b39ede51168b 127.0.0.1:7006@17006 slave 4dad696ede24995a57c5fd790faa95c72c187a22 0 1564923260000 6 connected

4dad696ede24995a57c5fd790faa95c72c187a22 127.0.0.1:7001@17001 myself,master - 0 1564923263000 1 connected 0-5460

59b6597448b668a355d85dcc7a0623bc36263e5f 127.0.0.1:7002@17002 master - 0 1564923262358 2 connected 5461-10922

 

# 说明:以下的操作均是以上面这个为参数示例

 

# 给集群添加一个新主节点

redis-cli --cluster add-node new_host:new_port existing_host:existing_port --cluster-master-id node_id

# 例子

redis-cli --cluster add-node 127.0.0.1:7007 127.0.0.1:7003 --cluster-master-id bbe8b7035bfd31c47bec7d612acc112cd2869368

# 例子说明

new_host:new_port为要新添加的主节点IP和端口,此处是127.0.0.1:7007

existing_host:existing_port表示的是已存在的最后一个主节点的IP和端口,这个可以从上述的节点信息中查看到,根据slots槽数,7003端口对应的节点槽数是10923-16383,16383表示的是最后的槽数

--cluster-master-id表示的是最后一个主节点的节点id,表示的是新添加的主节点要在这个节点后面

 

# 再次查看集群信息

redis-cli -c -p 7001 cluster nodes        

7d388cc31df969d3e1715ce9644318bfd48317b1 127.0.0.1:7004@17004 slave 59b6597448b668a355d85dcc7a0623bc36263e5f 0 1564923261350 4 connected

bbe8b7035bfd31c47bec7d612acc112cd2869368 127.0.0.1:7003@17003 master - 0 1564923263366 3 connected 10923-16383

7020c8df9423686727783c60bd2f0e367634ba84 127.0.0.1:7007@17007 master - 0 1564923260344 0 connected

456921ae96af71d8183101f798cf5ceda4b0381e 127.0.0.1:7005@17005 slave bbe8b7035bfd31c47bec7d612acc112cd2869368 0 1564923262000 5 connected

5612ffbb0407dbda50828b505a16b39ede51168b 127.0.0.1:7006@17006 slave 4dad696ede24995a57c5fd790faa95c72c187a22 0 1564923260000 6 connected

4dad696ede24995a57c5fd790faa95c72c187a22 127.0.0.1:7001@17001 myself,master - 0 1564923263000 1 connected 0-5460

59b6597448b668a355d85dcc7a0623bc36263e5f 127.0.0.1:7002@17002 master - 0 1564923262358 2 connected 5461-10922

# 会发现7007端口对应的节点已经加入到集群中,是主节点,但是没有从节点,也没有分配槽数

 

# 给新添加的主节点分配slots槽数

redis-cli --cluster reshard host:port --cluster-from node_id --cluster-to node_id --cluster-slots 500 --cluster-yes

# 例子

redis-cli --cluster reshard 127.0.0.1:7007 --cluster-from 4dad696ede24995a57c5fd790faa95c72c187a22 --cluster-to 7020c8df9423686727783c60bd2f0e367634ba84 --cluster-slots 500

# 例子说明

host:port表示的是新添加的那个主节点IP和端口,此处表示的是127.0.0.1:7007

--cluster-from node_id表示的是集群第一个主节点的节点id,这个可以现有集群的slots槽数分配看出,此处表示的是7001端口对应的节点

--cluster-to node_id表示的是集群最后一个主节点的节点id,也就是新添加的那个主节点id,此处表示的是7007端口对应的节点

--cluster-slots 500表示的是给新主节点分配多少,此处500表示是分配从0-499个slots槽数,若不加上这个会让手动输入

--cluster-yes表示的是自动应答为yes,若不加上这个会让手动输入yes,表示同意此次分配

 

# 再次查看集群信息

/redis-cli -c -p 7001 cluster nodes                                         7d388cc31df969d3e1715ce9644318bfd48317b1 127.0.0.1:7004@17004 slave 59b6597448b668a355d85dcc7a0623bc36263e5f 0 1564924042000 4 connected

bbe8b7035bfd31c47bec7d612acc112cd2869368 127.0.0.1:7003@17003 master - 0 1564924042157 3 connected 10923-16383

7020c8df9423686727783c60bd2f0e367634ba84 127.0.0.1:7007@17007 master - 0 1564924040140 7 connected 0-499

456921ae96af71d8183101f798cf5ceda4b0381e 127.0.0.1:7005@17005 slave bbe8b7035bfd31c47bec7d612acc112cd2869368 0 1564924040000 5 connected

5612ffbb0407dbda50828b505a16b39ede51168b 127.0.0.1:7006@17006 slave 4dad696ede24995a57c5fd790faa95c72c187a22 0 1564924041149 6 connected

4dad696ede24995a57c5fd790faa95c72c187a22 127.0.0.1:7001@17001 myself,master - 0 1564924040000 1 connected 500-5460

59b6597448b668a355d85dcc7a0623bc36263e5f 127.0.0.1:7002@17002 master - 0 1564924043166 2 connected 5461-10922

# 会发现7007端口对应的主节点已经有slots槽数了,并且是从0开始的

 

# 给集群中某个主节点再添加一个从节点

redis-cli --cluster add-node new_host:new_port existing_host:existing_port --cluster-slave --cluster-master-id node_id

# 例子

redis-cli --cluster add-node 127.0.0.1:7007 127.0.0.1:7008 --cluster-slave --cluster-master-id 7020c8df9423686727783c60bd2f0e367634ba84

# 例子说明

new_host:new_port表示的是要添加的那个从节点的IP和端口,此处表示的是127.0.0.1:7008

existing_host:existing_port表示的是要给哪个主节点添加从节点,此处表示的是127.0.0.1:7007

--cluster-slave表示的是要添加从节点,否则则是添加主节点了

--cluster-master-id node_id表示要给哪个主节点添加从节点的该主节点节点id

 

# 再次查看集群信息

redis-cli -c -p 7001 cluster nodes                                         7020c8df9423686727783c60bd2f0e367634ba84 127.0.0.1:7007@17007 master - 0 1564924845000 7 connected 0-499

4dad696ede24995a57c5fd790faa95c72c187a22 127.0.0.1:7001@17001 myself,master - 0 1564924843000 1 connected 500-5460

5612ffbb0407dbda50828b505a16b39ede51168b 127.0.0.1:7006@17006 slave 4dad696ede24995a57c5fd790faa95c72c187a22 0 1564924845214 6 connected

7d388cc31df969d3e1715ce9644318bfd48317b1 127.0.0.1:7004@17004 slave 59b6597448b668a355d85dcc7a0623bc36263e5f 0 1564924843195 4 connected

bbe8b7035bfd31c47bec7d612acc112cd2869368 127.0.0.1:7003@17003 master - 0 1564924844205 3 connected 10923-16383

456921ae96af71d8183101f798cf5ceda4b0381e 127.0.0.1:7005@17005 slave bbe8b7035bfd31c47bec7d612acc112cd2869368 0 1564924845000 5 connected

415db07121ba946b202bca98e15cbdffc60bc18a 127.0.0.1:7008@17008 slave 7020c8df9423686727783c60bd2f0e367634ba84 0 1564924846224 7 connected

c3e04f0e8710c25d59703374a224ee8bec776e43 :0@0 master,fail,noaddr - 1564924804548 1564924802833 0 disconnected

59b6597448b668a355d85dcc7a0623bc36263e5f 127.0.0.1:7002@17002 master - 0 1564924844000 2 connected 5461-10922

# 会发现7008端口对应的节点已经是7007端口对应的从节点

 

# 从集群中删除一个从节点

redis-cli --cluster  del-node host:port node_id

# 例子

redis-cli --cluster del-node 127.0.0.1:7008 415db07121ba946b202bca98e15cbdffc60bc18a

# 例子说明

host:port表示的是要删除的那个节点的IP和端口,此处是127.0.0.1:7008

node_id表示的是删除的那个节点的节点id

 

参考:https://www.cnblogs.com/sanduzxcvbnm/p/11300942.html

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论