原始人手动分配 redis slot
因为开发需要,在本地虚拟机搭建了9个节点的redis集群,使用的版本是redis 3.2。最近由于几次强制关闭虚拟机,导致虚拟机里的redis 集群出现问题,查看节点日志,提示Unrecoverable error: corrupted cluster config file., 搜索网上资料,原来是强制关机把redis 集群节点的配置文件给搞坏了。
下面尝试了两个方法:
方法1是通过ps命令查看没有启动的redis节点,然后对应修改配置文件或者直接删除掉/var/lib/redis/nodes-7003.conf,然后重启/usr/bin/redis-server /data1/redis_cluster/7003/redis.conf,
通过命令
redis-cli -p 7000 -c
> CLUSTER MEET 127.0.0.1 7003
将刚才的节点加入集群。
遗憾的是,通过这种方法将配置损坏的redis实例加入集群后,整个集群还是有问题,集群slot的分配出现了问题,需要人肉分配下slot,一共有16384个slot要分配。
为了不一一找出哪些slot没有分配,而且是本地开发,redis内的缓存可以清空,所以打算重建集群并手动分配slot。
重建集群
- 通过flushdb清空数据,
- 删除掉/var/lib/redis/下的配置文件,比如nodes-7003.conf
- 重启redis实例
/usr/bin/redis-server /data1/redis_cluster/7003/redis.conf - 通过
CLUSTER MEET一台台将redis实例加入集群 - 通过
CLUSTER NODES和CLUSTER INFO查看集群加入的节点和已分配好的slot。
分配slot
我们通过redis自动的CLUSTER ADDSlOTS 来分配集群,使用这个命令需要一个个指定要添加的slot编码,从0到16383,不支持输入范围,比如0-1000。
9个节点大概每个可以分配1820个槽左右,通过一段python脚本来生成命令
def assign_slot():
count = 0
arr = []
with open("slot.log", "w") as f:
for i in range(16384):
count += 1
if count <= 1850:
arr.append(str(i))
else:
print 'CLUSTER ADDSLOTS ' + ' '.join(arr)
f.write('CLUSTER ADDSLOTS ' + ' '.join(arr) + '\n\r')
arr = []
arr.append(str(i))
count = 1
if len(arr) > 0:
print 'CLUSTER ADDSLOTS ' + ' '.join(arr)
f.writelines('CLUSTER ADDSLOTS ' + ' '.join(arr) + '\n\r')
打开生成的slot.log文件,一共生成了9行,每一行用来为一个redis实例分配slot,比如为7000端口的实例分配redis-cli -p 7000 -c 粘贴的命令,依次将剩下的命令在其他实例上执行。
通过命令查看分配结果:
127.0.0.1:7000> cluster nodes
cd9d317852eb0d6012100dece46a6daafcd10ca9 127.0.0.1:7007 master - 0 1651224343287 7 connected 12950-14799
a49c882dce6a155dcf2c4e90c19bbaae9e3225b2 127.0.0.1:7004 master - 0 1651224345311 4 connected 7400-9249
2979ab195125cd752ecec106df3419fe669f0ecf 127.0.0.1:7003 master - 0 1651224340624 3 connected 5550-7399
e4c92e7a1b142376d25ab2456fecd3e5a233c9db 127.0.0.1:7002 master - 0 1651224341247 0 connected 3700-5549
b61f06656b2d35f435f150353a6197040b6affb1 127.0.0.1:7001 master - 0 1651224344302 1 connected 1850-3699
22740d47d4bcdd22dd78e6ebb6b30d4087042a0c 127.0.0.1:7006 master - 0 1651224342268 6 connected 11100-12949
156f9b71b8928171226dbc41fadeaf2a3ca7568b 127.0.0.1:7005 master - 0 1651224339194 5 connected 9250-11099
1dfa42ec5acbac28abe22f85a75d3309906b2ffe 127.0.0.1:7008 master - 0 1651224338884 8 connected 14800-16383
d814bc38e3afe56fb11b081a5c5a9731877bcaf1 127.0.0.1:7000 myself,master - 0 0 2 connected 0-1849 [12984-<-cd9d317852eb0d6012100dece46a6daafcd10ca9] [13360-<-cd9d317852eb0d6012100dece46a6daafcd10ca9] [13396-<-cd9d317852eb0d6012100dece46a6daafcd10ca9] [13414-<-cd9d317852eb0d6012100dece46a6daafcd10ca9] [13499-<-cd9d317852eb0d6012100dece46a6daafcd10ca9] [13505-<-cd9d317852eb0d6012100dece46a6daafcd10ca9] [13535-<-cd9d317852eb0d6012100dece46a6daafcd10ca9] [14046-<-cd9d317852eb0d6012100dece46a6daafcd10ca9] [14205-<-cd9d317852eb0d6012100dece46a6daafcd10ca9] [14351-<-cd9d317852eb0d6012100dece46a6daafcd10ca9] [14395-<-cd9d317852eb0d6012100dece46a6daafcd10ca9] [14566-<-cd9d317852eb0d6012100dece46a6daafcd10ca9]
127.0.0.1:7000> cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:9
cluster_size:9
cluster_current_epoch:8
cluster_my_epoch:2
cluster_stats_messages_sent:6827
cluster_stats_messages_received:6800
用工具自动分配slot
docker镜像初始化redis实例
原始人手动分配 redis slot的更多相关文章
- 手动搭建 redis 集群
转自http://meia.fun/article/1544161420745 手动搭建 redis 集群 redis 基本命令: 启动 redis 服务:redis-server xxx.conf ...
- 『学了就忘』Linux文件系统管理 — 62、手动分配swap分区
目录 1.查看swap分区情况 2.手动修改swap分区 3.格式化swap分区 4.使用swap分区 5.配置swap分区开机之后自动挂载 1.查看swap分区情况 swap分区就相当于是内存的一个 ...
- 手动搭建redis cluster
集群中至少应该有奇数个节点,所以至少有三个节点,每个节点至少有一个备份节点,所以下面使用6节点(主节点.备份节点由redis-cluster集群确定) 1.安装redis节点指定端口解压redis压缩 ...
- yii2.0 手动配置redis
手动安装yii2.0-redis扩展 1.点击下载:yii2.0-redis扩展 2.把下载的扩展文件放到vendor/yiisoft/下,命名为yii2-redis 3.修改vender/yiiso ...
- 手动搭建redis集群(3台)
安装redis 1.搜索源中的redis包 apt-cache pkgnames | grep redis 2.安装redis-server apt-get install redis-server ...
- redis slot 槽点
Redis 集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置一个 key-value 时,redis 先对 key 使用 crc16 算法算出一个结果,然后把结果对 16384 求 ...
- C&C++动态分配内存(手动分配内存)三种方式
1. malloc函数 函数原型:void *malloc(unsigned int size)函数的作用是:在内训的动态存储区开辟一个size个字节的连续空间,返回所分配区域的首字节地址. 可以看到 ...
- JVM手动分配内存(转载)
原文内容很详细,不利于快速浏览,所以只保留了重点 原文地址 http://blog.csdn.net/mr__fang/article/details/47723767 内存检测工具jvisualVM ...
- Windows下手动安装redis服务
1.Redis本身不支持windows,但是有另外的团队在维护着一个windows下的版本 2.下载地址: https://github.com/MSOpenTech/redis 2.8的版本在源 ...
- manjaro手动安装Redis
以前都是用的Windows系统,最近有被win10搞得有点烦,就入了manjaro的坑,windows下部分软件在manjaro安装记录,留个记录. 我的系统信息 下面开始正式干活. 一.准备步骤 下 ...
随机推荐
- zip文件下载
记录一下zip压缩文件下载 下载的内容有些大 ,通过变成.zip的文件的话会小很多,response是HttpServletResponse,记得关闭流 //文件压缩下载 ZipOutputStrea ...
- TypeScript(TS)JavaScript(JS)中的所有循环方法
for循环: for (let i = 0; i < array.length; i++) { // 循环体 } for-of循环: for (const element of array) { ...
- node.Js 创建vue 遇到问题
npm Error: Cannot find module 有可能是路径错误.你看下看看他输入的路径是不是没有找到vue 模块 用下面的语句设置nodjs默认路径 npm config set pre ...
- SQL server 获取各种 约束信息
https://bbs.csdn.net/topics/380103485 --获取约束信息 select * from information_schema.constraint_column_ ...
- CF1928D Lonely Mountain Dungeons 题解
CF1928D Lonely Mountain Dungeons 提供一个三分做法. 假设我们已经知道了分 \(x\) 队,那对于每一个种族,我们就应该尽量平均分到这 \(x\) 个队伍中.我们可以先 ...
- opengl 学习 之 06 lesson
opengl 学习 之 06 lesson 简介 随着键盘和鼠标来控制显示效果. link http://www.opengl-tutorial.org/uncategorized/2017/06/0 ...
- python 将数组写入文件
简介 常用功能 code import numpy as np import time test_data = np.random.rand(6000000,12) T1 = time.time() ...
- 从 Redis 客户端超时到 .NET 线程池挑战:饥饿、窃取与阻塞的全景解析
在开发 .NET 应用时,我偶然遇到使用 StackExchange.Redis 作为 Redis 客户端时出现的超时问题.经查验,这些问题往往不是 Redis 服务器本身出了故障,而是客户端侧的配置 ...
- Typora常用插件
好的,我现在需要回答用户关于Typora的所有好用插件.下载方式和安装方法的问题.首先,我要仔细阅读用户提供的我搜索到的资料,从中提取相关的信息,并注意可能的矛盾或不同方法. 首先,提到了VLOOK插 ...
- ETL数据集成丨MySQL到MySQL的数据迁移实践
前言 MySQL数据迁移至另一MySQL数据库的过程,不仅是数据复制或移动的操作那么简单,它还涉及到一系列策略性考量和技术优化,旨在实现数据的高效.安全传输,以及确保目标系统的高性能运行.其深远意义在 ...