Redis系列之Redis集群(三)

在前面的文章中,已经实现了多节点的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$ 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值