设为首页 收藏本站
查看: 616|回复: 0

[经验分享] 自学总结redis第四部分(集群搭建以及增加和删除节点)

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-12-12 08:29:57 | 显示全部楼层 |阅读模式
十六、redis集群16、1集群搭建

#下述是在一台机器模拟六个节点,3主3从

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[iyunv@redis ~]# cd /application/
[iyunv@redis application]# cd redis
[iyunv@redis redis]# mkdir redis-cluster
[iyunv@redis redis-cluster]#
[iyunv@redis redis-cluster]# ls -l
total 24
drwxr-xr-x 2 root root 4096 Dec 10 17:51 7001
drwxr-xr-x 2 root root 4096 Dec 10 17:51 7002
drwxr-xr-x 2 root root 4096 Dec 10 17:51 7003
drwxr-xr-x 2 root root 4096 Dec 10 17:51 7004
drwxr-xr-x 2 root root 4096 Dec 10 17:51 7005
drwxr-xr-x 2 root root 4096 Dec 10 17:51 7006
  
[iyunv@redis redis-cluster]# cp/application/redis/conf/redis.conf /application/redis/conf/redis.conf.ori2
  
[iyunv@redis redis-cluster]# cd 7001




[iyunv@redis 7001]# vim redis.conf

#下述是要设置的内容

bind 172.16.1.11    #必须要绑定每个当前节点的IP。现在是一台机器模拟集群环境,所以配置同样的IP即可,多台机器就多个IP。

port 7001   #分别每个节点对应每个端口

daemonize yes

pidfile /var/run/redis_7001.pid #Redis服务停掉之后,这个目录下就没有这个文件了

loglevel debug

logfile"/application/redis/logs/redis-7001.log"

dir "/application/redis/redis-cluster/7001" #指定数据文件存放位置,必须要指定不同的目录位置,不然会丢失数据!

appendonly yes

appendfsync always

cluster-enabled yes #启动集群模式

cluster-config-file nodes-7001.conf #这里的700X最好跟port对应!每个node文件也不要相同!如果要重新建集群,记得把node700*文件全部干掉,不然会创建失败,当创建集群时,这个文件会重新创建。

cluster-node-timeout 5000

#其他五个目录的节点的改动只需要把上述7001目录下的redis.conf中的所有7001改成对应的端口即可。

#拷贝7001下的redis.conf文件到各个目录下

1
2
3
[iyunv@redis redis-cluster]# for((i=2;i<=6;i++));do cp/application/redis/redis-cluster/7001/redis.conf/application/redis/redis-cluster/700$i;done
[iyunv@redis redis-cluster]# ls 700{2..6}/*
7002/redis.conf 7003/redis.conf 7004/redis.conf 7005/redis.conf  7006/redis.conf




#替换各个目录下的7001为对应端口并备份redis.conf

1
[iyunv@redis redis-cluster]# for((i=2;i<=6;i++));do sed-i.ori "s#7001#700$i#g" /application/redis/redis-cluster/700$i/redis.conf;done




#查看各个目录下的文件是否替换成功

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
[iyunv@redis redis-cluster]# for((i=2;i<=6;i++));dogrep 700$i /application/redis/redis-cluster/700$i/redis.conf;done
port 7002
pidfile "/var/run/redis_7002.pid"
logfile"/application/redis/logs/redis-7002.log"
dir "/application/redis/redis-cluster/7002"
cluster-config-file nodes-7002.conf
  
port 7003
pidfile "/var/run/redis_7003.pid"
logfile"/application/redis/logs/redis-7003.log"
dir "/application/redis/redis-cluster/7003"
cluster-config-file nodes-7003.conf
  
port 7004
pidfile "/var/run/redis_7004.pid"
logfile"/application/redis/logs/redis-7004.log"
dir "/application/redis/redis-cluster/7004"
cluster-config-file nodes-7004.conf
  
port 7005
pidfile "/var/run/redis_7005.pid"
logfile "/application/redis/logs/redis-7005.log"
dir "/application/redis/redis-cluster/7005"
cluster-config-file nodes-7005.conf
  
port 7006
pidfile "/var/run/redis_7006.pid"
logfile"/application/redis/logs/redis-7006.log"
dir "/application/redis/redis-cluster/7006"
cluster-config-file nodes-7006.conf




#缓存分布式,每个节点存放不同的数据。比如上述的6个节点,其中每一个节点都必须知道其他五个节点的存在。

#redis集群需要用到ruby,对应下述中用到集群启动的redis-trib.rb,参考“16、2redis-trib.rb解释”

1
2
3
4
5
6
7
8
9
10
11
[iyunv@redis run]# rpm -qa ruby
[iyunv@redis run]# rpm -qa rubygems
[iyunv@redis run]# yum install ruby rubygems -y
[iyunv@redis run]# rpm -qa ruby rubygems
rubygems-1.3.7-5.el6.noarch
ruby-1.8.7.374-4.el6_6.x86_64
[iyunv@redis run]# gem install redis #安装redis和ruby的接口
Successfully installed redis-3.3.2
1 gem installed
Installing ri documentation for redis-3.3.2...
Installing RDoc documentation for redis-3.3.2...




#分别启动六个redis实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[iyunv@redis redis-cluster]# for((i=1;i<=6;i++));doredis-server /application/redis/redis-cluster/700$i/redis.conf;done
[iyunv@redis redis-cluster]# netstat -lntup|grep redis
tcp        0      0 172.16.1.11:7005            0.0.0.0:*                   LISTEN      4843/redis-server 1
tcp        0      0 172.16.1.11:7006            0.0.0.0:*                   LISTEN      4845/redis-server 1
tcp        0      0 172.16.1.11:17001           0.0.0.0:*                   LISTEN      4833/redis-server 1
tcp        0      0 172.16.1.11:17002           0.0.0.0:*                   LISTEN      4837/redis-server 1
tcp        0      0 172.16.1.11:17003           0.0.0.0:*                   LISTEN      4839/redis-server 1
tcp        0      0172.16.1.11:17004          0.0.0.0:*                   LISTEN      4841/redis-server 1
tcp        0      0 172.16.1.11:17005           0.0.0.0:*                   LISTEN      4843/redis-server 1
tcp        0      0 172.16.1.11:17006           0.0.0.0:*                   LISTEN      4845/redis-server 1
tcp        0      0 172.16.1.11:7001            0.0.0.0:*                   LISTEN      4833/redis-server 1
tcp        0      0 172.16.1.11:7002            0.0.0.0:*                   LISTEN      4837/redis-server 1
tcp        0      0 172.16.1.11:7003            0.0.0.0:*                   LISTEN      4839/redis-server 1
tcp        0      0 172.16.1.11:7004            0.0.0.0:*                   LISTEN      4841/redis-server 1
#上述17001到17006暂不确定是什么作用
  
[iyunv@redis redis-cluster]# ps -ef|grep 700|grep -v grep
root      4833      1  0 19:51 ?        00:00:00 redis-server 172.16.1.11:7001[cluster]                     
root      4837      1  0 19:51 ?        00:00:00 redis-server 172.16.1.11:7002[cluster]                     
root      4839      1  0 19:51 ?        00:00:00 redis-server 172.16.1.11:7003[cluster]                     
root      4841      1  0 19:51 ?        00:00:00 redis-server 172.16.1.11:7004[cluster]                     
root      4843      1  0 19:51 ?        00:00:00 redis-server 172.16.1.11:7005[cluster]                     
root      4845      1  0 19:51 ?        00:00:00 redis-server 172.16.1.11:7006[cluster]




#到redis的安装目录下,执行redis-trib.rb

[iyunv@redis src]# pwd

/home/lly/tools/redis-3.2.5/src

#下述--replicas后面1的意思是:1是一个比例,主节点和从节点的比例,7001到7003一定是三个主节点,7004到7006是三个从节点,7001和7004是对应的一对主从节点。

