集群redis-luster的原理

Redis 集群是一个可以在多个 Redis 节点之间进行数据共享的设施。

1.Redis 集群提供了以下两个好处:

  1. 将数据自动切分(split)到多个节点的能力。
  2. 当集群中的一部分节点失效或者无法进行通讯时, 仍然可以继续处理命令请求的能力。

2.Redis 集群数据共享

Redis 集群使用数据分片(sharding)而非一致性哈希(consistency hashing)来实现: 一个 Redis 集群包含 16384 个哈希槽(hash slot), 数据库中的每个键都属于这 16384 个哈希槽的其中一个, 集群使用公式 CRC16(key) % 16384 来计算键 key 属于哪个槽, 其中 CRC16(key) 语句用于计算键 key 的 CRC16 校验和 。

集群中的每个节点负责处理一部分哈希槽。 举个例子, 一个集群可以有三个哈希槽, 其中:

  1. 节点 A 负责处理 0 号至 5500 号哈希槽。
  2. 节点 B 负责处理 5501 号至 11000 号哈希槽。
  3. 节点 C 负责处理 11001 号至 16384 号哈希槽。

集群搭建

redis集群至少有三个节点。要保证集群的高可用,需要每个节点有一个备份机。所以redis集群至少有6台服务器。 搭建伪分布式,使用电脑创建6个redis实例。修改端口。

端口:6001-6006

1.步骤

  1. 拷贝redis文件夹 重命名redis-cluster(删除rdb和aof)
  2. 修改配置文件conf的端口号6001以及打开cluster-enabled yes
  3. 复制5份 直接修改端口号 也就是redis-cluster的3.2.9下有6个bin(bin被重新命名了)
  4. 修改dump文件路径 直接放到每个和conf同级目录 dir /usr/local/Cellar/redis-cluster/3.2.9/redis6003/
  5. 可以直接写一个sh bash redis.sh启动
    ./redis6001/redis-server ./redis6001/redis.conf 
    ./redis6002/redis-server ./redis6002/redis.conf 
    ./redis6003/redis-server ./redis6003/redis.conf 
    ./redis6004/redis-server ./redis6004/redis.conf 
    ./redis6005/redis-server ./redis6005/redis.conf 
    ./redis6006/redis-server ./redis6006/redis.conf

2.拷贝redis-trib.rb

拷贝redis-trib.rb到redis.sh的同级目录
安装ruby需要的运行环境brew install ruby
拷贝redis-3.0.0.gem运行gem install redis-3.0.0.gem

下面运行以下的代码

    ./redis-trib.rb create --replicas 1 127.0.0.1:6001 127.0.0.1:6002 127.0.0.1:6003 127.0.0.1:6004 127.0.0.1:6005 127.0.0.1:6006

集群使用

必选添加-c   注意keys *得到的是本机的所有key
    ./redis-cli  -p 6001 -c
    127.0.0.1:6001> set a 123
    -> Redirected to slot [15495] located at 127.0.0.1:6003
    OK
    127.0.0.1:6001> key *
    a

results matching ""

    No results matching ""