当前位置:主页 > 查看内容

Redis使用去中心化分片集群

发布时间:2021-07-12 00:00| 位朋友查看

简介:Redis使用去中心化分片集群 1、去中心化分片集群是什么请简单介绍。 Redis分片集群对Redis集群进行分片采用 多主多从 的方式实现Redis集群每一个分片都是由一个Redis主机和多个从机组成 片区和片区之间是相互平行 的Redis Cluster就是Redis 3.0版本之后官方……

Redis使用去中心化分片集群

1、去中心化分片集群是什么?请简单介绍。

Redis分片集群对Redis集群进行分片,采用多主多从的方式实现Redis集群,每一个分片都是由一个Redis主机和多个从机组成,片区和片区之间是相互平行的,Redis Cluster就是Redis 3.0+版本之后官方推荐的一种分片集群实现方式,主要是基于Hash卡槽(slot)crc16(key)算法的实现策略来实现Redis集群分片和数据跨主机转移、共享。这是一种去中心化的集群解决方案,可以实现Redis动态扩容和缩容,但是缺点就是集群环境比较复杂,搭建成本高

2、为什么使用去中心化分片集群?

在不使用去中心化集群时,我们通常采用了主从复制+哨兵模式实现的,【主从模式】【哨兵模式】,一般采用了(一主多从)搭建Redis集群实现的,采用哨兵模式作为守护存在,一旦主节点宕机,就进行投票选举,实现自动化故障发现和转移,最大化保证集群的高可用。但是在此期间,是禁止使用写操作,同时主节点宕机就会导致数据丢失。
这时候就需要用到Redis Cluster去中心化分片集群,Redis Cluster去中心化分片集群使用Hash卡槽来确定和定位Key的读写位置,最大的优点是有利于Redis动态扩容、缩容,把宕机数据丢失的风险降到最小。

3、传统的主从哨兵集群的优缺点

缺点:

  1. 始终只有一个Redis主机来接收和处理写请求。
  2. 用户数量大的情况下数据同步效率低。
  3. 从节点和主节点的数据始终是同步的,存在大量冗余数据,浪费空间。
  4. 主从复制的读写分离原则:主机只负责写操作,子节点不能执行写操作,如果是高并发的情况下,就会导致主节点写操作的压力非常大,同时会加重同步数据到子节点的负荷,如果主节点宕机,那么就会导致大量数据同时失效
  5. 主节点宕机后,哨兵模式就开始选举主节点,但是在这期间,谁也不知道主节点和子节点是谁,此时Redis就会开启保护机制禁止写操作,直到选举出来新的主节点,这是中心化的集群实现方案,耦合度很高
    说了这么多缺点,也该说说优点了吧!

优点:

  1. 读写分离策略:从节点可以扩展主库节点的读能力,有效应对大并发量的读操作。
  2. 采用双机主备架构,能够在主库出现故障时自动进行主备切换,从库提升为主库提供服务,保证服务平稳运行。
  3. 开启数据持久化功能和配置合理的备份策略,能有效的解决数据误操作和数据异常丢失的问题。
  4. Redis Sentinel 集群部署简单。

4、Redis Cluster数据分区的简单理解。

  1. 对于每次读写操作的的Key值都会计算对应的卡槽数,根据计算出的卡槽数会把Key存入到卡槽区间范围包含这个卡槽数的Redis主机中,或者从包含这个Key卡槽数的卡槽范围的Redis主机中获取Key。
  2. Key的卡槽数计算是基于crc16算法实现的,根据每次写入/读取的Key的值不同,该算法会计算出不同的卡槽数,Key的卡槽数计算公式:N(Key的卡槽数)=crc16(Key)%16384
  3. 如果写入的Key计算出的卡槽数不在当前操作的Redis主机的卡槽数范围内,那么会自动把这个Key转发到卡槽范围包含这个Key的卡槽数的Redis主机中进行写操作。
  4. 如果需要获取的Key计算出的卡槽数也不在当前操作的Redis主机卡槽范围内(当前操作的Redis主机中没有这个Key),那么也会自动转发到包含这个Key的卡槽数的卡槽范围的Redis主机中去获取到这个Key。