#不过也可以按照其他比例操作节点数

1
2
3
4
5
6
7
8
9
10
[iyunv@redis src]# ./redis-trib.rbcreate --replicas 1 172.16.1.11:7001 172.16.1.11:7002 172.16.1.11:7003172.16.1.11:7004 172.16.1.11:7005 172.16.1.11:7006
>>> Creating cluster
>>> Performing hash slots allocation on 6nodes...
Using 3 masters:
172.16.1.11:7001
172.16.1.11:7002
172.16.1.11:7003
Adding replica 172.16.1.11:7004 to 172.16.1.11:7001
Adding replica 172.16.1.11:7005 to 172.16.1.11:7002
Adding replica 172.16.1.11:7006 to 172.16.1.11:7003




#下述M是指master,68e9252e2e2404a0ced500a98085acaa5754c7a2是节点的ID,是唯一的

M: 68e9252e2e2404a0ced500a98085acaa5754c7a2172.16.1.11:7001

   slots:0-5460(5461 slots) master     #一共5461个槽slots,可以理解成数据分片:1块空间分成5461片。把一块空间分成了多个片,效率比较高。只有主节点才有槽slots,可以发现下述从节点没有槽,所以从节点只支持读操作,不支持写操作。

M: f314dda271d135634d6849cdb649192b58b08d7f172.16.1.11:7002

   slots:5461-10922(5462 slots) master

M: 6385ebf9ea346525671b8c339614de4cb2a118cc172.16.1.11:7003

  slots:10923-16383 (5461 slots) master

#S是slave

S: 37384b8db7e9e5462d2da236d0104207eac26060172.16.1.11:7004

   replicates68e9252e2e2404a0ced500a98085acaa5754c7a2

S: 00371b626a2d42654a0cebb985311aee56578142172.16.1.11:7005

   replicatesf314dda271d135634d6849cdb649192b58b08d7f

S: 8dc598b1ceb81e397903973eeba02e3e53770b0c172.16.1.11:7006

   replicates6385ebf9ea346525671b8c339614de4cb2a118cc

Can I set the above configuration? (type 'yes' toaccept): yes  #输入yes

>>> Nodes configuration updated

>>> Assign a different config epoch to each node

>>> Sending CLUSTER MEET messages to join thecluster

Waiting for the cluster to join...

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

M: 68e9252e2e2404a0ced500a98085acaa5754c7a2172.16.1.11:7001

   slots:0-5460(5461 slots) master

   1 additionalreplica(s)

M: f314dda271d135634d6849cdb649192b58b08d7f172.16.1.11:7002

   slots:5461-10922(5462 slots) master

   1 additionalreplica(s)

S: 8dc598b1ceb81e397903973eeba02e3e53770b0c172.16.1.11:7006

   slots: (0 slots)slave

   replicates6385ebf9ea346525671b8c339614de4cb2a118cc

S: 37384b8db7e9e5462d2da236d0104207eac26060172.16.1.11:7004

   slots: (0 slots)slave

   replicates68e9252e2e2404a0ced500a98085acaa5754c7a2

M: 6385ebf9ea346525671b8c339614de4cb2a118cc172.16.1.11:7003

  slots:10923-16383 (5461 slots) master

   1 additionalreplica(s)

S: 00371b626a2d42654a0cebb985311aee56578142172.16.1.11:7005

   slots: (0 slots)slave

   replicatesf314dda271d135634d6849cdb649192b58b08d7f

[OK] All nodes agree about slots configuration.

>>> Check for open slots...

>>> Check slots coverage...

[OK] All 16384 slots covered.

#集群停止

#个人理解应该先停止从节点,再停止主节点

1
2
[iyunv@redis ~]# for((i=6;i>=1;i--));do redis-cli -c -h172.16.1.11 -p 700$i shutdown;done
[iyunv@redis ~]# netstat -lntup|grep redis|grep -v grep





16、2查看集群中各个节点信息

#cluster详细信息参考“16、5redis cluster命令”

-c表示集群模式 -h表示本机IP-p表示端口

1
2
3
4
5
6
7
8
9
10
11
12
13
[iyunv@redis ~]# redis-cli -c -h 172.16.1.11 -p 7001
172.16.1.11:7001> 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      #主节点是从1到3,从节点同理。依次排序。
cluster_stats_messages_sent:47331
cluster_stats_messages_received:47331




#对应节点有myself标识

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
172.16.1.11:7001> cluster nodes
f314dda271d135634d6849cdb649192b58b08d7f 172.16.1.11:7002master - 0 1481381814328 2 connected 5461-10922
8dc598b1ceb81e397903973eeba02e3e53770b0c 172.16.1.11:7006slave 6385ebf9ea346525671b8c339614de4cb2a118cc 0 1481381813826 6 connected
37384b8db7e9e5462d2da236d0104207eac26060 172.16.1.11:7004slave 68e9252e2e2404a0ced500a98085acaa5754c7a2 0 1481381813218 4 connected
68e9252e2e2404a0ced500a98085acaa5754c7a2 172.16.1.11:7001myself,master - 0 0 1 connected 0-5460
6385ebf9ea346525671b8c339614de4cb2a118cc 172.16.1.11:7003master - 0 1481381814328 3 connected 10923-16383
00371b626a2d42654a0cebb985311aee56578142 172.16.1.11:7005slave f314dda271d135634d6849cdb649192b58b08d7f 0 1481381813321 5 connected
  
[iyunv@redis ~]# redis-cli -c -h 172.16.1.11 -p 7002
172.16.1.11:7002> 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:2
cluster_stats_messages_sent:47456
cluster_stats_messages_received:47456
  
172.16.1.11:7002> cluster nodes
8dc598b1ceb81e397903973eeba02e3e53770b0c 172.16.1.11:7006slave 6385ebf9ea346525671b8c339614de4cb2a118cc 0 1481381818884 6 connected
68e9252e2e2404a0ced500a98085acaa5754c7a2 172.16.1.11:7001master - 0 1481381818380 1 connected 0-5460
37384b8db7e9e5462d2da236d0104207eac26060 172.16.1.11:7004slave 68e9252e2e2404a0ced500a98085acaa5754c7a2 0 1481381817372 4 connected
6385ebf9ea346525671b8c339614de4cb2a118cc 172.16.1.11:7003master - 0 1481381817372 3 connected 10923-16383
f314dda271d135634d6849cdb649192b58b08d7f 172.16.1.11:7002myself,master - 0 0 2 connected 5461-10922
00371b626a2d42654a0cebb985311aee56578142 172.16.1.11:7005slave f314dda271d135634d6849cdb649192b58b08d7f 0 1481381817374 5 connected
  
  
[iyunv@redis ~]# redis-cli -c -h 172.16.1.11 -p 7003
172.16.1.11:7003> 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:3
cluster_stats_messages_sent:47279
cluster_stats_messages_received:47279
  
172.16.1.11:7003> cluster nodes
f314dda271d135634d6849cdb649192b58b08d7f 172.16.1.11:7002master - 0 1481381827476 2 connected 5461-10922
68e9252e2e2404a0ced500a98085acaa5754c7a2 172.16.1.11:7001master - 0 1481381826470 1 connected 0-5460
00371b626a2d42654a0cebb985311aee56578142 172.16.1.11:7005slave f314dda271d135634d6849cdb649192b58b08d7f 0 1481381828484 5 connected
8dc598b1ceb81e397903973eeba02e3e53770b0c 172.16.1.11:7006slave 6385ebf9ea346525671b8c339614de4cb2a118cc 0 1481381826972 6 connected
37384b8db7e9e5462d2da236d0104207eac26060 172.16.1.11:7004slave 68e9252e2e2404a0ced500a98085acaa5754c7a2 0 1481381828482 4 connected
6385ebf9ea346525671b8c339614de4cb2a118cc 172.16.1.11:7003myself,master - 0 0 3 connected 10923-16383
  
