在前面的文章中,已经实现了多节点的Master-Slave,其实也可以称作为集群,但是是以命令的方式实现的,不怎么方便,现在以配置的方式,实现Redis集群
1、首页在redis路径下创建redis-cluster文件夹,再到redis-cluster目录下创建三个目录,分别为9001,9002,9003,文件名分别代表每个实例的端口号
longwentaodeMacBook-Pro:redis-cluster longwentao$ cd ~/java/redis-3.2.5/
longwentaodeMacBook-Pro:redis-3.2.5 longwentao$ mkdir redis-cluster
longwentaodeMacBook-Pro:redis-3.2.5 longwentao$ cd redis-cluster/
longwentaodeMacBook-Pro:redis-cluster longwentao$ mkdir 9001
longwentaodeMacBook-Pro:redis-cluster longwentao$ mkdir 9002
longwentaodeMacBook-Pro:redis-cluster longwentao$ mkdir 9003
longwentaodeMacBook-Pro:redis-cluster longwentao$ ls
9001 9002 9003
2、将redis-server,redis.conf文件复制到9001,9002,9003目录下
longwentaodeMacBook-Pro:redis-3.2.5 longwentao$ cp redis.conf redis-cluster/9001
longwentaodeMacBook-Pro:redis-3.2.5 longwentao$ cp redis.conf redis-cluster/9002
longwentaodeMacBook-Pro:redis-3.2.5 longwentao$ cp redis.conf redis-cluster/9003
longwentaodeMacBook-Pro:redis-3.2.5 longwentao$ cp src/redis-server redis-cluster/9001
longwentaodeMacBook-Pro:redis-3.2.5 longwentao$ cp src/redis-server redis-cluster/9002
longwentaodeMacBook-Pro:redis-3.2.5 longwentao$ cp src/redis-server redis-cluster/9003
longwentaodeMacBook-Pro:redis-3.2.5 longwentao$ ls redis-cluster/9001
redis-server redis.conf
longwentaodeMacBook-Pro:redis-3.2.5 longwentao$
3、分别修改9001,9002,9003目录下的redis.conf文件的配置,注意端口号要和文件夹名称保持一致,几个配置项修改如下
#启动守护进程
demonize yes
#端口号,与文件夹名保持一致
port 9001
#启用redis集群
cluster-enabled yes
#还不清楚这是干嘛用的
#cluster-config-file nodes.conf
#超时时间
cluster-node-timeout 5000
#开始append only模式,redis 将每一次写操作请求都追加到appendonly.aof 文件中,redis重新启动时,会从该文件恢复出之前的状态
appendonly yes
4、启动这三个实例
longwentaodeMacBook-Pro:9001 longwentao$ ./redis-server ./redis.conf
longwentaodeMacBook-Pro:9001 longwentao$ cd ../9002
longwentaodeMacBook-Pro:9002 longwentao$ ./redis-server ./redis.conf
longwentaodeMacBook-Pro:9002 longwentao$ cd ../9003
longwentaodeMacBook-Pro:9003 longwentao$ ./redis-server ./redis.conf
longwentaodeMacBook-Pro:9003 longwentao$
5、进入到redis的src目录,运行redis-trib.rb文件,创建集群,让这三个实例间相互通信
longwentaodeMacBook-Pro:src longwentao$ cd ~/java/redis-3.2.5/src
longwentaodeMacBook-Pro:src longwentao$ ./redis-trib.rb create --replicas 0 127.0.0.1:9001 127.0.0.1:9002 127.0.0.1:9003
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- redis (LoadError)
from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from ./redis-trib.rb:25:in `<main>'
执行 redis-trib.rb 命令需要 ruby 的支持,如果没有安装ruby,就会报如上错误,可以从官网( https://rubygems.org/gems/redis)下载,然后本地安装,这里使用使用gem命令直接在线安装
longwentaodeMacBook-Pro:src longwentao$ sudo gem install redis
Fetching: redis-3.3.2.gem (100%)
Successfully installed redis-3.3.2
Parsing documentation for redis-3.3.2
Installing ri documentation for redis-3.3.2
1 gem installed
longwentaodeMacBook-Pro:src longwentao$
再执行redis-trib.rb,创建集群
longwentaodeMacBook-Pro:src longwentao$ ./redis-trib.rb create --replicas 0 127.0.0.1:9001 127.0.0.1:9002 127.0.0.1:9003
>>> Creating cluster
>>> Performing hash slots allocation on 3 nodes...
Using 3 masters:
127.0.0.1:9001
127.0.0.1:9002
127.0.0.1:9003
M: e41c2776755aa86322582dc37a0f6904b05c0dd3 127.0.0.1:9001
slots:0-5460 (5461 slots) master
M: dddc296b4a3e26a536db40004f3d36a1561d35d9 127.0.0.1:9002
slots:5461-10922 (5462 slots) master
M: 8fdc274fc6c341ef4c74bfe53ac9ad4309029a4a 127.0.0.1:9003
slots:10923-16383 (5461 slots) master
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join...
>>> Performing Cluster Check (using node 127.0.0.1:9001)
M: e41c2776755aa86322582dc37a0f6904b05c0dd3 127.0.0.1:9001
slots:0-5460 (5461 slots) master
0 additional replica(s)
M: 8fdc274fc6c341ef4c74bfe53ac9ad4309029a4a 127.0.0.1:9003
slots:10923-16383 (5461 slots) master
0 additional replica(s)
M: dddc296b4a3e26a536db40004f3d36a1561d35d9 127.0.0.1:9002
slots:5461-10922 (5462 slots) master
0 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
longwentaodeMacBook-Pro:src longwentao$
–replicas 表示需要几个Slave
现在redis集群就已经创建完成了,使用redis客户端redis-cli测试一下
longwentaodeMacBook-Pro:src longwentao$ ./redis-cli -c -p 9001
127.0.0.1:9001> get foo
-> Redirected to slot [12182] located at 127.0.0.1:9003
(nil)
127.0.0.1:9003> set foo testvalue
OK
127.0.0.1:9003> get foo
"testvalue"
127.0.0.1:9003>
127.0.0.1:9001> get foo
-> Redirected to slot [12182] located at 127.0.0.1:9003
"testvalue"
127.0.0.1:9003>
127.0.0.1:9002> get foo
-> Redirected to slot [12182] located at 127.0.0.1:9003
"testvalue"
127.0.0.1:9003>
可以看到,当我们在9001实例中获得foo的值时,自动重定向到9003的实例中,在9003实例上设置foo的值后,在9001,9002上get foo的值,会自动重定向到9003上,并输出foo的值
使用redis-trib.rb进行集群检查
longwentaodeMacBook-Pro:src longwentao$ ./redis-trib.rb check 127.0.0.1:9001
>>> Performing Cluster Check (using node 127.0.0.1:9001)
M: e41c2776755aa86322582dc37a0f6904b05c0dd3 127.0.0.1:9001
slots:0-5460 (5461 slots) master
0 additional replica(s)
M: 8fdc274fc6c341ef4c74bfe53ac9ad4309029a4a 127.0.0.1:9003
slots:10923-16383 (5461 slots) master
0 additional replica(s)
M: dddc296b4a3e26a536db40004f3d36a1561d35d9 127.0.0.1:9002
slots:5461-10922 (5462 slots) master
0 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
longwentaodeMacBook-Pro:src longwentao$