redis工具扩容收缩运维工具

redis工具扩容收缩运维工具_redis

我们在 b01上创建2个新节点

mkdir -p /opt/redis_cluster/redis_{6890,6891}/{conf,logs,pid}
mkdir -p /data/redis_cluster/redis_{6390,6391}
cd /opt/redis_cluster/
cp redis_6380/conf/redis_6380.conf  redis_6390/conf/redis_6390.conf
cp redis_6380/conf/redis 6380.conf  redis_6391/conf/redis_6391.conf
sed -i 's#6380#6390#g' redis_6390/conf/redis_6390.conf
sed -i 's#6380#6391#g' redis_6391/conf/redis_6391.conf

 

启动节点
bash redis_shell.sh start 6390
bash redis_shell.sh start 6391
发现节点
redis-cli -c -h db01 -p 6380 cluster meet 10.0.0.51 6390
redis-cli -c -h db01 -p 6380 cluster meet 10.0.0.51 6391

 

在db01上使用工具扩容
cd /opt/redis_cluster/redis/src/
./redis-trib.rb add-node 10.0.0.51:6390 10.0.0.51:6380
./redis-trib.rb add-node 新节点  已接入的节点
./redis-trib.rb add-node 10.0.0.51:6391 10.0.0.51:6380
./redis-trib.rb reshard 10.0.0.51:6380

显示集群内所有节点信息

redis工具扩容收缩运维工具_redis_02

 接下来一步步操作

打印出进群每个节点信息后,reshard 命令需要确认迁移的槽数量,这里我们输入 4096个
How many slots do you want to move
(from 1 to 16384)?  4096
输入 6390 的节点 ID 作为目标节点,也就是要扩容的节点,目标节点只能指定一个
What is the receiving node ID?   xxxxxхxхX
之后输入源节点的ID,这里分别输入每个主节点的 6380 的 ID 最后输入 done,或者直接输入all
Source node #1:   all
迁移完成后命令会自动退出,这时候我们查看一下集群的状态
/redis-trib.rb rebalance 10.0.0.51:6380

redis工具扩容收缩运维工具_配置文件_03

 修改主从复制关系

redis工具扩容收缩运维工具_redis_04

 需要修改后的绑定关系

redis工具扩容收缩运维工具_配置文件_05

 

 操作步骤:

1,db03机器的6381 复制 db04的6390

redis工具扩容收缩运维工具_配置文件_06

 2,db04的6391复制db01的6380

redis工具扩容收缩运维工具_配置文件_07

 ----------------------------------------------------------------------------至此完美扩容完成------------------------------------------------------------------------------------------------------------------------------!

 

redis工具收缩节点

流程说明
1).首先需要确定下线节点是杏有负责的槽,如果是,需要把槽廷移到其他节点,保证节点下线后整个集群槽节点映射的完整性
2).当下线节点不再负责槽或者本身是从节点时,就可以通知集群内其他节点忘记下线节点,当所有的节点忘记该节点后可以正常关闭

redis工具扩容收缩运维工具_python_08

 

这里我们准备将刚才新添加的节点下线,也就是 6390和 6391
收缩和扩容迁移的方向相反,6390 变为源节点,其他节点变为目标节点,源节点把自己负责的 4096 个槽均匀的迁移到其他节点上,
由于 redis-trib.rbreshard 命令只能有一个目标节点,因此需要执行3次 reshard 命令,分别迁移1365,1365,1366 个槽
操作命令:

 

cd /opt/redis_cluster/redis/src
./redis-trib.rb  reshard 10.0.0.51:6380 【集群内任意一台都可以】
How many slots do you want to move(from 1 to 16384)?1365
输入 6380 的 id 接收者
输入6390 的 id  发送者 源槽位
done

 

redis工具扩容收缩运维工具_配置文件_09

redis工具扩容收缩运维工具_配置文件_10

 继续分配

redis工具扩容收缩运维工具_redis_11

 

redis工具扩容收缩运维工具_python_12

 忘记/删除 节点

由于我们的集群是做了高可用的,所以当主节点下线的时候从节点也会顶上,所以最好我们先下线从节点,然后在下线主节点

cd /opt/redis_cluster/redis/src/
./redis-trib.rb del-node 10.0.0.51:6391 节点ID
./redis-trib.rb del-node 10.0.0.51:6390 节点ID

redis工具扩容收缩运维工具_redis_13

运维工具总结:

集群(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 〈s1ot> MIGRATING〈node_id〉 将本节点的槽 slot 迁移到 node_id 指定的节点中。
CLUSTER SETSLOT <s1ot> INPORTING<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工具扩容收缩运维工具_python_14

 

 数据导入导出工具

需求背景
刚切换到 redis 集群的时候肯定会面临数据导入的问题,所以这里推荐使用 redis-migrate-too1 工具来导
入单节点数据到集群里
官方地址:

参考文献  redis-migrate-tool Redis 集群数据迁移工具

安装工具

cd /opt/redis_cluster
git clone https://github.com/vipshop/redis-migrate-tool.git
cd redis-migrate-tool/
autoreconf -fvi
./configure
make && make install

创建配置文件

redis工具扩容收缩运维工具_redis_15

 生成测试数据

redis工具扩容收缩运维工具_redis_16

 执行导入命令

[root@db01 ]# redis-migrate-tool -c redis_6379_to_6380.conf

 配置文件示例:从 rdb 文件恢复数据到 redis cluster 集群

[source]
type: rdb file
servers:
 - /data/redis/dump1.rdb
 - /data/redis/dump2.rdb
 - /data/redis/dump3.rdb

[target]
type: redis cluster
servers:
 - 127.0.0.1:7379

[common]
listen: 0.0.0.0:8888

 

分析键值大小

需求背景
redis的内存使用太大键值太多,不知道哪些键值占用的容量比较大,而且在线分析会影响性能
安装工具

yum install python-pip gcc python-devel
cd /opt/
git clone https://github.com/sripathikrishnan/redis-rdb-tools
cd redis-rdb-tools
python setup.py install

其他安装方式

工具安装
yum install python-pip gcc python-devel -y
pip install --upgrade pip
pip install rdbtools

使用方法

cd /data/redis_cluster/redis_6380/
rdb -c memory redis_6380.rdb  -f redis_6380.rdb.csv

分析rdb并导出

分析 rdb 并导出
awk -F ','  '{print $4,$2,$3,$1}'  redis_6380.rdb.csv   | sort > 6380.txt