[iyunv@redis ~]# redis-cli -c -h 172.16.1.11 -p 7004
172.16.1.11:7004> 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_sent:47229
cluster_stats_messages_received:47229
  
172.16.1.11:7004> cluster nodes
00371b626a2d42654a0cebb985311aee56578142 172.16.1.11:7005slave f314dda271d135634d6849cdb649192b58b08d7f 0 1481381832005 5 connected
f314dda271d135634d6849cdb649192b58b08d7f 172.16.1.11:7002master - 0 1481381832511 2 connected 5461-10922
8dc598b1ceb81e397903973eeba02e3e53770b0c 172.16.1.11:7006slave 6385ebf9ea346525671b8c339614de4cb2a118cc 0 1481381831503 6 connected
6385ebf9ea346525671b8c339614de4cb2a118cc 172.16.1.11:7003master - 0 1481381832006 3 connected 10923-16383
37384b8db7e9e5462d2da236d0104207eac26060 172.16.1.11:7004myself,slave 68e9252e2e2404a0ced500a98085acaa5754c7a2 0 0 4 connected
68e9252e2e2404a0ced500a98085acaa5754c7a2 172.16.1.11:7001master - 0 1481381832513 1 connected 0-5460
  
  
[iyunv@redis ~]# redis-cli -c -h 172.16.1.11 -p 7005
172.16.1.11:7005> 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:2
cluster_stats_messages_sent:47928
cluster_stats_messages_received:47928
  
172.16.1.11:7005> cluster nodes
f314dda271d135634d6849cdb649192b58b08d7f 172.16.1.11:7002master - 0 1481381836745 2 connected 5461-10922
00371b626a2d42654a0cebb985311aee56578142 172.16.1.11:7005myself,slave f314dda271d135634d6849cdb649192b58b08d7f 0 0 5 connected
6385ebf9ea346525671b8c339614de4cb2a118cc 172.16.1.11:7003master - 0 1481381837752 3 connected 10923-16383
37384b8db7e9e5462d2da236d0104207eac26060 172.16.1.11:7004slave 68e9252e2e2404a0ced500a98085acaa5754c7a2 0 1481381837753 4 connected
8dc598b1ceb81e397903973eeba02e3e53770b0c 172.16.1.11:7006slave 6385ebf9ea346525671b8c339614de4cb2a118cc 0 1481381838259 6 connected
68e9252e2e2404a0ced500a98085acaa5754c7a2 172.16.1.11:7001master - 0 1481381837250 1 connected 0-5460
  
  
[iyunv@redis ~]# redis-cli -c -h 172.16.1.11 -p 7006
172.16.1.11:7006> 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:3
cluster_stats_messages_sent:47525
cluster_stats_messages_received:47525
  
172.16.1.11:7006> cluster nodes
8dc598b1ceb81e397903973eeba02e3e53770b0c 172.16.1.11:7006myself,slave 6385ebf9ea346525671b8c339614de4cb2a118cc 0 0 6 connected
6385ebf9ea346525671b8c339614de4cb2a118cc 172.16.1.11:7003master - 0 1481381856221 3 connected 10923-16383
f314dda271d135634d6849cdb649192b58b08d7f 172.16.1.11:7002master - 0 1481381857761 2 connected 5461-10922
37384b8db7e9e5462d2da236d0104207eac26060 172.16.1.11:7004slave 68e9252e2e2404a0ced500a98085acaa5754c7a2 0 1481381858237 1 connected
68e9252e2e2404a0ced500a98085acaa5754c7a2 172.16.1.11:7001master - 0 1481381857762 1 connected 0-5460
00371b626a2d42654a0cebb985311aee56578142 172.16.1.11:7005slave f314dda271d135634d6849cdb649192b58b08d7f 0 1481381856726 5 connected






16、3集群节点测试

#首先通过keys命令查询各个节点都没有数据。

#在7001设置数据

1
2
3
172.16.1.11:7001> set name11 name11val1
-> Redirected to slot [11311] located at172.16.1.11:7003
OK




#跳到了获取到值的7003节点上

1
2
3
4
172.16.1.11:7003> keys *
1) "name11"
172.16.1.11:7003> get name11
"name11val1"




#在7002查,虽然keys不出来,但是能得到值

1
2
3
4
5
172.16.1.11:7002> keys *
(empty list or set)
172.16.1.11:7002> get name11
-> Redirected to slot [11311] located at172.16.1.11:7003
"name11val1"




#在7003查

1
2
3
4
172.16.1.11:7003> keys *
1) "name11"
172.16.1.11:7003> get name11
"name11val1"




#7004、7005、7006跟7002情况一致

#意思是在某个节点下set的值不一定分配给自己节点的槽,可能分配给其他节点的槽,在这个集群的任何一个节点都可以get到任意节点set的值。



16、4redis-trib.rb详解

[iyunv@redis src]# ./redis-trib.rb   #创建集群的命令,是用ruby写的

Usage: redis-trib <command> <options><arguments ...>

  info            host:port #查看集群信息

  set-timeout     host:port milliseconds    #设置集群节点间心跳连接的超时时间

  help            (show this help)

  check           host:port #检查集群

  call            host:port command arg arg .. arg      #在集群全部节点上执行命令

  import          host:port     #将外部redis数据导入集群

                 --copy

                 --from <arg>

                 --replace

  rebalance       host:port     #平衡集群节点slot数量

                 --threshold <arg>

                 --simulate

                 --pipeline <arg>

                 --auto-weights

                 --timeout <arg>

                 --use-empty-masters

                 --weight <arg>

  del-node        host:port node_id     #从集群中删除节点

  fix             host:port             #修复集群

                 --timeout <arg>

  add-node        new_host:new_portexisting_host:existing_port #将新节点加入集群

                 --master-id <arg>

                 --slave

  reshard         host:port         #在线迁移slot

                 --pipeline <arg>

                 --timeout <arg>

                 --from <arg>

                 --yes

                 --slots <arg>

                 --to <arg>

  create          host1:port1 ... hostN:portN       #创建集群环境,以IP1:PORT1 ... IPN:PORTN的形式处理

                 --replicas <arg>


16、5redis cluster命令

//集群(cluster)

CLUSTER INFO #打印集群的信息

CLUSTER NODES #列出集群当前已知的所有节点(node),以及这些节点的相关信息。

//节点(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)。

//键 (key)

CLUSTER KEYSLOT <key> #计算键 key 应该被放置在哪个槽上。

CLUSTER COUNTKEYSINSLOT <slot> #返回槽 slot 目前包含的键值对数量。

CLUSTER GETKEYSINSLOT <slot> <count> #返回 count 个slot 槽中的键。

#上述命令是redis集群所独有的,执行上述命令之前得先登录

#比如

1
2
3
4
5
6
7
8
9
10
11
12
13
[iyunv@redis ~]# redis-cli -c -h 172.16.1.11 -p 7001
172.16.1.11:7001> 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_sent:47331
cluster_stats_messages_received:47331





16、6集群增加/删除节点

参考网站

http://blog.51yip.com/nosql/1726.html/comment-page-1


16、6、1测试节点操作

    新建两个服务,按照之前搭建集群的方式新建一主一从两个节点,分别是7007和7008,

