ITPub博客

首页 > 数据库 > NoSQL > redis集群搭建和简单操作

redis集群搭建和简单操作

原创 NoSQL 作者:shuangseqiu1 时间:2019-04-04 18:20:19 1 删除 编辑

一、搭建篇

在一台服务器上,搭建redis集群(六个节点,三主三备)

1,创建需要的目录

mkdir -p /data/redis/7000
mkdir -p /data/redis/7001
mkdir -p /data/redis/7002
mkdir -p /data/redis/7003
mkdir -p /data/redis/7004
mkdir -p /data/redis/7005
2,下载redis-5.0.3.tar.gz,并解压
cd /data/redis
tar xzf redis-5.0.3.tar.gz
拷贝到各个目录下
cp /data/redis/redis-5.0.3 /data/redis/7000
cp /data/redis/redis-5.0.3 /data/redis/7001
cp /data/redis/redis-5.0.3 /data/redis/7002
cp /data/redis/redis-5.0.3 /data/redis/7003
cp /data/redis/redis-5.0.3 /data/redis/7004
cp /data/redis/redis-5.0.3 /data/redis/7005
3,修改各个集群的redis.conf文件
port 7000                               //这是每个节点的端口,需要分别写7000-7005
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
4,去每个目录下去初始化(nodes.conf文件会在当前执行的目录下生成)
例如:
cd 7000
../redis-server ./redis.conf  &
5,创建集群
redis-cli --cluster create 127.0.0.1:7000 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 --cluster-replicas 1

输入yes代表接受建议的配置。将配置并加入群集,这意味着实例将被引导为彼此通信。

创建集群成功会有如下输出
[OK] All 16384 slots covered
备注: 选项--cluster-replicas 1     意味着我们想要为每个创建的主服务器创建一个slave
6,修改环境变量
vim /etc/profile
添加一行
export PATH=/data/redis/redis-5.0.3/src:$PATH
7,测试Redis Cluster
尝试上述任何客户端或简单地使用redis-cli命令行实用程序。
[root@redis_test1 redis-5.0.3]# redis-cli -c -p 7000
127.0.0.1:7000> set foo bar
-> Redirected to slot [12182] located at 127.0.0.1:7002
OK
127.0.0.1:7002> set hello world
-> Redirected to slot [866] located at 127.0.0.1:7000
OK
127.0.0.1:7000> get foo
-> Redirected to slot [12182] located at 127.0.0.1:7002
"bar"
127.0.0.1:7002> get hello
-> Redirected to slot [866] located at 127.0.0.1:7000
"world"
127.0.0.1:7000> get bar
(nil)
127.0.0.1:7000>

二、操作篇
1, 查看各个节点信息
[root@redis_test1 ~]# redis-cli -p 7000 cluster nodes
0e7e0bb3e32276aa03a1d2331d79dbf3698ef4cb 127.0.0.1:7001@17001 master - 0 1554349124575 10 connected 0-4 5961-11422
7de8d741ff88d29b5b0cd8065a2199e6d56d1046 127.0.0.1:7000@17000 myself,master - 0 1554349124000 8 connected 5-5460
6bdceca4256eb80316b655e3a0e9449dacb64336 127.0.0.1:7002@17002 master - 0 1554349124575 9 connected 5461-5960 11423-16383
c37d7d23f39144305e1d201c68c7520f103c40d4 127.0.0.1:7004@17004 slave 0e7e0bb3e32276aa03a1d2331d79dbf3698ef4cb 0 1554349129000 10 connected
912a5a59f334f2b1c02ef6f12463a0845cfa136c 127.0.0.1:7003@17003 slave 7de8d741ff88d29b5b0cd8065a2199e6d56d1046 0 1554349128587 8 connected
e8a12d900b28bdb445b78302a42f052bf5c41366 127.0.0.1:7005@17005 slave 6bdceca4256eb80316b655e3a0e9449dacb64336 0 1554349129289 9 connected

