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
显示集群内所有节点信息
接下来一步步操作
打印出进群每个节点信息后,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
修改主从复制关系
需要修改后的绑定关系
操作步骤:
1,db03机器的6381 复制 db04的6390
2,db04的6391复制db01的6380
----------------------------------------------------------------------------至此完美扩容完成------------------------------------------------------------------------------------------------------------------------------!
redis工具收缩节点
流程说明
1).首先需要确定下线节点是杏有负责的槽,如果是,需要把槽廷移到其他节点,保证节点下线后整个集群槽节点映射的完整性
2).当下线节点不再负责槽或者本身是从节点时,就可以通知集群内其他节点忘记下线节点,当所有的节点忘记该节点后可以正常关闭
这里我们准备将刚才新添加的节点下线,也就是 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
继续分配
忘记/删除 节点
由于我们的集群是做了高可用的,所以当主节点下线的时候从节点也会顶上,所以最好我们先下线从节点,然后在下线主节点
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
运维工具总结:
集群(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 集群的时候肯定会面临数据导入的问题,所以这里推荐使用 redis-migrate-too1 工具来导
入单节点数据到集群里
官方地址:http://www.oschina.net/p/redis-migrate-tool
参考文献 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
创建配置文件
生成测试数据
执行导入命令
[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
本文来自博客园,作者:孙龙-程序员,转载请注明原文链接:https://www.cnblogs.com/sunlong88/p/18378955