Redis-cluster原理和实践

Redis-cluster原理

1.概念原理

         Redis 集群采用了P2P的模式,完全去中心化。Redis 把所有的 Key 分成了 16384 个 slot(哈希槽),每个 Redis 实例负责其中一部分 slot(哈希槽) 。集群中的所有信息(节点、端口、slot等),都通过节点之间定期的数据交换而更新。Redis 客户端可以在任意一个 Redis 实例发出请求,如果所需数据不在该实例中,通过重定向命令引导客户端访问所需的实例。
       当我们的存取的key到达的时候,redis会根据crc16的算法得出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,通过这个值,去找到对应的插槽所对应的节点,然后直接自动跳转到这个对应的节点上进行存取操作。

2.原理图

在这里插入图片描述

Redis-Cluster采用无中心结构,每个节点保存数据和整个集群状态,每个节点都和其他所有节点连接。集群很好的吸收了主从复制和哨兵模式的优点,redis cluster
为了保证数据的高可用性,加入了主从和哨兵模式,一个主节点对应一个或多个从节点,主节点提供数据存取,从节点则是从主节点拉取数据备份,当这个主节点挂掉后,就会有这个从节点选取一个来充当主节点,从而保证集群不会挂掉。

注意:其中一个主节点和它的所有从节点都挂掉的情况下,整个集群就无法正常访问(实质:挂掉的主节点所占哈希槽内的数据无法插入和修改,其他正常主节点还是可以使用的,但是意义不大)

3.集群搭建

集群搭建:最好奇数个,最少大于等于3,我们搭建三主三从。
三主三从:

192.168.223.120 从
192.168.223.131 从
192.168.223.135 主
192.168.223.140 从
192.168.223.141 主
192.168.223.142  主

在这里插入图片描述

3.1安装相关环境

每个环境都安装执行这个命令

mkdir /usr/local/redis-cluster
cd /usr/local/redis-cluster
tar -zxvf redis-3.2.9.tar.gz
cd redis-3.2.9
make
cd src
make install PREFIX=/usr/local/redis-cluster
cd ../
mkdir /usr/local/redis-cluster/etc
mv redis.conf /usr/local/redis-cluster/bin/
cd /usr/local/redis-cluster/redis-3.2.9/src
cp redis-trib.rb /usr/local/redis-cluster/
cd /usr/local/redis-cluster/bin/
yum install ruby
yum install rubygems
yum install -y rubygems 
gem install -l redis-3.2.1.gem

每个环境修改redis.conf

bind 0.0.0.0 #远程连接
daemonize yes # 守护进程
appendonly yes
cluster-enabled yes #开启集群模式
cluster-config-file nodes-6379.conf #nodes-6379.conf 和端口号匹配
cluster-node-timeout 15000

每个环境都启动

cd /usr/local/redis-cluster/bin/
./redis-server  redis.conf

在其中一个环境执行命令,开始创建管理集群

./redis-trib.rb create --replicas 1 192.168.223.120:6379 192.168.223.135:6379 192.168.223.141:6379 192.168.223.142:6379 192.168.223.131:6379 192.168.223.140:6379

集群相关操作

1.查看集群情况

./redis-trib.rb check 192.168.223.142:6379

在这里插入图片描述
2.连接集群

./redis-cli -c -h 127.0.0.1 -p 6379

3.插入值和获取值
从下图就可以看出,插入值时,经过CRC16算法不在当前节点,则重定向到相应的节点,获取值也一样
在这里插入图片描述
springboot整合redis-cluster集群

spring:
  redis:
    database: 0
    jedis:
      pool:
        max-active: 8
        max-wait: -1
        max-idle: 8
        min-idle: 0
    timeout: 10000
    cluster:
      nodes:
        - 192.168.223.120:6379
        - 192.168.223.131:6379
        - 192.168.223.135:6379
        - 192.168.223.135:6380
        - 192.168.223.140:6379
        - 192.168.223.141:6379
        - 192.168.223.142:6379
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章