节点的具体设置参考“16、1集群搭建”

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#新增节点
[iyunv@redis ~]# cd /application/redis/redis-cluster/
[iyunv@redis redis-cluster]# cp -R 7001 7007
[iyunv@redis redis-cluster]# cp -R 7001 7008
[iyunv@redis redis-cluster]# sed -i.ori"s#7001#7007#g" 7007/redis.conf
[iyunv@redis redis-cluster]# sed -i.ori"s#7001#7008#g" 7008/redis.conf  
[iyunv@redis redis-cluster]# grep 7007 7007/redis.conf
port 7007
pidfile /var/run/redis_7007.pid
logfile"/application/redis/logs/redis-7007.log"
dir /application/redis/redis-cluster/7007
cluster-config-file nodes-7007.conf
[iyunv@redis redis-cluster]# grep 70087008/redis.conf   
port 7008
pidfile /var/run/redis_7008.pid
logfile"/application/redis/logs/redis-7008.log"
dir /application/redis/redis-cluster/7008
cluster-config-file nodes-7008.conf
  
  
#测试节点
[iyunv@redis redis-cluster]# ps -ef|grep redis|grep -vgrep
root      5372      1  0 00:21 ?        00:00:00 redis-server 172.16.1.11:7007[cluster]                     
root      5376      1  0 00:21 ?        00:00:00 redis-server 172.16.1.11:7008[cluster]




16、6、2添加节点16、6、2、1添加主节点7007

#先启动各个节点

1
[iyunv@redis redis-cluster]# for((i=1;i<=6;i++));doredis-server /application/redis/redis-cluster/700$i/redis.conf;done




#添加主节点,172.16.1.11:7007为新增节点,172.16.1.11:7001为任一已存在节点

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
[iyunv@redis redis-cluster]#/home/lly/tools/redis-3.2.5/src/redis-trib.rb add-node 172.16.1.11:7007172.16.1.11:7001  
>>> Adding node 172.16.1.11:7007 to cluster172.16.1.11:7001
>>> Performing Cluster Check (using node172.16.1.11:7001)
M: 68e9252e2e2404a0ced500a98085acaa5754c7a2172.16.1.11:7001
   slots:0-5460(5461 slots) master
   1 additionalreplica(s)
S: 00371b626a2d42654a0cebb985311aee56578142172.16.1.11:7005
   slots: (0 slots)slave
   replicatesf314dda271d135634d6849cdb649192b58b08d7f
M: 6385ebf9ea346525671b8c339614de4cb2a118cc172.16.1.11:7003
  slots:10923-16383 (5461 slots) master
   1 additionalreplica(s)
S: 37384b8db7e9e5462d2da236d0104207eac26060172.16.1.11:7004
   slots: (0 slots)slave
   replicates68e9252e2e2404a0ced500a98085acaa5754c7a2
M: f314dda271d135634d6849cdb649192b58b08d7f172.16.1.11:7002
   slots:5461-10922(5462 slots) master
   1 additionalreplica(s)
S: 8dc598b1ceb81e397903973eeba02e3e53770b0c172.16.1.11:7006
   slots: (0 slots)slave
   replicates6385ebf9ea346525671b8c339614de4cb2a118cc
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
>>> Send CLUSTER MEET to node 172.16.1.11:7007to make it join the cluster.
[OK] New node added correctly.




#查看集群状态

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[iyunv@redis redis-cluster]# redis-cli -c -h 172.16.1.11-p 7001
172.16.1.11:7001> cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:7
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:1
cluster_stats_messages_sent:975
cluster_stats_messages_received:970
172.16.1.11:7001> cluster nodes
  
00371b626a2d42654a0cebb985311aee56578142 172.16.1.11:7005slave f314dda271d135634d6849cdb649192b58b08d7f 0 1481387384680 5 connected
  
6385ebf9ea346525671b8c339614de4cb2a118cc 172.16.1.11:7003master - 0 1481387383128 3 connected 10923-16383
  
37384b8db7e9e5462d2da236d0104207eac26060 172.16.1.11:7004slave 68e9252e2e2404a0ced500a98085acaa5754c7a2 0 1481387382626 4 connected




#注意:当7007主节点添加成功之后,新增的节点不会有任何数据,因为它没有分配任何的slot(hash槽),所以需要为新节点手工分配slot。如果主节点要有写权限的话,那么必须有槽,可以把已有节点的槽分配给新节点。Redis集群在运行中,增加节点水平扩容是不会影响redis性能的。

4a174a6203795d7f57f4be52534d41f01e164f84172.16.1.11:7007 master - 0 1481387382626 0 connected

68e9252e2e2404a0ced500a98085acaa5754c7a2 172.16.1.11:7001myself,master - 0 0 1 connected 0-5460

f314dda271d135634d6849cdb649192b58b08d7f 172.16.1.11:7002master - 0 1481387383629 2 connected 5461-10922

8dc598b1ceb81e397903973eeba02e3e53770b0c 172.16.1.11:7006slave 6385ebf9ea346525671b8c339614de4cb2a118cc 0 1481387384135 6 connected

#为7007分配slot槽(找到集群中的任意一个主节点,对其进行重新分片操作)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
[iyunv@redis redis-cluster]#/home/lly/tools/redis-3.2.5/src/redis-trib.rb reshard 172.16.1.11:7001
>>> Performing Cluster Check (using node172.16.1.11:7001)
M: 68e9252e2e2404a0ced500a98085acaa5754c7a2172.16.1.11:7001
   slots:0-5460(5461 slots) master
   1 additionalreplica(s)
S: 00371b626a2d42654a0cebb985311aee56578142172.16.1.11:7005
   slots: (0 slots)slave
   replicatesf314dda271d135634d6849cdb649192b58b08d7f
M: 6385ebf9ea346525671b8c339614de4cb2a118cc172.16.1.11:7003
  slots:10923-16383 (5461 slots) master
   1 additionalreplica(s)
S: 37384b8db7e9e5462d2da236d0104207eac26060172.16.1.11:7004
   slots: (0 slots)slave
   replicates68e9252e2e2404a0ced500a98085acaa5754c7a2
M: 4a174a6203795d7f57f4be52534d41f01e164f84172.16.1.11:7007
   slots: (0 slots)master
   0 additionalreplica(s)
M: f314dda271d135634d6849cdb649192b58b08d7f172.16.1.11:7002
   slots:5461-10922(5462 slots) master
   1 additional replica(s)
S: 8dc598b1ceb81e397903973eeba02e3e53770b0c172.16.1.11:7006
   slots: (0 slots)slave
   replicates6385ebf9ea346525671b8c339614de4cb2a118cc
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.




How many slots do you want tomove (from 1 to 16384)? 200  

#200是需要多少个槽移动到新的节点上,可以自己设置,比如200个槽。主节点如果没有slots的话,存取数据就不会被选中。

What is the receiving node ID?4a174a6203795d7f57f4be52534d41f01e164f84

#4a174a6203795d7f57f4be52534d41f01e164f84为7007的ID。需要把这200个slot槽移动到那个节点上去(需要指定节点id),并且下个  提示是输入all为从所有主节点(7001 7002 7003)中分别抽取响应的槽数(一共为200个槽到指定的新节点中!,并且会打印执行分片的计划。)

Please enter all the source node IDs.

  Type 'all' to useall the nodes as source nodes for the hash slots.

  Type 'done' onceyou entered all the source nodes IDs.

Source node #1:all

#可以把分配的过程理解成打扑克,all表示大家重新洗牌,而上述输入的接收主节点ID,回车,好比洗完牌之后在某个节点抽牌,即使是一个新加入的节点/打牌者。

Ready to move 200 slots.

  Source nodes:

    M:68e9252e2e2404a0ced500a98085acaa5754c7a2 172.16.1.11:7001

   slots:0-5460(5461 slots) master

   1 additionalreplica(s)

    M:6385ebf9ea346525671b8c339614de4cb2a118cc 172.16.1.11:7003

  slots:10923-16383 (5461 slots) master

   1 additionalreplica(s)

    M:f314dda271d135634d6849cdb649192b58b08d7f 172.16.1.11:7002

   slots:5461-10922(5462 slots) master

   1 additionalreplica(s)

  Destination node:

    M:4a174a6203795d7f57f4be52534d41f01e164f84 172.16.1.11:7007

   slots: (0 slots)master

   0 additionalreplica(s)

