记录一次shell部署Redis出现“malloc.h:50:31: 致命错误:jemalloc/jemalloc.h:没有那个文件或目录”和“CLUSTERDOWN Hash slot not served”的问题分析解决
之前使用的shell脚本部署一些软件到新的机器环境后使用时出现标题中的error报错提示,但之前使用是并未发生过类似的情况。下面给出我解决的方法,有兴趣的可以继续看一下原因。
error报错现象
首先是第一次安装脚本没有成功,原因是目录位置发生了问题,所以改进脚本后进行了再次运行脚本安装部署redis服务(补充说明,重新安装时有可能遇到失败情况,原因是安装编译工具和相关工具占用了某些进程(一般是Python相关的程序进程,若kill进程会导致编译时出现致命错误,解决方法是在bash环境中重新安装编译环境,就是那些gcc等,否则编译过程中会发现缺少相关工具或没有一些文件从而安装失败)导致部署失败的问题)
第一个问题报错的具体现象如下图所示
解决方法:进入redis部署路径的src命令执行命令:make MALLOC=libc
[root@localhost src]# pwd
/usr/local/redis/src
[root@localhost src]# make MALLOC=libc
此后再重新进行部署安装即可,此时可以发现redis的相关命令都可以使用了
第二个问题报错的具体现象如下图所示
该问题解决的方法如下:
[root@localhost service_project]# redis-cli --cluster fix 127.0.0.1:6379
#此后会进行fix操作设置
解决思路:原因是集群的hash槽未能正常运行,所以可以去检查集群的slots的问题,我们知道redis的hash槽数目是16384个,用于储存数据的,而这些槽并未完全被分配到所有节点
设置完成验证
[root@localhost service_project]# redis-cli --cluster fix 127.0.0.1:6379
127.0.0.1:6379 (95c37af4...) -> 0 keys | 16384 slots | 0 slaves.
[OK] 0 keys in 1 masters.
0.00 keys per slot on average.
>>> Performing Cluster Check (using node 127.0.0.1:6379)
M: 95c37af4524069ab816d326f8204420bc4a420fa 127.0.0.1:6379
slots:[0-16383] (16384 slots) master
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
[root@localhost service_project]# redis-cli
127.0.0.1:6379> set a 1
OK
127.0.0.1:6379> get a
"1"
出现该现象的情况是二次部署编译安装导致的,不知道其他情况是否会遇到相同问题,欢迎留言告知,谢谢阅读!
来源:51CTO
作者:wx5d8a17c45cb5b
链接:https://blog.51cto.com/14557673/2630629