查看集群中的master和slave的信息
[root@redis_test1 ~]# redis-cli -p 7000 cluster nodes | grep master
查看每个节点的信息
[root@redis_test1 ~]# redis-cli -p 7000 cluster nodes | grep myself
2, 重新sharding集群(分片)
1)需要手动输入
[root@redis_test1 ~]# redis-cli --cluster reshard 127.0.0.1:7000
>>> Performing Cluster Check (using node 127.0.0.1:7000)
M: 7de8d741ff88d29b5b0cd8065a2199e6d56d1046 127.0.0.1:7000
slots:[0-5460] (5461 slots) master
1 additional replica(s)
M: 0e7e0bb3e32276aa03a1d2331d79dbf3698ef4cb 127.0.0.1:7001
slots:[5461-10922] (5462 slots) master
1 additional replica(s)
M: 6bdceca4256eb80316b655e3a0e9449dacb64336 127.0.0.1:7002
slots:[10923-16383] (5461 slots) master
1 additional replica(s)
S: c37d7d23f39144305e1d201c68c7520f103c40d4 127.0.0.1:7004
slots: (0 slots) slave
replicates 0e7e0bb3e32276aa03a1d2331d79dbf3698ef4cb
S: 912a5a59f334f2b1c02ef6f12463a0845cfa136c 127.0.0.1:7003
slots: (0 slots) slave
replicates 7de8d741ff88d29b5b0cd8065a2199e6d56d1046
S: e8a12d900b28bdb445b78302a42f052bf5c41366 127.0.0.1:7005
slots: (0 slots) slave
replicates 6bdceca4256eb80316b655e3a0e9449dacb64336
[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 to move (from 1 to 16384) ? 500   //你要移动多少个插槽(从1到16384),输入500
What is the receiving node ID? 6bdceca4256eb80316b655e3a0e9449dacb64336           //输入接收slots(插槽)的节点node id
Please enter all the source node IDs.                                   //请输入所有源节点ID。
Type 'all' to use all the nodes as source nodes for the hash slots.      //  键入“all”以将所有节点用作散列槽的源节点。
Type 'done' once you entered all the source nodes IDs.            //输入所有源节点ID后,键入“done”结束。
Source node #1: 0e7e0bb3e32276aa03a1d2331d79dbf3698ef4cb        //这是source  slots的节点的node id
Source node #2: done
Ready to move 500 slots.
Source nodes:
M: 0e7e0bb3e32276aa03a1d2331d79dbf3698ef4cb 127.0.0.1:7001
slots:[5461-11422] (5962 slots) master
1 additional replica(s)
Destination node:
M: 6bdceca4256eb80316b655e3a0e9449dacb64336 127.0.0.1:7002
slots:[11423-16383] (4961 slots) master
1 additional replica(s)
Resharding plan:
Moving slot 5461 from 0e7e0bb3e32276aa03a1d2331d79dbf3698ef4cb
Moving slot 5462 from 0e7e0bb3e32276aa03a1d2331d79dbf3698ef4cb

Moving slot 5463 from 0e7e0bb3e32276aa03a1d2331d79dbf3698ef4cb

2)自动分片
语句:redis-cli --cluster reshard <host>:<port> --cluster-from <node-id> --cluster-to <node-id> --cluster-slots <number of slots> --cluster-yes
例如
[root@redis_test1 ~]# redis-cli --cluster reshard 127.0.0.1:7000 --cluster-from 7de8d741ff88d29b5b0cd8065a2199e6d56d1046 --cluster-to 0e7e0bb3e32276aa03a1d2331d79dbf3698ef4cb --cluster-slots 5 --cluster-yes
>>> Performing Cluster Check (using node 127.0.0.1:7000)
M: 7de8d741ff88d29b5b0cd8065a2199e6d56d1046 127.0.0.1:7000
slots:[0-5460] (5461 slots) master
1 additional replica(s)
M: 0e7e0bb3e32276aa03a1d2331d79dbf3698ef4cb 127.0.0.1:7001
slots:[5961-11422] (5462 slots) master
1 additional replica(s)
M: 6bdceca4256eb80316b655e3a0e9449dacb64336 127.0.0.1:7002
slots:[5461-5960],[11423-16383] (5461 slots) master
1 additional replica(s)
S: c37d7d23f39144305e1d201c68c7520f103c40d4 127.0.0.1:7004
slots: (0 slots) slave
replicates 0e7e0bb3e32276aa03a1d2331d79dbf3698ef4cb
S: 912a5a59f334f2b1c02ef6f12463a0845cfa136c 127.0.0.1:7003
slots: (0 slots) slave
replicates 7de8d741ff88d29b5b0cd8065a2199e6d56d1046
S: e8a12d900b28bdb445b78302a42f052bf5c41366 127.0.0.1:7005
slots: (0 slots) slave
replicates 6bdceca4256eb80316b655e3a0e9449dacb64336
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
Ready to move 5 slots.
Source nodes:
M: 7de8d741ff88d29b5b0cd8065a2199e6d56d1046 127.0.0.1:7000
slots:[0-5460] (5461 slots) master
1 additional replica(s)
Destination node:
M: 0e7e0bb3e32276aa03a1d2331d79dbf3698ef4cb 127.0.0.1:7001
slots:[5961-11422] (5462 slots) master
1 additional replica(s)
Resharding plan:
Moving slot 0 from 7de8d741ff88d29b5b0cd8065a2199e6d56d1046
Moving slot 1 from 7de8d741ff88d29b5b0cd8065a2199e6d56d1046
Moving slot 2 from 7de8d741ff88d29b5b0cd8065a2199e6d56d1046
Moving slot 3 from 7de8d741ff88d29b5b0cd8065a2199e6d56d1046
Moving slot 4 from 7de8d741ff88d29b5b0cd8065a2199e6d56d1046
Moving slot 0 from 127.0.0.1:7000 to 127.0.0.1:7001:
Moving slot 1 from 127.0.0.1:7000 to 127.0.0.1:7001:
Moving slot 2 from 127.0.0.1:7000 to 127.0.0.1:7001:
Moving slot 3 from 127.0.0.1:7000 to 127.0.0.1:7001:
Moving slot 4 from 127.0.0.1:7000 to 127.0.0.1:7001:
3,检查群集的运行状况
[root@redis_test1 ~]# redis-cli --cluster check 127.0.0.1:7000
127.0.0.1:7000 (7de8d741...) -> 2 keys | 5461 slots | 1 slaves.
127.0.0.1:7001 (0e7e0bb3...) -> 0 keys | 5462 slots | 1 slaves.
127.0.0.1:7002 (6bdceca4...) -> 1 keys | 5461 slots | 1 slaves.
[OK] 3 keys in 3 masters.
0.00 keys per slot on average.
>>> Performing Cluster Check (using node 127.0.0.1:7000)
M: 7de8d741ff88d29b5b0cd8065a2199e6d56d1046 127.0.0.1:7000
slots:[0-5460] (5461 slots) master
1 additional replica(s)
M: 0e7e0bb3e32276aa03a1d2331d79dbf3698ef4cb 127.0.0.1:7001
slots:[5961-11422] (5462 slots) master
1 additional replica(s)
M: 6bdceca4256eb80316b655e3a0e9449dacb64336 127.0.0.1:7002
slots:[5461-5960],[11423-16383] (5461 slots) master
1 additional replica(s)
S: c37d7d23f39144305e1d201c68c7520f103c40d4 127.0.0.1:7004
slots: (0 slots) slave
replicates 0e7e0bb3e32276aa03a1d2331d79dbf3698ef4cb
S: 912a5a59f334f2b1c02ef6f12463a0845cfa136c 127.0.0.1:7003
slots: (0 slots) slave
replicates 7de8d741ff88d29b5b0cd8065a2199e6d56d1046
S: e8a12d900b28bdb445b78302a42f052bf5c41366 127.0.0.1:7005
slots: (0 slots) slave
replicates 6bdceca4256eb80316b655e3a0e9449dacb64336
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
4, 主库崩溃演练
[root@redis_test1 ~]# redis-cli -p 7002 debug segfault       (干掉127.0.0.1:7002节点)
Error: Server closed the connection
查看此时各个节点的信息
[root@redis_test1 ~]# redis-cli -p 7000 cluster nodes
0e7e0bb3e32276aa03a1d2331d79dbf3698ef4cb 127.0.0.1:7001@17001 master - 0 1554349430819 10 connected 0-4 5961-11422
7de8d741ff88d29b5b0cd8065a2199e6d56d1046 127.0.0.1:7000@17000 myself,master - 0 1554349430000 8 connected 5-5460
6bdceca4256eb80316b655e3a0e9449dacb64336 127.0.0.1:7002@17002 master,fail - 1554349217436 1554349215531 9 disconnected
c37d7d23f39144305e1d201c68c7520f103c40d4 127.0.0.1:7004@17004 slave 0e7e0bb3e32276aa03a1d2331d79dbf3698ef4cb 0 1554349431321 10 connected
912a5a59f334f2b1c02ef6f12463a0845cfa136c 127.0.0.1:7003@17003 slave 7de8d741ff88d29b5b0cd8065a2199e6d56d1046 0 1554349431000 8 connected
e8a12d900b28bdb445b78302a42f052bf5c41366 127.0.0.1:7005@17005 master - 0 1554349430000 11 connected 5461-5960 11423-16383
重启127.0.0.1:7002节点,状态变成
6bdceca4256eb80316b655e3a0e9449dacb64336 :0@0 master,fail,noaddr - 1554349217436 1554349215531 9 disconnected

