1、redis扩容
1)在db01上创建新节点
mkdir -p /opt/redis_cluster/redis_{6390,6391}/{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
2)在db01上启动新节点
bash redis_shell.sh start 6390
bash redis_shell.sh start 6391
3)使用工具发现节点并重新分配槽位
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 10.0.0.51:6391 10.0.0.51:6380
./redis-trib.rb reshard 10.0.0.51:6380
4)输入需要迁移多少个槽位
4096
yes
########输入db01的6390的ID#########
all
yes
5)重新做主从关系
先做db03的6381复制db01的6390
再做db01的6391复制db01的6380
2、redis收容
收缩节点:
#进入脚本目录
cd /opt/redis_cluster/redis/src/
./redis-trib.rb reshard 10.0.0.51:6391
#输入要迁移的槽数
1365
#输入接收的节点的ID
xxxxx
#输入源节点的ID
1.xxxxx
2.done
#输入确认
yes
从10.0.0.51:6390收容三次
2.1、删除节点
./redis-trib.rb del-node IP:端口 ID
1)从库可以直接删除
2)主库槽位必须是空的并且没有数据才能删除
2.2、删除节点出错问题分析
[root@db01 /opt/redis_cluster/redis/src]# ./redis-trib.rb del-node 10.0.0.51:6380 01eab3c9f767c88fdbc94f3a7e39ee65ce30baa1
>>> Removing node 01eab3c9f767c88fdbc94f3a7e39ee65ce30baa1 from cluster 10.0.0.51:6380
[ERR] Node 10.0.0.51:6380 is not empty! Reshard data away and try again.
问题:
1)主从关系不对
2)没分配槽位直接做了主从
3)出现问题可以尝试实用工具的fix功能
cd /opt/redis_cluster/redis/src/
./redis-trib.rb fix 10.0.0.51:6380
4)快速重新做个4主4从的集群
1.停掉所有节点
pkill redis
2.删除所有节点数据
rm -rf /data/redis_cluster/redis_6380/*
rm -rf /data/redis_cluster/redis_6381/*
3.所有节点重新启动redis
sh redis_shell.sh start 6380
sh redis_shell.sh start 6380
4.利用工具创建集群
cd /opt/redis_cluster/redis/src/
./redis-trib.rb create --replicas 1 10.0.0.51:6380 10.0.0.51:6390 10.0.0.52:6380 10.0.0.53:6380 10.0.0.51:6381 10.0.0.51:6391 10.0.0.52:6381 10.0.0.53:6381
5.重新分配主从关系
redis-cli -h 10.0.0.51 -p 6381 CLUSTER REPLICATE ID号
redis-cli -h 10.0.0.52 -p 6381 CLUSTER REPLICATE ID号
redis-cli -h 10.0.0.53 -p 6381 CLUSTER REPLICATE ID号
redis-cli -h 10.0.0.51 -p 6391 CLUSTER REPLICATE ID号
3、数据导入导出工具
1.安装工具
cd /opt/redis_cluster/
git clone https://github.com/vipshop/redis-migrate-tool.git
cd redis-migrate-tool/
autoreconf -fvi
./configure
make && make install
2.生成配置文件
cat > redis_6379_to_6380.conf <<EOF
[source]
type: single
servers:
- 10.0.0.51:6379
[target]
type: redis cluster
servers:
- 10.0.0.51:6380
[common]
listen: 0.0.0.0:8888
source_safe: true
EOF
3.生成测试数据
cat input_key.sh
#!/bin/bash
for i in $(seq 1 1000)
do
redis-cli -c -h db01 -p 6379 set k_${i} v_${i} && echo "set k_${i} is ok"
done
4.执行导入命令
redis-migrate-tool -c redis_6379_to_6380.conf
4、分析占用空间比较大的键
需求背景
redis的内存使用太大键值太多,不知道哪些键值占用的容量比较大,而且在线分析会影响性能.
安装工具
yum install python-pip gcc
pip install --upgrade pip
pip install rdbtools
使用方法
cd /data/redis_cluster/redis_6379/
rdb -c memory redis_6379.rdb -f 6379_memory.csv
分析rdb
awk -F ',' '{print $4,$2,$3,$1}' 6379_memory.csv |sort > 6379.sort
网友评论