Resharding plan:#分片执行计划

Moving slot 5461 fromf314dda271d135634d6849cdb649192b58b08d7f

..这个节点分配的

Moving slot 10923 from6385ebf9ea346525671b8c339614de4cb2a118cc

Moving slot 10924 from6385ebf9ea346525671b8c339614de4cb2a118cc

..这个节点分配的

Moving slot 0 from68e9252e2e2404a0ced500a98085acaa5754c7a2

..这个节点分配的

Do you want to proceed with theproposed reshard plan (yes/no)? yes

#输入yes确认开始执行分片任务。

Moving slot 5461 from 172.16.1.11:7002 to172.16.1.11:7007:

。。。。。。

Moving slot 10923 from 172.16.1.11:7003 to172.16.1.11:7007:

。。。。。。

Moving slot 0 from 172.16.1.11:7001 to 172.16.1.11:7007:

。。。。。。

#查看集群状态

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
[iyunv@redis redis-cluster]# redis-cli -c -h 172.16.1.11-p 7007
172.16.1.11:7007> cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:7
cluster_size:4
cluster_current_epoch:7
cluster_my_epoch:7
cluster_stats_messages_sent:7616
cluster_stats_messages_received:7611
172.16.1.11:7007> cluster nodes
00371b626a2d42654a0cebb985311aee56578142 172.16.1.11:7005slave f314dda271d135634d6849cdb649192b58b08d7f 0 1481388706933 2 connected
  
6385ebf9ea346525671b8c339614de4cb2a118cc 172.16.1.11:7003master - 0 1481388706427 3 connected 10989-16383
  
4a174a6203795d7f57f4be52534d41f01e164f84172.16.1.11:7007 myself,master - 0 0 7 connected 0-65 5461-5527 10923-10988
  
8dc598b1ceb81e397903973eeba02e3e53770b0c 172.16.1.11:7006slave 6385ebf9ea346525671b8c339614de4cb2a118cc 0 1481388707436 3 connected
  
37384b8db7e9e5462d2da236d0104207eac26060 172.16.1.11:7004slave 68e9252e2e2404a0ced500a98085acaa5754c7a2 0 1481388706932 1 connected
  
68e9252e2e2404a0ced500a98085acaa5754c7a2 172.16.1.11:7001master - 0 1481388705922 1 connected 66-5460
  
f314dda271d135634d6849cdb649192b58b08d7f 172.16.1.11:7002master - 0 1481388706428 2 connected 5528-10922




#测试读写操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#在7007进入
172.16.1.11:7007> set name17 name17val1
-> Redirected to slot [3305] located at172.16.1.11:7001
OK
#跳到7001
172.16.1.11:7001> keys *
1) "name17"
172.16.1.11:7001> get name17
"name17val1"
  
#在7001进入
#因为事先得到了7003的值,就一直在7003下
172.16.1.11:7003> keys *
1) "name14"
2) "name11"
172.16.1.11:7003> get name17
-> Redirected to slot [3305] located at172.16.1.11:7001
"name17val1"
#可以发现得到哪个节点的值,就会跳到对应节点去
172.16.1.11:7001> keys *
1) "name17"
172.16.1.11:7001> get name17
"name17val1"





16、6、2、2添加从节点7008
1
[iyunv@redis ~]#/home/lly/tools/redis-3.2.5/src/redis-trib.rb add-node 172.16.1.11:7008172.16.1.11:7001




#172.16.1.11:7008为新节点,172.16.1.11:7001为任意集群中已存在的节点

(

也可以直接使用

redis-trib.rb add-node --slave--master-id 4a174a6203795d7f57f4be52534d41f01e164f84 172.16.1.11:7008172.16.1.11:7001

直接指定主节点,这样就不用利用replicate命令再次指定主节点了。

)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
>>> Adding node 172.16.1.11:7008 to cluster172.16.1.11:7001
>>> Performing Cluster Check (using node172.16.1.11:7001)
M: 68e9252e2e2404a0ced500a98085acaa5754c7a2172.16.1.11:7001
   slots:66-5460(5395 slots) master
   1 additionalreplica(s)
S: 00371b626a2d42654a0cebb985311aee56578142172.16.1.11:7005
   slots: (0 slots)slave
   replicatesf314dda271d135634d6849cdb649192b58b08d7f
M: 6385ebf9ea346525671b8c339614de4cb2a118cc172.16.1.11:7003
  slots:10989-16383 (5395 slots) master
   1 additionalreplica(s)
S: 37384b8db7e9e5462d2da236d0104207eac26060172.16.1.11:7004
   slots: (0 slots)slave
   replicates68e9252e2e2404a0ced500a98085acaa5754c7a2
M: 4a174a6203795d7f57f4be52534d41f01e164f84172.16.1.11:7007
  slots:0-65,5461-5527,10923-10988 (199 slots[lly16] ) master
   0 additionalreplica(s)
M: f314dda271d135634d6849cdb649192b58b08d7f172.16.1.11:7002
   slots:5528-10922(5395 slots) master
   1 additionalreplica(s)
S: 8dc598b1ceb81e397903973eeba02e3e53770b0c172.16.1.11:7006
   slots: (0 slots)slave
   replicates6385ebf9ea346525671b8c339614de4cb2a118cc
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
>>> Send CLUSTER MEET to node 172.16.1.11:7008to make it join the cluster.
[OK] New node added correctly.




#查看集群状态

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[iyunv@redis ~]# redis-cli -c -h 172.16.1.11 -p 7008
172.16.1.11:7008> cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:8
cluster_size:4
cluster_current_epoch:7
cluster_my_epoch:0
cluster_stats_messages_sent:367
cluster_stats_messages_received:367
172.16.1.11:7008> cluster nodes
f314dda271d135634d6849cdb649192b58b08d7f 172.16.1.11:7002master - 0 1481389544668 2 connected 5528-10922
  
37384b8db7e9e5462d2da236d0104207eac26060 172.16.1.11:7004slave 68e9252e2e2404a0ced500a98085acaa5754c7a2 0 1481389544163 1 connected
  
4a174a6203795d7f57f4be52534d41f01e164f84 172.16.1.11:7007master - 0 1481389545171 7 connected 0-65 5461-5527 10923-10988
  
6385ebf9ea346525671b8c339614de4cb2a118cc 172.16.1.11:7003master - 0 1481389543657 3 connected 10989-16383
  
68e9252e2e2404a0ced500a98085acaa5754c7a2 172.16.1.11:7001master - 0 1481389544667 1 connected 66-5460
  
8dc598b1ceb81e397903973eeba02e3e53770b0c 172.16.1.11:7006slave 6385ebf9ea346525671b8c339614de4cb2a118cc 0 1481389545673 3 connected




#下述为新增的从节点还未指定主节点

769cee49ada729901b9e9270467aeceff494be13172.16.1.11:7008 myself,master - 0 0 0 connected

00371b626a2d42654a0cebb985311aee56578142 172.16.1.11:7005slave f314dda271d135634d6849cdb649192b58b08d7f 0 1481389545674 2 connected

#指定7008从节点的主节点

#需要执行replicate命令来指定当前节点(从节点)的主节点id为哪个。

