欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Redis-cluster原理和实践

程序员文章站 2022-05-16 14:35:51
...

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采用无中心结构,每个节点保存数据和整个集群状态,每个节点都和其他所有节点连接。集群很好的吸收了主从复制和哨兵模式的优点,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  主

Redis-cluster原理和实践

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

Redis-cluster原理和实践
2.连接集群

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

3.插入值和获取值
从下图就可以看出,插入值时,经过CRC16算法不在当前节点,则重定向到相应的节点,获取值也一样
Redis-cluster原理和实践
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