1.启动redis
cd ~/redis/bin
./redis-server ../config/redis-27100.conf
2.停止reids
./redis-cli -h ip -p port shutdown
redis启动通过redis-server加载指定配置文件启动,所以redis只需编译一次,将工具拷贝到bin目录下,若同一台主机需要启动多个redis实例,只需增加几个配置文件,启动时指定加载不同配置文件来启动多个实例。
3.Redis集群手动配置
设置master节点
./bin/redis-trib.rb create ip1:port1 ip2:port2 … …
为master节点添加slave:./bin/redis-trib.rb add-node --slave --master-id mastered slaveip:port masterip:port
如果集群添加错误,将redis停止服务,清空data目录,重新添加。或者登录进入从节点,使用如下命令修改该从节点的主节点。
添加主节点
./redis-trib.rb add-node ip:port新添加的主从节点,需要向主节点分配一定的槽。分配槽点./redis-trib.rb reshard ip:port根据提示输入想分配的槽点的个数即可,接下来会提示是根据所有的槽作为源点进行分配还是从特点的node进行槽的重新分配。
删除节点
/redis-trib.rb del-node ip:port idps:这时候需要首先将该节点的存在的数据,也就是槽点进行删除才能够进行移除节点操作
4.查看集群状态
./redis-trib.rb check ip:port
5.登陆redis
cd ~/redis/bin
./redis-cli -c -h 192.168.***.*** -p 27100
-c 指定集群模式
-h 指定主机ip
-p 指定redis端口
登陆之后常用命令:
Info:可以查看节点状态,以下为部分信息。
INFO commandstats:通过这个工具可以查看所有命令统计的快照,比如命令执行了多少次,执行命令所耗费的毫秒数(每个命令的总时间和平均时间)
CLUSTER NODES:查看集群中各节点状态信息
slowlog get:查看执行慢的命令,假如只需要查看最后10个慢命令,输入slowlog get 10即可。
图中字段分别意思是:
1=日志的唯一标识符
2=被记录命令的执行时间点,以 UNIX 时间戳格式表示
3=查询执行时间,以微秒为单位。例子中命令使用54毫秒。
4= 执行的命令,以数组的形式排列。
集群扩缩容
在主机192.168.100.77上演示
1.扩容集群
扩容集群分为如下步骤:
(1)准备新节点
(2)加入集群
(3)迁移槽和数据
(1)准备新节点
新增两个redis节点,redis-6385和redis-6386
启动新节点
新增加的节点作为孤儿节点运行,并没有与其他节点通信
(2)加入集群
使用cluster meet命令将新节点加入集群
新节点刚开始都是主节点,但是由于没有负责的槽,所以不能接收任何读写操作,对于新增节点,后续操作一般有两种选择:
为他迁移槽和数据实现扩容
作为其他主节点的从节点负责故障转移。
redis-trib.rb也实现了为现有集群添加新节点的命令
redis-trib.rb add-node 192.168.100.77:6385 192.168.100.77:6379
redis-trib.rb add-node 192.168.100.77:6386 192.168.100.77:6379
(3)迁移槽和数据
加入集群后需要为新节点迁移槽和相关数据,槽在迁移过程中集群可以正常提供读写服务。
槽迁移计划
槽是redis集群管理数据的基本单元,在扩容节点时应首先制定槽的迁移计划,确定原有节点的那些槽可以迁移到新节点。迁移计划需要确保每个节点负责相似数量的槽,从而保证个节点数据的均匀性。新加入节点后,集群每个主节点负责的槽数将由5460变为4096
迁移数据
数据迁移过程是逐个槽开始进行的,实际操作肯定会涉及大量槽并且每个槽对应大量的键值对,因此redis-trib提供了槽重新分片的功能。
需要安装ruby依赖工具
./redis-trib.tb 192.168.100.77:6379
确认需要迁移的槽数量,本文为4096
输入接收迁移槽的目标节点ID,本文输入6385的节点ID,目标节点只能有一个。
分别输入源节点的ID,本文输入6379,6380,6381的节点ID,最后用done表示结束。
Enter后数据迁移之前会打印出所有的槽从源节点到目标节点的计划,确认无误后输入yes执行迁移工作。
redis-trib工具会打印出每个槽迁移的进度,如下所示:
执行cluster nodes命令检查节点和槽映射的关系
可以看到6385负责的槽位为10923-12287,执行redis-trib.rb rebalance检测节点之间槽的均衡性
可以看到槽差异在2%以内,因此集群节点数据相对均匀,无需调整。
(4)添加从节点
2.收缩集群
(1)槽迁移
收缩集群意味着缩小规模,需要从现有集群中安全下线部分节点。流程说明:
确认下线节点是否有负责的槽,如果有,需要把槽迁移到其他节点,保证节点下线后整个集群槽节点映射的完整性。
当下线节点不在负责槽或本身是从节点时,可以通知其他节点忘记下线节点,当所有节点忘记下线节点后该节点可以正常关闭。
例:下线6381和6384节点
6381节点负责槽位12288-16383,下线之前需要迁移槽位,源节点需要把自身负责的槽位均匀的迁移到其他主节点上,直接使用redis-trib.tb reshard命令完成槽迁移,每次迁移只能有一个目标节点。
./redis-trib.rb reshard 192.168.100.77:6381
输入迁移目的节点6379的ID
输入迁移源节点6381的ID,输入done确认
确认无误后输入yes开始迁移
cluster nodes可以看到6379接管了1365个槽12288-13652
把槽迁移到6380,重复上述过程
把槽迁移到6385,重复上述过程
可以看到,6381不在负责槽
(2)忘记节点
使用redis-trib.rb + del-node + 集群ip:port + 下线节点ID 命令忘记节点
对6381和6384节点进行下线操作
192.168.100.77:6379> cluster nodes查看节点已下线
高危风险操作
生产上禁止Key *操作。
flushall操作需要项目册评估影响范围,负责人进行审核。
RDB和aof文件根据项目需要进行配置。
Key删除与垃圾键清理需要负责人审核确认影响范围后进行删除。
网友评论