如何通过命令搭建redis-cluster

如何通过命令搭建redis-cluster,第1张

redis cluster配置好,并运行一段时间后,我们想添加节点,或者删除节点,该怎么办呢。

一,redis 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 槽中的键。

这些命令是集群所独有的。执行上述命令要先登录

查看复制打印?

[root@manage redis]# redis-cli -c -p 6382 -h 192.168.10.220//登录

192.168.10.220:6382>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:4

cluster_stats_messages_sent:82753

cluster_stats_messages_received:82754

二,添加节点

1,新配置二个测试节点

查看复制打印?

# cd /etc/redis

//新增配置

# cp redis-6379.conf redis-6378.conf &&sed -i "s/6379/6378/g" redis-6378.conf

# cp redis-6382.conf redis-6385.conf &&sed -i "s/6382/6385/g" redis-6385.conf

//启动

# redis-server /etc/redis/redis-6385.conf >/var/log/redis/redis-6385.log 2>&1 &

# redis-server /etc/redis/redis-6378.conf >/var/log/redis/redis-6378.log 2>&1 &

2,添加主节点

# redis-trib.rb add-node 192.168.10.219:6378 192.168.10.219:6379

注释:

192.168.10.219:6378是新增的节点

192.168.10.219:6379集群任一个旧节点

3,添加从节点

# redis-trib.rb add-node --slave --master-id 03ccad2ba5dd1e062464bc7590400441fafb63f2 192.168.10.220:6385 192.168.10.219:6379

注释:

--slave,表示添加的是从节点

--master-id 03ccad2ba5dd1e062464bc7590400441fafb63f2,主节点的node id,在这里是前面新添加的6378的node id

192.168.10.220:6385,新节点

192.168.10.219:6379集群任一个旧节点

4,重新分配slot

查看复制打印?

# redis-trib.rb reshard 192.168.10.219:6378 //下面是主要过程

How many slots do you want to move (from 1 to 16384)? 1000 //设置slot数1000

What is the receiving node ID? 03ccad2ba5dd1e062464bc7590400441fafb63f2 //新节点node id

Please enter all the source node IDs.

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

Type 'done' once you entered all the source nodes IDs.

Source node #1:all //表示全部节点重新洗牌

Do you want to proceed with the proposed reshard plan (yes/no)? yes //确认重新分

新增加的主节点,是没有slots的,

具体实现步骤如下:

1. 新建一个文本文件,包含redis命令

SET Key0 Value0

SET Key1 Value1

...

SET KeyN ValueN

如果有了原始数据,其实构造这个文件并不难,譬如shell,python都可以

2. 将这些命令转化成Redis Protocol。

因为Redis管道功能支持的是Redis Protocol,而不是直接的Redis命令。

如何转化,可参考后面的脚本。

3. 利用管道插入

cat data.txt | redis-cli --pipe

Shell VS Redis pipe

下面通过测试来具体看看Shell批量导入和Redis pipe之间的效率。

测试思路:分别通过shell脚本和Redis pipe向数据库中插入10万相同数据,查看各自所花费的时间。

Shell

脚本如下:

#!/bin/bash

for ((i=0i<100000i++))

do

echo -en "helloworld" | redis-cli -x set name$i >>redis.log

done

每次插入的值都是helloworld,但键不同,name0,name1...name99999。

Redis pipe

Redis pipe会稍微麻烦一点

1>首先构造redis命令的文本文件

在这里,我选用了python

#!/usr/bin/python

for i in range(100000):

print 'set name'+str(i),'helloworld'

# python 1.py >redis_commands.txt

# head -2 redis_commands.txt

set name0 helloworld

set name1 helloworld

2>将这些命令转化成Redis Protocol

在这里,我利用了github上一个shell脚本,

#!/bin/bash

while read CMDdo

# each command begins with *{number arguments in command}\r\n

XS=($CMD)printf "*${#XS[@]}\r\n"

# for each argument, we append ${length}\r\n{argument}\r\n

for X in $CMDdo printf "\$${#X}\r\n$X\r\n"done

done <redis_commands.txt

# sh 20.sh >redis_data.txt

# head -7 redis_data.txt

*3

$3

set

$5

name0

$10

helloworld

至此,数据构造完毕。

测试结果


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11885656.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存