首先需要登录新加的7008节点的客户端,然后使用集群命令进行操作,把当前的7008(slave)节点指定到一个主节点下(这里使用之前创建的7007主节点4a174a6203795d7f57f4be52534d41f01e164f84

1
2
3
[iyunv@redis ~]# redis-cli -c -h 172.16.1.11 -p 7008
172.16.1.11:7008> cluster replicate4a174a6203795d7f57f4be52534d41f01e164f84
OK




#再次查看集群信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
[iyunv@redis ~]# redis-cli -c -h 172.16.1.11 -p 7008                                                   
172.16.1.11:7008> cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:8
cluster_size:4
cluster_current_epoch:7
cluster_my_epoch:7
cluster_stats_messages_sent:3199
cluster_stats_messages_received:3199
172.16.1.11:7008> cluster nodes
f314dda271d135634d6849cdb649192b58b08d7f 172.16.1.11:7002master - 0 1481390061799 2 connected 5528-10922
  
37384b8db7e9e5462d2da236d0104207eac26060 172.16.1.11:7004slave 68e9252e2e2404a0ced500a98085acaa5754c7a2 0 1481390061800 1 connected
  
4a174a6203795d7f57f4be52534d41f01e164f84 172.16.1.11:7007master - 0 1481390059784 7 connected 0-65 5461-5527 10923-10988
  
6385ebf9ea346525671b8c339614de4cb2a118cc 172.16.1.11:7003master - 0 1481390060289 3 connected 10989-16383
  
68e9252e2e2404a0ced500a98085acaa5754c7a2 172.16.1.11:7001master - 0 1481390059784 1 connected 66-5460
  
8dc598b1ceb81e397903973eeba02e3e53770b0c 172.16.1.11:7006slave 6385ebf9ea346525671b8c339614de4cb2a118cc 0 1481390060791 3 connected
  
#可以看到7008节点已经是7007主节点的从节点了
769cee49ada729901b9e9270467aeceff494be13172.16.1.11:7008 myself,slave 4a174a6203795d7f57f4be52534d41f01e164f84 0 0 0connected
  
00371b626a2d42654a0cebb985311aee56578142 172.16.1.11:7005slave f314dda271d135634d6849cdb649192b58b08d7f 0 1481390061294 2 connected




#测试节点信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
172.16.1.11:7008> keys *
(empty list or set)
172.16.1.11:7008> get name17
-> Redirected to slot [3305] located at172.16.1.11:7001
"name17val1"
172.16.1.11:7001>
172.16.1.11:7008> set name18 name18val1
-> Redirected to slot [15622] located at 172.16.1.11:7003
OK
172.16.1.11:7003> get name18
"name18val1"
172.16.1.11:7003> keys *
1) "name14"
2) "name11"
3) "name18"




#如果在新增从节点时的错误,解决如下:

[iyunv@redis ~]#/home/lly/tools/redis-3.2.5/src/redis-trib.rb add-node --slave --master-id4a174a6203795d7f57f4be52534d41f01e164f84

报错:

[ERR] Node 172.16.1.11:7008 isnot empty. Either the node already knows other nodes (check with CLUSTER NODES)or contains some key in database 0.

1、在停掉对应redis节点服务后,删除对应目录下的appendonly.aof、dump.rdb、nodes-7001.conf,重新启动redis-server后再次之后新增节点操作即可。


16、6、3删除节点16、6、3、1删除从节点7008

#769cee49ada729901b9e9270467aeceff494be13为7008的ID

1
2
3
4
[iyunv@redis ~]# /home/lly/tools/redis-3.2.5/src/redis-trib.rbdel-node 172.16.1.11:7008 769cee49ada729901b9e9270467aeceff494be13
>>> Removing node769cee49ada729901b9e9270467aeceff494be13 from cluster 172.16.1.11:7008
>>> Sending CLUSTER FORGET messages to thecluster...
>>> SHUTDOWN the node.




#测试是否能进入7008的redis的环境

1
2
3
[iyunv@redis ~]# redis-cli -c -h 172.16.1.11 -p 7008
Could not connect to Redis at 172.16.1.11:7008:Connection refused
Could not connect to Redis at 172.16.1.11:7008:Connection refused




#测试是否有7008进程,在删除节点的同时服务也被关掉了

1
2
3
4
5
6
7
8
[iyunv@redis ~]# ps -ef|grep redis|grep -v grep
root      5372      1  0 00:21 ?        00:00:15 redis-server 172.16.1.11:7007[cluster]                     
root      5394      1  0 00:26 ?        00:00:15 redis-server 172.16.1.11:7001[cluster]                     
root      5398      1  0 00:26 ?        00:00:15 redis-server 172.16.1.11:7002[cluster]                     
root      5402      1  0 00:26 ?        00:00:15 redis-server 172.16.1.11:7003[cluster]                     
root      5406      1  0 00:26 ?        00:00:14 redis-server 172.16.1.11:7004[cluster]                     
root      5410      1  0 00:26 ?        00:00:14 redis-server 172.16.1.11:7005[cluster]                     
root      5414      1  0 00:26 ?        00:00:14 redis-server 172.16.1.11:7006[cluster]




#查看集群信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
172.16.1.11:7001> cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:7
cluster_size:4
cluster_current_epoch:7
cluster_my_epoch:1
cluster_stats_messages_sent:21816
cluster_stats_messages_received:21807
172.16.1.11:7001> cluster nodes
00371b626a2d42654a0cebb985311aee56578142 172.16.1.11:7005slave f314dda271d135634d6849cdb649192b58b08d7f 0 1481391195529 5 connected
  
6385ebf9ea346525671b8c339614de4cb2a118cc 172.16.1.11:7003master - 0 1481391194014 3 connected 10989-16383
  
37384b8db7e9e5462d2da236d0104207eac26060 172.16.1.11:7004slave 68e9252e2e2404a0ced500a98085acaa5754c7a2 0 1481391194519 4 connected
  
4a174a6203795d7f57f4be52534d41f01e164f84 172.16.1.11:7007master - 0 1481391194519 7 connected 0-65 5461-5527 10923-10988
  
68e9252e2e2404a0ced500a98085acaa5754c7a2 172.16.1.11:7001myself,master - 0 0 1 connected 66-5460
  
f314dda271d135634d6849cdb649192b58b08d7f 172.16.1.11:7002master - 0 1481391196028 2 connected 5528-10922
  
8dc598b1ceb81e397903973eeba02e3e53770b0c 172.16.1.11:7006slave 6385ebf9ea346525671b8c339614de4cb2a118cc 0 1481391195022 6 connected




#测试在7008set的值是否还存在,对应“16、6、2、2添加从节点7008中的name18”

#在7003测试

1
2
3
4
5
6
7
8
9
172.16.1.11:7003> keys *
1) "name14"
2) "name11"
3) "name18"
# 虽然从节点删除了,但是从节点添加的name18还是存在的
172.16.1.11:7003> get name18
"name18val1"
172.16.1.11:7003> get name18
"name18val1"






16、6、3、2删除主节点7007

  #在删除7007主节点之前,必须先把其全部的数据(slot槽)移动到其他节点中去,然后再进行移除节点操作才行,不然会出现丢失数据的问题。(目前只能把数据迁移到一个节点上,暂时做不了平均分配功能。)


16、6、3、2、1主节点下没有从节点

#取消分配的slot过程

1
2
[iyunv@redis ~]#/home/lly/tools/redis-3.2.5/src/redis-trib.rb reshard 172.16.1.11:7007
>>> Performing Cluster Check (using node172.16.1.11:7007)




M:4a174a6203795d7f57f4be52534d41f01e164f84 172.16.1.11:7007

  slots:0-65,5461-5527,10923-10988 (199 slots)master

  0 additional replica(s)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
M: 68e9252e2e2404a0ced500a98085acaa5754c7a2172.16.1.11:7001
   slots:66-5460(5395 slots) master
   1 additionalreplica(s)
S: 8dc598b1ceb81e397903973eeba02e3e53770b0c172.16.1.11:7006
   slots: (0 slots)slave
   replicates6385ebf9ea346525671b8c339614de4cb2a118cc
M: f314dda271d135634d6849cdb649192b58b08d7f 172.16.1.11:7002
   slots:5528-10922(5395 slots) master
   1 additionalreplica(s)