使用forget,去除掉这个节点(因为是6个节点,所以需要开五个窗口挨个执行cluster forget命令)

[root@redis_test1 ~]# redis-cli -p 7000
127.0.0.1:7000>  cluster forget 6bdceca4256eb80316b655e3a0e9449dacb64336
OK
[root@redis_test1 ~]# redis-cli -p 7001
127.0.0.1:7001> cluster forget 6bdceca4256eb80316b655e3a0e9449dacb64336
OK
,,,,,,,,
添加一个节点作为slave(把7002加入集群,作为7005的从库)
redis-cli --cluster add-node 127.0.0.1:7002 127.0.0.1:7005 --cluster-slave --cluster-master-id e8a12d900b28bdb445b78302a42f052bf5c41366

因为这个7005不是新的节点,所以加入不进去集群,报错

[ERR] Node 127.0.0.1:7002 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.

解决办法:

1,将7002的节点下aof、rdb等本地备份文件删除;

2,同时将7002的节点的集群配置文件删除,即:删除你redis.conf里面cluster-config-file所在的文件;

3,登录redis,清空当前数据库

[root@redis_test1 redis]# redis-cli -p 7002
127.0.0.1:7002> flushdb
4,重启Redis数据库

然后再次添加就可以把7002加入到集群中了