需要注意的地方:

  1. hash卡槽只会分配给每个片区的主节点,子节点不会分配卡槽
  2. 每个hash卡槽可以存放多个Key
  3. hash卡槽的目的是确认数据存放到哪个片区的Redis主机,实现Redis集群分摊Key,减少宕机导致数据丢失带来的意外风险。
  4. 每个片区的Redis主机卡槽数都对应一个范围**,多个片区之间卡槽数范围是等比分配的**(1:1,比如存在3个片区对应3个Redis主机,那么 3个Redis主机的卡槽总数分别是:16384/3。3个Redis主机的卡槽范围分别是:
    第一台Redis主机:0~5460
    第二台Redis主机:5461~10921
    第三台Redis主机:10922~16383

Redis Cluster去中心化分片集群使用Hash卡槽来确定和定位Key的读写位置,最大的优点是有利于Redis动态扩容、缩容,把宕机数据丢失的风险降到最小。

5、Redis使用去中心化分片集群环境搭建

手上暂时没有太多空余的服务器,采用了一台服务器通过采用不同端口来区分不同的Redis节点,也方便初期搭建减少了一些因操作不数量导致的错误。
**怎么区分不同的Redis节点:**使用不同的Redis配置文件设置不一样的端口,启动不同的Redis服务,使用端口区分不同的Redis服务。

这里采用了三主三从的集群环境搭建,也就是三台主节点+三台子节点
在这里插入图片描述

安装Redis6.2.1【点这里
操作环境:
Centos7
Redis 6.2.1
xshell 6
端口号分别设置成:9000,9001,9002,9003,9004,9005

5、1 复制redis.conf配置文件并编辑配置文件。

我的启动项在/usr/local/bin/下面

cd /usr/local/bin
mkdir three-myredis
cp redis.conf /usr/local/bin/
mv redis.conf redis9000.conf

使用vim编辑配置文件。

cd /
cd /usr/local/bin/three-myredis
vim redis9000.conf

建议使用vim来编辑配置文件。
vim和vi一样的操作,但是vim会把注释的内容特殊颜色标识,未注释的采用白色标识。
如果使用vim提示未找到此命令。
执行这条命令,来安装vim编辑器

yum -y install vim*

需要修改的内容:

  1. port 这个改成你想要设置的端口号
  2. 设置全部ip地址可以访问
  3. 开启后台运行服务
  4. 开启AOF
  5. 开启集群
  6. 开启集群的配置文件
  7. 开启集群的超时时间

== 提示进入编辑文件后,输入/ 后面跟所要查询的内容,例如/ prot小写n是向下查找,大写N是向上查找。 ==

在这里插入图片描述

将上面的复制到下面的框框里面,注意后面的空格不能带,linux对空格敏感
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

注意,下面的语句前面有一个#,一定要干掉,不然启动不了。

在这里插入图片描述

在这里插入图片描述修改完后,执行复制文件。

cp redis9000.conf redis9001.conf
cp redis9000.conf redis9002.conf
cp redis9000.conf redis9003.conf
cp redis9000.conf redis9004.conf
cp redis9000.conf redis9005.conf

再对新cp的文件进行编辑,提示:只需要所搜你刚才设置的数字即可,其他的不需要动了。

5、2启动配置文件。

redis-server redis9000.conf
redis-server redis9001.conf
redis-server redis9002.conf
redis-server redis9003.conf
redis-server redis9004.conf
redis-server redis9005.conf

查看进程,只有后面带**[cluster]**才算启动成功。
在这里插入图片描述

5、2为主节点分配槽以及分配子节点

cluster-replica:每个主节点跟随的从节点的个数

redis-cli --cluster create --cluster-replicas 1 192.168.31.33:9000 192.168.31.33:9001 192.168.31.33:9002 192.168.31.33:9003  192.168.31.33:9004  192.168.31.33:9005

在这里插入图片描述在这里插入图片描述

简单的去中心化分片集群搭建完毕。

客户端访问:

redis-cli -c -h 127.0.0.1 -p 9000

一定要加上-h,表示使用集群服务,不然启动的也只是普通的。

提示:

cluster info    查看所有主机的状态。
cluster nodes   查看所有的节点信息。
info            查看节点内存、cpu、key数量等信息

6、测试

进入后添加数据,发现会自动更换端口,说明片区划分成功。

在这里插入图片描述

;原文链接:https://blog.csdn.net/weixin_43451430/article/details/115708479
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!
上一篇:搭建java WEB开发环境和应用 下一篇:没有了

推荐图文


随机推荐