S: 37384b8db7e9e5462d2da236d0104207eac26060172.16.1.11:7004
   slots: (0 slots)slave
   replicates68e9252e2e2404a0ced500a98085acaa5754c7a2
M: 6385ebf9ea346525671b8c339614de4cb2a118cc172.16.1.11:7003
  slots:10989-16383 (5395 slots) master
   1 additionalreplica(s)
S: 00371b626a2d42654a0cebb985311aee56578142172.16.1.11:7005
   slots: (0 slots)slave
   replicatesf314dda271d135634d6849cdb649192b58b08d7f
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.




How many slots do you want tomove (from 1 to 16384)? 199

[url=]#[/url]注意这里的槽数是199,不会刚好是200个槽

What is the receiving node ID? 68e9252e2e2404a0ced500a98085acaa5754c7a2

#这里输入的是7001的ID,把槽移动到7001

Please enter all the source node IDs.

  Type 'all' to useall the nodes as source nodes for the hash slots.

  Type 'done' onceyou entered all the source nodes IDs.

Source node #1:4a174a6203795d7f57f4be52534d41f01e164f84

#这里是要移除的7007主节点的ID

Source node #2:done

#直接输入done,开始生成迁移计划

Ready to move 199 slots.

  Source nodes:

    M:4a174a6203795d7f57f4be52534d41f01e164f84 172.16.1.11:7007

  slots:0-65,5461-5527,10923-10988 (199 slots) master

   0 additionalreplica(s)

  Destination node:

    M:68e9252e2e2404a0ced500a98085acaa5754c7a2 172.16.1.11:7001

   slots:66-5460(5395 slots) master

   1 additionalreplica(s)

  Resharding plan:

    Moving slot 0from 4a174a6203795d7f57f4be52534d41f01e164f84

。。。。。。。。移除的slots

    Moving slot10988 from 4a174a6203795d7f57f4be52534d41f01e164f84

Do you want to proceed with theproposed reshard plan (yes/no)? yes

#输入yes表示开始迁移

Moving slot 0 from 172.16.1.11:7007 to 172.16.1.11:7001:

。。。。。。。。移除的slots

Moving slot 10988 from 172.16.1.11:7007 to172.16.1.11:7001:

#查看集群信息

172.16.1.11:7001> cluster info

cluster_state:ok

cluster_slots_assigned:16384

cluster_slots_ok:16384

cluster_slots_pfail:0

cluster_slots_fail:0

cluster_known_nodes:7

cluster_size:3

cluster_current_epoch:8

cluster_my_epoch:8

cluster_stats_messages_sent:7598

cluster_stats_messages_received:7592

172.16.1.11:7001> cluster nodes


4a174a6203795d7f57f4be52534d41f01e164f84172.16.1.11:7007 master - 0 1481393144924 7 connected

00371b626a2d42654a0cebb985311aee56578142 172.16.1.11:7005slave f314dda271d135634d6849cdb649192b58b08d7f 0 1481393144412 5 connected

8dc598b1ceb81e397903973eeba02e3e53770b0c 172.16.1.11:7006slave 6385ebf9ea346525671b8c339614de4cb2a118cc 0 1481393143402 6 connected

f314dda271d135634d6849cdb649192b58b08d7f 172.16.1.11:7002master - 0 1481393143908 2 connected 5528-10922

#可以发现7008的槽已经分配的到了7001

68e9252e2e2404a0ced500a98085acaa5754c7a2172.16.1.11:7001 myself,master - 0 0 8 connected 0-552710923-10988

#未把7007的槽移给7001之前7001的槽数为

68e9252e2e2404a0ced500a98085acaa5754c7a2172.16.1.11:7001 myself,master - 0 0 1 connected 66-5460

6385ebf9ea346525671b8c339614de4cb2a118cc 172.16.1.11:7003master - 0 1481393142899 3 connected 10989-16383

37384b8db7e9e5462d2da236d0104207eac26060 172.16.1.11:7004slave 68e9252e2e2404a0ced500a98085acaa5754c7a2 0 1481393143403 8 connected

#查看集群进程

1
2
3
4
5
6
7
[iyunv@redis ~]# ps -ef|grep redis|grep -v grep
root      5613      1  0 01:41 ?        00:00:06 redis-server 172.16.1.11:7001[cluster]                     
root      5615      1  0 01:41 ?        00:00:06 redis-server 172.16.1.11:7002[cluster]                     
root      5621      1  0 01:41 ?        00:00:06 redis-server 172.16.1.11:7003[cluster]                     
root      5625      1  0 01:41 ?        00:00:06 redis-server 172.16.1.11:7004[cluster]                     
root      5629      1  0 01:41 ?        00:00:06 redis-server 172.16.1.11:7005[cluster]                     
root      5633      1  0 01:41 ?        00:00:06 redis-server 172.16.1.11:7006[cluster]



           

#现在7007进程还是存在的

root       5635     1  0 01:41 ?        00:00:06 redis-server 172.16.1.11:7007[cluster]  

#删除7007主节点

1
[iyunv@redis ~]#/home/lly/tools/redis-3.2.5/src/redis-trib.rb del-node 172.16.1.11:70074a174a6203795d7f57f4be52534d41f01e164f84



>>> Removing node4a174a6203795d7f57f4be52534d41f01e164f84 from cluster 172.16.1.11:7007

>>> Sending CLUSTER FORGET messages to thecluster...

>>> SHUTDOWN the node.

#查看集群信息,已经没有7007节点信息了

172.16.1.11:7001> 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:8

cluster_my_epoch:8

cluster_stats_messages_sent:9384

cluster_stats_messages_received:9378

172.16.1.11:7001> cluster nodes

00371b626a2d42654a0cebb985311aee56578142 172.16.1.11:7005slave f314dda271d135634d6849cdb649192b58b08d7f 0 1481393501468 5 connected

8dc598b1ceb81e397903973eeba02e3e53770b0c 172.16.1.11:7006slave 6385ebf9ea346525671b8c339614de4cb2a118cc 0 1481393500456 6 connected

f314dda271d135634d6849cdb649192b58b08d7f 172.16.1.11:7002master - 0 1481393500965 2 connected 5528-10922

68e9252e2e2404a0ced500a98085acaa5754c7a2 172.16.1.11:7001myself,master - 0 0 8 connected 0-5527 10923-10988

6385ebf9ea346525671b8c339614de4cb2a118cc 172.16.1.11:7003master - 0 1481393501468 3 connected 10989-16383

37384b8db7e9e5462d2da236d0104207eac26060 172.16.1.11:7004slave 68e9252e2e2404a0ced500a98085acaa5754c7a2 0 1481393499450 8 connected

#查看redis进程,7007进程自动停止了

1
2
3
4
5
6
7
[iyunv@redis ~]# ps -ef|grep redis|grep -v grep
root      5613      1  0 01:41 ?        00:00:07 redis-server 172.16.1.11:7001[cluster]                     
root      5615      1  0 01:41 ?        00:00:06 redis-server 172.16.1.11:7002[cluster]                     
root      5621      1  0 01:41 ?        00:00:07 redis-server 172.16.1.11:7003[cluster]                     
root      5625      1  0 01:41 ?        00:00:07 redis-server 172.16.1.11:7004[cluster]                     
root      5629      1  0 01:41 ?        00:00:06 redis-server 172.16.1.11:7005[cluster]                     
root      5633      1  0 01:41 ?        00:00:06 redis-server 172.16.1.11:7006[cluster]





16、6、3、2、1主节点下有从节点

#首先把新添加7007主节点和7008从节点,参考步骤“16、6、2添加节点”

#移除前的节点信息

[iyunv@redis ~]# redis-cli -c -h 172.16.1.11 -p 7001

172.16.1.11:7008> cluster nodes