可以看到,7002已经成为了7005的从库

127.0.0.1:7002> cluster nodes
0e7e0bb3e32276aa03a1d2331d79dbf3698ef4cb 127.0.0.1:7001@17001 master - 0 1554372937000 10 connected 0-4 5961-11422
912a5a59f334f2b1c02ef6f12463a0845cfa136c 127.0.0.1:7003@17003 slave 7de8d741ff88d29b5b0cd8065a2199e6d56d1046 0 1554372938047 8 connected
7de8d741ff88d29b5b0cd8065a2199e6d56d1046 127.0.0.1:7000@17000 master - 0 1554372937044 8 connected 5-5460
61fee5e56bb9009105d660e995d51a795d7ae083 127.0.0.1:7002@17002 myself,slave e8a12d900b28bdb445b78302a42f052bf5c41366 0 1554372936000 0 connected
c37d7d23f39144305e1d201c68c7520f103c40d4 127.0.0.1:7004@17004 slave 0e7e0bb3e32276aa03a1d2331d79dbf3698ef4cb 0 1554372936542 10 connected
e8a12d900b28bdb445b78302a42f052bf5c41366 127.0.0.1:7005@17005 master - 0 1554372937546 11 connected 5461-5960 11423-16383



来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31447263/viewspace-2640456/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: redis主从配置
请登录后发表评论 登录
全部评论

注册时间:2017-03-24

  • 博文量
    31
  • 访问量
    55022