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
上一篇: PHP的学习--Traits新特性
下一篇: 【OpenCV学习】【5】读取视频文件