37384b8db7e9e5462d2da236d0104207eac26060 172.16.1.11:7004slave 68e9252e2e2404a0ced500a98085acaa5754c7a2 0 1481393974867 8 connected

8c965e903668a7947727edd8ba9288205b0190cc172.16.1.11:7008 myself,slave 3724b337e95391596114f25f855f97b973994ca3 0 0 0connected

68e9252e2e2404a0ced500a98085acaa5754c7a2 172.16.1.11:7001master - 0 1481393974364 8 connected 69-5527 10923-10988

3724b337e95391596114f25f855f97b973994ca3172.16.1.11:7007 master - 0 1481393973859 9 connected 0-68 5528-559210989-11053

00371b626a2d42654a0cebb985311aee56578142 172.16.1.11:7005slave f314dda271d135634d6849cdb649192b58b08d7f 0 1481393973864 2 connected

f314dda271d135634d6849cdb649192b58b08d7f 172.16.1.11:7002master - 0 1481393974364 2 connected 5593-10922

8dc598b1ceb81e397903973eeba02e3e53770b0c 172.16.1.11:7006slave 6385ebf9ea346525671b8c339614de4cb2a118cc 0 1481393972856 3 connected

6385ebf9ea346525671b8c339614de4cb2a118cc 172.16.1.11:7003master - 0 1481393973355 3 connected 11054-16383

#取消分配slot

1
[iyunv@redis ~]#/home/lly/tools/redis-3.2.5/src/redis-trib.rb reshard 172.16.1.11:7007




>>> Performing Cluster Check (using node172.16.1.11:7007)

M:3724b337e95391596114f25f855f97b973994ca3 172.16.1.11:7007

  slots:0-68,5528-5592,10989-11053 (199 slots)master

  1 additional replica(s)

M: 6385ebf9ea346525671b8c339614de4cb2a118cc172.16.1.11:7003

  slots:11054-16383 (5330 slots) master

   1 additionalreplica(s)

S: 00371b626a2d42654a0cebb985311aee56578142 172.16.1.11:7005

   slots: (0 slots)slave

   replicatesf314dda271d135634d6849cdb649192b58b08d7f

M: 68e9252e2e2404a0ced500a98085acaa5754c7a2172.16.1.11:7001

  slots:69-5527,10923-10988 (5525 slots) master

   1 additionalreplica(s)

S: 8c965e903668a7947727edd8ba9288205b0190cc172.16.1.11:7008

   slots: (0 slots)slave

   replicates3724b337e95391596114f25f855f97b973994ca3

S: 8dc598b1ceb81e397903973eeba02e3e53770b0c172.16.1.11:7006

   slots: (0 slots)slave

   replicates6385ebf9ea346525671b8c339614de4cb2a118cc

S: 37384b8db7e9e5462d2da236d0104207eac26060172.16.1.11:7004

   slots: (0 slots)slave

   replicates68e9252e2e2404a0ced500a98085acaa5754c7a2

M: f314dda271d135634d6849cdb649192b58b08d7f172.16.1.11:7002

   slots:5593-10922(5330 slots) master

   1 additionalreplica(s)

[OK] All nodes agree about slots configuration.

>>> Check for open slots...

>>> Check slots coverage...

[OK] All 16384 slots covered.

How many slots do you want tomove (from 1 to 16384)? 199

What is the receiving node ID? 68e9252e2e2404a0ced500a98085acaa5754c7a2

Please enter all the source node IDs.

  Type 'all' to useall the nodes as source nodes for the hash slots.

  Type 'done' onceyou entered all the source nodes IDs.

Source node #1:3724b337e95391596114f25f855f97b973994ca3

Source node #2:done

Ready to move 199 slots.

  Source nodes:

    M:3724b337e95391596114f25f855f97b973994ca3 172.16.1.11:7007

  slots:0-68,5528-5592,10989-11053 (199 slots) master

   1 additionalreplica(s)

  Destination node:

    M:68e9252e2e2404a0ced500a98085acaa5754c7a2 172.16.1.11:7001

  slots:69-5527,10923-10988 (5525 slots) master

   1 additionalreplica(s)

  Resharding plan:

Moving slot 0 from3724b337e95391596114f25f855f97b973994ca3

。。移除的其他节点

Moving slot 11053 from 3724b337e95391596114f25f855f97b973994ca3

Do you want to proceed with theproposed reshard plan (yes/no)? yes

Moving slot 0 from 172.16.1.11:7007 to 172.16.1.11:7001:

。。移除的其他节点

Moving slot 11053 from 172.16.1.11:7007 to172.16.1.11:7001:

#删除7007节点ID

1
2
3
4
[iyunv@redis ~]#/home/lly/tools/redis-3.2.5/src/redis-trib.rb del-node 172.16.1.11:70073724b337e95391596114f25f855f97b973994ca3
>>> Removing node3724b337e95391596114f25f855f97b973994ca3 from cluster 172.16.1.11:7007
>>> Sending CLUSTER FORGET messages to thecluster...
>>> SHUTDOWN the node.




#查看集群节点信息

1
[iyunv@redis ~]# redis-cli -c -h 172.16.1.11 -p 7001




172.16.1.11:7001> cluster nodes

00371b626a2d42654a0cebb985311aee56578142 172.16.1.11:7005slave f314dda271d135634d6849cdb649192b58b08d7f 0 1481394169450 5 connected

#可以发现7008的主节点变成了7001

8c965e903668a7947727edd8ba9288205b0190cc172.16.1.11:7008 slave 68e9252e2e2404a0ced500a98085acaa5754c7a20 1481394169952 10 connected

8dc598b1ceb81e397903973eeba02e3e53770b0c 172.16.1.11:7006slave 6385ebf9ea346525671b8c339614de4cb2a118cc 0 1481394170457 6 connected

f314dda271d135634d6849cdb649192b58b08d7f 172.16.1.11:7002master - 0 1481394170457 2 connected 5593-10922

#此时7001有两个从节点

68e9252e2e2404a0ced500a98085acaa5754c7a2172.16.1.11:7001 myself,master - 0 0 10 connected 0-5592 10923-11053

6385ebf9ea346525671b8c339614de4cb2a118cc 172.16.1.11:7003master - 0 1481394171466 3 connected 11054-16383

37384b8db7e9e5462d2da236d0104207eac26060172.16.1.11:7004 slave 68e9252e2e2404a0ced500a98085acaa5754c7a20 1481394170963 10 connected

1
2
3
4
5
6
7
8
9
10
11
12
172.16.1.11:7001> cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:7
cluster_size:3
cluster_current_epoch:10
cluster_my_epoch:10
cluster_stats_messages_sent:12873
cluster_stats_messages_received:12860




#7007进程已经停掉了

1
2
3
4
5
6
7
8
[iyunv@redis ~]# ps -ef|grep redis|grep -v grep
root      5613      1  0 01:41 ?        00:00:11 redis-server 172.16.1.11:7001[cluster]                     
root      5615      1  0 01:41 ?        00:00:10 redis-server 172.16.1.11:7002[cluster]                     
root      5621      1  0 01:41 ?        00:00:10 redis-server 172.16.1.11:7003[cluster]                     
root      5625      1  0 01:41 ?        00:00:10 redis-server 172.16.1.11:7004[cluster]                     
root      5629      1  0 01:41 ?        00:00:10 redis-server 172.16.1.11:7005[cluster]                     
root      5633      1  0 01:41 ?        00:00:10 redis-server 172.16.1.11:7006[cluster]                     
root      5752      1  0 02:16 ?        00:00:02 redis-server 172.16.1.11:7008[cluster]





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-312958-1-1.html 上篇帖子: Redis3.0.7集群部署完整版 下篇帖子: 自学总结redis第三部分(安全性、主从、哨兵、事物、持久...
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表