本次工作最大的坑就是:各种过时的教程和错误教程留下的新坑 坑中打滚实录
本文只搭建最简单的集群
下载及搭建大致步骤:轻松搭建Redis 5.0集群环境
环境:redis版本:5.7
操作系统:linux虚拟机
虚拟机软件:VMware Workstation 10.0.3
本次ip地址配置为:192.168.163.101
第一关:[ERR] Node 192.168.163.101:6379 is not configured as a cluster node.
这个报错是说您想搞的节点未配置为群集节点,我相信很多人百度过这个,百度上的解释真的是五花八门,什么复制redis整个文件夹到xxx目录下/修改xxxxx配置啊/装trib插件。
简单来说你的问题可能是:
启动的还是默认的:redis启动方式
或
启动的配置文件中没有配置对应的参数
如何解决呢:
1.我们先来明确一个叫 redis-server 的启动文件,这个文件是对redis加载对应的配置文件来启动redis,具体坐标在redis安装文件中的src文件夹中。
2.对应的配置文件:redis.conf,具体怎么配置属性下文讲,位置就在redis文件夹中。
3.写到这里你也大概知道了吧,我们需要用 redis-server 去启动你配置好的 redis.conf 文件。
第二关:配置redis.conf文件 建议用可视化工具
因为每启用一个节点就要配置一个对应的redis.conf文件,所以为了我们可以更好的管理我们的配置文件,所以,我们可以在redis安装位置的同级目录,创建一个个对应管理文件夹,文件名是无所谓的。
这个redis-5.0.7就是我的安装文件,切记这个文件中所有的文件,均不需要更改 !!!
我这次用的端口7001-7006,所以就建了6个对应的文件夹你看我起名字多随意
接着我们就去直接从redis安装目录下的redis.conf文件给复制过来,进行更改
看到没,我这文件夹中只有一个对应的配置文件,我看的一些教程中有说复制整个安装目录的就歇歇吧,接着我们修改这个文件即可。
- port 6379 #端口
- cluster-enabled yes #启用集群模式
- cluster-node-timeout 5000 #超时时间
- appendonly yes # 是否启用aof
- daemonize yes #后台运行
- protected-mode no #非保护模式
- cluster-config-file nodes.conf # redis启动自己创建
- pidfile /var/run/redis_6379.pid
- bind 0.0.0.0 #可读取地址 0.0.0.0代表都能读取
- 这里说明下,部分配置在配置文件有加上#号,就去掉,bind这个配置有3个,前两个都是有#注释了,只有一个默认是127.0.0.1是没有注释的,改这个就好了。
这里着重说下bind这个选项,如果你的公司没有特殊要求,建议参数改为 0.0.0.0 ,不然会出现很多奇奇怪怪的错误,而且是那种解决一种另外一种又出现的错误
这里我把我的7001的配置直接发上来,如果搞不定的话,或者是我漏写了某个要点,我把我配置好的文件拿出来,特地实验过新的虚拟机装redis后redis-server直接跑没问题。
链接:https://pan.baidu.com/s/1MbRin1VjNsBSnYjw8N67eA
提取码:8pt6
我们将这个redis.conf文件,分别复制到对应的文件目录中,接着我们直接将文件中所有的7001改成对应的700x,配置就完成了,简不简单啊ヽ( ̄▽ ̄)ノ
第三关:3个实例->3个主节点
/usr/local/src/redis/redis-5.0.7/src/redis-server /usr/local/src/redis/7001/redis.conf
#安装目录下redis-server的路径# #配置文件中的redis.conf路径#
首先分别启动7001,7002,7003这3个实例
接着我们运行:
redis-cli --cluster create 192.168.163.101:7001 192.168.163.101:7002 192.168.163.101:7003
这个就是设置这3个端口,创建集群主节点的操作,如果这时候,你报错说什么连不上这3个端口,就去上文看我写的bind的配置。
如果再次出现[ERR] Node 192.168.163.101:6379 is not configured as a cluster node.说明我上面写的集群配置你还是no
这里注意一定要写yes!!!
只写个y或者写什么鬼东西的,出了问题,概不负责。
查询集群状态(任意一个节点均可查询):
redis-cli --cluster check 192.168.163.101:7001 --cluster-search-multiple-owners
这样子表示3个主节点均已开启,都是0个从节点是正常的,因为我都没配嘛。
第四关:3个实例->3个从节点
这一步应该都懂怎么创建实例了吧,创建过程就跳过,↓添加从节点代码
redis-cli --cluster add-node #从节点# #主节点# --cluster-slave
redis-cli --cluster add-node 192.168.163.101:7004 192.168.163.101:7001 --cluster-slave
上一步没错,这步也大概率错不了。
增加时:会平均的给7001.7002.7003分配从节点
所有的节点都出现1个子节点,说明配置成功了,
恭喜了各位,到这一步,7001.7002.7003.7004.7005.7006 已经是个完整的集群了
################################### 以下是补充 ###################################
5.0集群部署和4.0的区别
参考:Redis 5.0 redis-cli --cluster help说明
不知道自己版本的可以先在liunx下用:redis-cli --version 或 redis-cli -v 进行查询
如果自己的版本是5.0以上本文适合你,如果你用的还是4.0我就无能为力了
有关于集群的改动,其实就一条:
如果你跟我一样,找教程时候,发现这个教程要装除了redis之外的另外一个trib脚本,就说明他是4.0版本的软件,当然操作命令行还是一样的,但我就没成功顺着那些教程走起来…(ŎдŎ;)
Java中测试分片的类不能测试集群!
报错:
Exception in thread "main" redis.clients.jedis.exceptions.JedisMovedDataException: MOVED 7798 192.168.163.101:7002
或
Exception in thread "main" redis.clients.jedis.exceptions.JedisConnectionException: java.net.ConnectException: Connection refused: connect
启动路径要写清楚!
错误演示:
[root@localhost ~]# /usr/local/src/redis/redis-5.0.7/src/redis-server /usr/local/redis-cluster/redis02/redis.conf
错误:
1385:C 01 Mar 2020 14:24:20.420 # Fatal error, can't open config file '/usr/local/redis-cluster/redis02/redis.conf'
报错:(error) CLUSTERDOWN Hash slot not served :
在liunx下,可以进入节点,但set时候报这个错的话,你说你是不是配置主节点的是时候没有老老实实输入yes,重新来一遍吧
后记:
我独自折腾了好久,看了太多绕弯的教程,然后还出现各种报错,还出现创建redis只能创建一个这种神仙bug,就是瞎改配置文件出的,经常重新克隆redis,原本以为教程会更长些,结果居然没多长就写完了,最后我拿着项目一跑没报错,就也不知道写啥了,就写几个记得的坑。
如果配置文档过期了,还是没了,留言就好,我看到就来补。