redis集群搭建

参考链接:

https://blog.csdn.net/truelove12358/article/details/79612954

https://blog.csdn.net/yejingtao703/article/details/78484151

一:基础理解:

redis集群通过hash solt来实现

1. 对象保存到Redis之前先经过CRC16哈希到一个指定的Node上,例如Object4最终Hash到了Node1上。

2.每个Node被平均分配了一个Slot段,对应着0-16384,Slot不能重复也不能缺失,否则会导致对象重复存储或无法存储。

3.Node之间也互相监听,一旦有Node退出或者加入,会按照Slot为单位做数据的迁移。例如Node1如果掉线了,0-5640这些Slot将会平均分摊到Node2和Node3上,由于Node2和Node3本身维护的Slot还会在自己身上不会被重新分配,所以迁移过程中不会影响到5641-16384Slot段的使用.

二:集群搭建

安装Buby环境

sudo apt-get install ruby
sudo gem install redis -v 3.2.1

安装redis

tar -zxvf redis-3.2.8.tar.gz

复制六份纯净的redis并安装,如下图所示

分别修改reids中的配置文件redis.conf

port 7001
daemonize yes
cluster-enabled yes

编写启动脚本start-all.sh

cd redis1/src
./redis-server ../redis.conf
cd ../../
cd redis2/src
./redis-server ../redis.conf
cd ../../
cd redis3/src
./redis-server ../redis.conf
cd ../../
cd redis4/src
./redis-server ../redis.conf
cd ../../
cd redis5/src
./redis-server ../redis.conf
cd ../../
cd redis6/src
./redis-server ../redis.conf
cd ../../

编写停止服务脚本stop-all.sh

./redis1/src/redis-cli -p 7001 shutdown
./redis2/src/redis-cli -p 7002 shutdown
./redis3/src/redis-cli -p 7003 shutdown
./redis4/src/redis-cli -p 7004 shutdown
./redis5/src/redis-cli -p 7005 shutdown
./redis6/src/redis-cli -p 7006 shutdown

redis-trib.rb脚本是从redis源码包src目录下复制过来的

执行创建集群命令(一个master主节点带一个slave从节点)

sudo ./redis-trib.rb create --replicas 1 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 127.0.0.1:7006
>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
127.0.0.1:7001
127.0.0.1:7002
127.0.0.1:7003
Adding replica 127.0.0.1:7004 to 127.0.0.1:7001
Adding replica 127.0.0.1:7005 to 127.0.0.1:7002
Adding replica 127.0.0.1:7006 to 127.0.0.1:7003
M: 0311897922ea6ab36a201ebb327af226a00189b0 127.0.0.1:7001
   slots:0-5460 (5461 slots) master
M: d1f2ab9638e288c4ff14a9448f5787fc11d474da 127.0.0.1:7002
   slots:5461-10922 (5462 slots) master
M: 0000377745c63f73f55012fe75a498858c5cca6d 127.0.0.1:7003
   slots:10923-16383 (5461 slots) master
S: 38568d19773557e044999489b76bcee3158b9828 127.0.0.1:7004
   replicates 0311897922ea6ab36a201ebb327af226a00189b0
S: ef454eaddc3022f6bdae06ac11cf362addf2b0c7 127.0.0.1:7005
   replicates d1f2ab9638e288c4ff14a9448f5787fc11d474da
S: f22081ce3ae497f221f30cdf4a87e5212b047940 127.0.0.1:7006
   replicates 0000377745c63f73f55012fe75a498858c5cca6d
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:7001)
M: 0311897922ea6ab36a201ebb327af226a00189b0 127.0.0.1:7001
   slots:0-5460 (5461 slots) master
   1 additional replica(s)
S: ef454eaddc3022f6bdae06ac11cf362addf2b0c7 127.0.0.1:7005
   slots: (0 slots) slave
   replicates d1f2ab9638e288c4ff14a9448f5787fc11d474da
M: d1f2ab9638e288c4ff14a9448f5787fc11d474da 127.0.0.1:7002
   slots:5461-10922 (5462 slots) master
   1 additional replica(s)
S: 38568d19773557e044999489b76bcee3158b9828 127.0.0.1:7004
   slots: (0 slots) slave
   replicates 0311897922ea6ab36a201ebb327af226a00189b0
S: f22081ce3ae497f221f30cdf4a87e5212b047940 127.0.0.1:7006
   slots: (0 slots) slave
   replicates 0000377745c63f73f55012fe75a498858c5cca6d
M: 0000377745c63f73f55012fe75a498858c5cca6d 127.0.0.1:7003
   slots:10923-16383 (5461 slots) master
   1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

创建成功,我们可以使用命令查看集群状态

zp@zp-VirtualBox:~/dowmload/redis-cluster$ ./redis1/src/redis-cli -c -h 127.0.0.1 -p 7001
127.0.0.1:7001> CLUSTER INFO
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:1
cluster_stats_messages_sent:9416
cluster_stats_messages_received:9411
127.0.0.1:7001> 

至此,基础搭建就已经完成了

我们可以使用php代码测试一下是否可行

编写test.php文件

<?php
    $obj_cluster = new RedisCluster(NULL,[
        '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',
        '127.0.0.1:7006'
    ]);

    $obj_cluster->set('a',"test",5);

    echo $obj_cluster->get("a")."\n";

测试结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值