1.使用工具搭建redis-cluster

手动搭建集群便于理解集群创建的流程和细节,不过手动搭建集群需要很多步骤,当集群节点众多时,必然会加大搭建集群的复杂度和运维成本,因此官方提供了redis-trib.rb的工具方便我们快件搭建集群

redis-trib.rb是采用ruby实现的redis集群管理工具,内部通过cluster相关命令帮我们简化集群创建,检查,槽迁移和均衡等常见运维操作,使用前要安装ruby依赖环境

安装命令:

yum makecache fast
yum install rubygems
gem sources -remove https://rubygems.org/
gem sources -a http://mirrors.aliyun.com/rubygems/
gem update --system
gem install redis -v 3.3.5
pkill redis
rm -rf /data/redis_cluster/redis_6380/*
rm -rf /data/redis_cluster/redis_6381/*
redis-server /opt/redis_cluster/redis_6380/conf/redis_6380.conf
redis-server /opt/redis_cluster/redis_6381/conf/redis_6381.conf
以上命令各个节点都执行一遍,一下就是使用工具创建集群在一台节点执行即可,后续集群创建成功后可以更换主从关系
cd /opt/redis_cluster/redis/src/
./redis-trib.rb create --replicas 1 10.0.0.51:6380 10.0.0.61:6380 10.0.0.71:6380 10.0.0.51:6381 10.0.0.61:6381 10.0.0.71:6381
./redis-trib.rb check 10.0.0.51:6380
./redis-trib.rb rebalance 10.0.0.51:6380

以下命令就是调整好主从关系的命令

redis-cli -c -h 10.0.0.51 -p 6381 cluster replicate 5d68652eda09d63811f27deb47b9e41443fc15ce
redis-cli -c -h 10.0.0.61 -p 6381 cluster replicate 97d03f0ac4afb811b80f71b706da4c7244a58255
redis-cli -c -h 10.0.0.71 -p 6381 cluster replicate 3bd2274a0d7d93cb99c45fde24b7492bd4d024c6

 2.使用工具扩容

工作步骤:

redis集群管理软件 redis集群工具_rubygems

之前我们是做好了3台服务器突然内存不够用了需要加一台新的集群到集群,怎么加呢?步骤如下:

扩容之前的单节点-(已知槽位固定的总数是16384 * 服务器数量)=每个节点需要分配给新节点的槽位

1)测试环境准备,添加一个新的节点

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
redis-server /opt/redis_cluster/redis_6390/conf/redis_6390.conf 
redis-server /opt/redis_cluster/redis_6391/conf/redis_6391.conf

 2)将新节点加入到集群

cd /opt/redis_cluster/redis

./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

####恢复集群默认配置----前提条件:没有数据,没有分配槽位,登录到对应的数据库,执行一下操作

10.0.0.51:6391> CLUSTER RESET

3)给新节点分配槽位

###链接集群中任意一个节点
./redis-trib.rb reshard 10.0.0.51:6380
###输入你想给新的节点分配多少槽位我这里是4096个,所以写4096
How many slots do you want to move(from 1 to 16384)?4096
###输入需要接收槽位的新节点
what is the receiving node ID ?xxxxxxxxxxxxxxxxxxxx
####这里意思是需要从那几个节点中划分出槽位给到新的节点,如果只有一个节点划分就写对应的节点ID即可以done结束,
如果是所有的节点都需要划分用all表示
Please enter all the source node ID
source node #1:all
###有一个交互的步骤输入yes即可
###分配完槽位之后检查一下是否成功
./redis-trib.rb check 10.0.0.51:6380

4)构建好主从关系,先画好主从拓扑图,理清楚思路在进行配置

redis集群管理软件 redis集群工具_键值_02

连接从数据库复制对应主库
redis-cli -h 10.0.0.51 -p 6381 CLUSTER REPLICATE 5d68652eda09d63811f27deb47b9e41443fc15ce
redis-cli -h 10.0.0.61 -p 6381 CLUSTER REPLICATE 97d03f0ac4afb811b80f71b706da4c7244a58255
redis-cli -h 10.0.0.71 -p 6381 CLUSTER REPLICATE 38098e54b1566cee6b6ba3b080eab0d428a912a0
redis-cli -h 10.0.0.51 -p 6391 CLUSTER REPLICATE 3bd2274a0d7d93cb99c45fde24b7492bd4d024c6

3. 使用工具收缩节点

流程说明

1)首先需要确定下线节点是否有负责的槽,如果是需要将槽迁移到其他节点,保证节点下线后整个集群槽节点映射的完整性

2)当下线节点不在负责槽或者本身是从节点时,就可以通知集群内其他节点忘记下线节点,当所有的节点忘记该节点后可以正常关闭

这里我们准备将刚才新添加的节点下线,也就是6390和6391

收缩和扩容的方向相反,6390变为源节点,其他变为目标节点,源节点吧自己负责的4096个槽均匀的迁移到其他节点上

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)?1635
What is the receiving node ID?  输入你想将槽位分配给谁的ID
Please enter all the source node IDs 输入被拆分的节点ID
输入done
注意:在扩容节点时可以输入all一次性扩容,但是在收缩节点时必须得一个一个的去收缩

4.使用工具删除节点

操作命令:
./redis-trib.rb del-node IP:PORT ID

1)从库可以直接删除

2)主库必须是没有槽位并且没有数据

 5.数据导入导出工具

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 <<EOF
#!/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
EOF
4)执行导入命令
redis-migrate-tool -c redis_6379_to_6380.conf

6.分析键值大小

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

安装工具:
yum install python-pip gcc
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并导出,执行上面命令后会生成一个csv的文件,这时用awk分析一下就可以了知道那个KEY值大
awk -F ',' '{print $4,$3}' redis_6380.rdb.csv |sort -rn |head -10

 

学海无涯,不进则退,日积跬步,以至千里。本博客所写内容仅为个人在学习和研究过程中的一些心得体会及总结笔记,仅代表个人观点。一切以官方为准,版本差异请自行甄别