前言:
RedisCluster采用slot分区,所有的键根据哈希函数(CRC16[key]&16383)映射到0-16383槽内,共16384个槽位,每个节点维护部分槽及槽所映射的键值数据
哈希函数: Hash()=CRC16[key]&16383
redisCluster的缺陷:
a,键的批量操作支持有限,比如mset, mget,如果多个键映射在不同的槽,就不支持了 mset name james age 19
b,键事务支持有限,当多个键分布在不同节点时无法使用事务,同一节点是支持事务
c,键是数据分区的最小粒度,不能将一个很大的键值对映射到不同的节点
d,不支持多数据库,只有0,select 0
e,复制结构只支持单层结构,不支持树型结构。
一、手动搭建
1、步骤
该集群共有三个master,每个master下分别有一个slave,共有6个节点
a、首先配置6个单节点redis.conf
b、分别启动这6个节点
c、节点握手,进入一个节点让该节点分别和其余5个节点握手、
d、分别为三个master分配哈希槽
e、集群映射,分别为三个slave指定各自的master
二、利用ruby搭建
1、首先安装ruby和redis.gem
下载链接:https://pan.baidu.com/s/1kWsf3Rh 密码:n3pc
从这个链接下载 ruby-2.3.1.tar.gz 和 redis-3.3.0.gem
tar -zxvf ruby-2.3.1.tar.gz //解压
a, cd ruby-2.3.1
b, ./configure -prefix=/usr/local/ruby //指定安装目录
c, make && make install //过程会有点慢,大概5-10分钟
d, 然后gem install -l redis-3.3.0.gem //若没有gem需要安装yum install gem -y
2、配置集群
e, 准备好6个节点配置文件redis6379.conf....redis6391.conf, 加上bind 192.168.1.111(注意不要设置requirepass,不然./redis-trib访问不了……)
f, 将/usr/local/bin/clusterconf/data的config-file删除;
g, 依次启动6个节点:./redis-server clusterconf/redis6379.conf
h, 如果之前redis有数据存在,分别flushall清空各个节点的数据;(坑:不需要cluster meet ..)
i, ./redis-trib.rb create --replicas 1 192.168.1.111:6379 192.168.1.111:6380 192.168.1.111:6381 192.168.1.111:6389 192.168.1.111:6390 192.168.1.111:6391