详细可以参看《redis官网文档》或者《redis中文网》,按照步骤操作就可以了
redis单机版安装,详细参看《linux下安装redis》
进入到redis的目录下,创建cluster-test目录,进入cluster-test目录,创建7000,7001,7002,7003,7004,7005目录
mkdir cluster-test
cd cluster-test/
mkdir 7000 7001 7002 7003 7004 7005
按照如下配置修改redis.conf,并放入对应的目录中
//默认ip为127.0.0.1 直接注释掉 配置文件56行
bind 127.0.0.1
//端口7000,7002,7003 配置文件92行
port 7000
// daemonize 的参数为yes,表示后台运行 配置文件136行
daemonize yes
//pidfile文件对应7000,7001,7002 我是一台虚拟机创建6个redis实例,所以需要改配置文件,配置文件158行
pidfile /var/run/redis_7000.pid
//aof日志开启,默认是no 有需要就开启,它会每次写操作都记录一条日志 配置文件672行
appendonly yes
//开启集群 把注释#去掉 配置文件814行
cluster-enabled yes
//集群的配置 配置文件首次启动自动生成 7000,7001,7002 配置文件822行
cluster-config-file nodes_7000.conf
//请求超时 默认15秒,可自行设置 配置文件828行
cluster-node-timeout 15000
启动redis集群
./redis-server cluster-test/7000/redis.conf
./redis-server cluster-test/7001/redis.conf
./redis-server cluster-test/7002/redis.conf
./redis-server cluster-test/7003/redis.conf
./redis-server cluster-test/7004/redis.conf
./redis-server cluster-test/7005/redis.conf
查看redis启动的进程
ps -ef|grep redis
搭建集群
现在我们已经有了六个正在运行中的 Redis 实例, 接下来我们需要使用这些实例来创建集群, 并为每个节点编写配置文件。
通过使用 Redis 集群命令行工具 redis-trib , 编写节点配置文件的工作可以非常容易地完成: redis-trib 位于 Redis 源码的 src 文件夹中, 它是一个 Ruby 程序, 这个程序通过向实例发送特殊命令来完成创建新集群, 检查集群, 或者对集群进行重新分片(reshared)等工作。
首先进入redis的tar包解压的目录(我的是在/opt/redis-4.0.10/src下)
cd /opt/redis-4.0.10/src
./redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005
这个命令在这里用于创建一个新的集群, 选项–replicas 1 表示我们希望为集群中的每个主节点创建一个从节点。之后跟着的其他参数则是这个集群实例的地址列表,3个master3个slave redis-trib 会打印出一份预想中的配置给你看, 如果你觉得没问题的话, 就可以输入 yes , redis-trib 就会将这份配置应用到集群当中,让各个节点开始互相通讯,最后可以得到如下信息:
输入yes 成功后,如下所示
另外,如果执行命令的时候报错;这个工具是用 ruby 实现的,所以需要安装 ruby
yum -y install ruby ruby-devel rubygems rpm-build
再执行
gem install redis
如果执行gem install redis出错,可以参看《执行gem install redis时提示redis requires Ruby version >= 2.2.2.错误解决方法》
集群测试
可以看到,set的时候,会把参数塞到不同的槽位上(节点上)
重新构建开启集群
直接开启redis实例,再运行一次
./redis-trib.rb create --replicas 1 192.168.112.129:7000 192.168.112.129:7001 192.168.112.129:7002 192.168.112.129:7003 192.168.112.129:7004 192.168.112.129:7005
会出现 [ERR] Node is not empty. Either the node already knows other nodes……的异常
解决办法:
1.我首先删除了redis.conf里面cluster-config-file所在的文件,也就是nodes_700X.conf文件;运行还是会出错
2。我又删除了/var/run 下的reids_700x.pid文件,还是一样的结果
3.我继续删除了appendonly.aof和dump.rdb文件,重启成功
结论:我一台虚拟机起6个redis实例,那么appendonly.aof和dump.rdb文件会把所有数据写入磁盘,再启动会恢复数据,所以无法集群成功?大概是这样的