码迷,mamicode.com
首页 > 其他好文 > 详细

redis-cluster配置

时间:2019-04-22 16:40:05      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:data   扩展   实例   com   moni   压力   节点   img   映射   

一.使用redis-cluster的原因

  1.并发问题

redis官方声称可以达到 10万/每秒,每秒执行10万条命令
假如业务需要每秒100万的命令执行呢?

  2.数据量问题

一台服务器内存正常是16~256G,假如你的业务需要500G内存,

新浪微博作为世界上最大的redis存储,就超过1TB的数据,去哪买这么大的内存条?各大公司有自己的解决方案,推出各自的集群功能,
核心思想都是将数据分片(sharding)存储在多个redis实例中,每一片就是一个redis实例

  由此产生的集群方案:

  • twemproxy由Twitter开源
  •  Codis由豌豆开源
  •  redis-cluster 官方3.0的集群方案

  3.方案实现的的问题

需要配置一台超大计算机,超大cpu,但是实现起来很难,而且危险性高

正确的应该是考虑分布式,加机器,把数据分到不同的位置分摊集中式的压力,一堆机器做一件事

二.客户端分片

  redis3.0集群采用P2P模式,完全去中心化,将redis所有的key分成了16384个槽位,每个redis实例负责一部分slot,集群中的所有信息通过节点数据交换而更新

 

redis实例集群主要思想是将redis数据的key进行散列,通过hash函数特定的key会映射到指定的redis节点上

三.数据分布原理

技术图片

四.数据分布理论

    分布式数据库首要解决把整个数据集按照分区规则映射到多个节点的问题,即把数据集划分到多个节点上,每个节点负责整个数据的一个子集。

常见的分区规则有哈希分区顺序分区Redis Cluster采用哈希分区规则,因此接下来会讨论哈希分区规则。

  1.顺序分区

技术图片

  2.哈希分区

    hash分区又分为以下几种

    1.节点取余分区算法

技术图片

 

      2.一致性哈希

      3.虚拟槽分区 

        Redis Cluster采用虚拟槽分区

虚拟槽分区巧妙地使用了哈希空间,使用分散度良好的哈希函数把所有的数据映射到一个固定范围内的整数集合,整数定义为槽(slot)。
Redis Cluster槽的范围是0~16383。
槽是集群内数据管理和迁移的基本单位。采用大范围的槽的主要目的是为了方便数据的拆分和集群的扩展每个节点负责一定数量的槽。

    技术图片

五.搭建redis-cluster槽

搭建集群分为几部

  •  准备节点(几匹马儿)
  • 节点通信(几匹马儿分配主从)
  • 分配槽位给节点(slot分配给马儿)

redis-cluster集群架构

多个服务端,负责读写,彼此通信,redis指定了16384个槽。

多匹马儿,负责运输数据,马儿分配16384个槽位,管理数据。

ruby的脚本自动就把分配槽位这事做了

技术图片

  1.搭建集群

    在redis启动文件夹中新建一个文件redis-7000.conf

port 7000
daemonize yes
dir "/opt/redis/data"
logfile "/opt/redis/logs/7000.log"
dbfilename "dump-7000.rdb"
cluster-enabled yes   # 开启集群模式
cluster-config-file nodes-7000.conf  # 集群内部的配置文件
cluster-require-full-coverage no  
# redis cluster需要16384个slot都正常的时候才能对外提供服务,换句话说,只要任何一个slot异常那么整个cluster不对外提供服务。 因此生产环境一般为no
技术图片
port 7000
daemonize yes
dir "/opt/redis/data"
logfile "/opt/redis/logs/7000.log"
dbfilename "dump-7000.rdb"
cluster-enabled yes
cluster-config-file nodes-7000.conf
不带注释的

    redis支持多实例的功能,我们在单机演示集群搭建,需要6个实例,三个是主节点,三个是从节点,数量为6个节点才能保证高可用的集群。

    每个节点仅仅是端口运行的不同,我们批量的生成这些文件!

[root@instance-hrnebyqu redis]# sed ‘s/7000/7002/g‘ redis-7000.conf  >redis-7002.conf
[root@instance-hrnebyqu redis]# sed ‘s/7000/7003/g‘ redis-7000.conf  >redis-7003.conf
[root@instance-hrnebyqu redis]# sed ‘s/7000/7004/g‘ redis-7000.conf  >redis-7004.conf
[root@instance-hrnebyqu redis]# sed ‘s/7000/7005/g‘ redis-7000.conf  >redis-7005.conf
[root@instance-hrnebyqu redis]# sed ‘s/7000/7005/g‘ redis-7000.conf  >redis-7005.conf

  技术图片

  2.确认配置文件无误后开启集群

[root@instance-hrnebyqu redis]# redis-server redis-7000.conf 
[root@instance-hrnebyqu redis]# redis-server redis-7001.conf 
[root@instance-hrnebyqu redis]# redis-server redis-7002.conf 
[root@instance-hrnebyqu redis]# redis-server redis-7003.conf 
[root@instance-hrnebyqu redis]# redis-server redis-7004.conf 
[root@instance-hrnebyqu redis]# redis-server redis-7005.conf 

  技术图片

  注意:这边如果原来有默认6379的扣扣运行的redis进程,需要把他先干掉,再做这一步操作!!!!

   3.测试集群是否正常开启

    随意进入一个redis

redis-cli -p 7000

  技术图片

redis-cluster配置

标签:data   扩展   实例   com   moni   压力   节点   img   映射   

原文地址:https://www.cnblogs.com/tjp40922/p/10750761.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!