首页 > 数据库 >redis集群

redis集群

时间:2024-09-09 11:05:40浏览次数:9  
标签:redis cluster 集群 conf ruby 节点

redis集群配置

为什么要使用集群

  1. redis官方生成可以达到 10万/每秒,每秒执行10万条命令,假如业务需要每秒100万的命令执行呢。该怎么处理呢
  2. 一台服务器内存正常是16~256G,假如你的业务需要500G内存,又该如何解决

集群的核心思想是将数据分片(sharding)储存于多个redis实例当中。

集群的方案有:

  1. twemproxy由Twitter开源
  2. Codis由豌豆荚开发,基于GO和C开发
  3. redis-cluster官方3.0版本后的集群方案

这里介绍redis的redis-cluster集群

集群原理

img

其中所有的子集就是一个集群。

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

分区规则

常见的分区规则有以下几种
img

  • 顺序分区

    按照数字的顺序进行key的分区。
    img

  • 节点取余分区

    按照对每个节点的数据取余进行分区。

    例如按照节点取余的方式,分三个节点1~100的数据对3取余,可以分为三类:

    • 余数为0
    • 余数为1
    • 余数为2
      img
  • 虚拟槽分区

    虚拟槽分区巧妙地使用了哈希空间,使用分散度良好的哈希函数把所有的数据映射到一个固定范围内的整数集合,整数定义为槽(slot)。

    Redis Cluster槽的范围是0 ~ 16383。

    槽是集群内数据管理和迁移的基本单位。采用大范围的槽的主要目的是为了方便数据的拆分和集群的扩展,

    每个节点负责一定数量的槽。
    img

redis cluster实验

本次集群的搭建分为:

  • 准备六台集群服务器(三主三从)
  • 使用rudy脚本进行槽位分配。

配置文件

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

其中单实例的配置文件如下:

port 7000
daemonize yes
dir "/opt/redis/data"
logfile "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

我们在7000-7005搭6个服务。
检查它们是否成功运行:

root@long:/opt/test_redis# ls
cluster-7000.conf  cluster-7001.conf  cluster-7002.conf  cluster-7003.conf  cluster-7004.conf  cluster-7005.conf
root@long:/opt/test_redis# redis-server cluster-7000.conf 
root@long:/opt/test_redis# redis-server cluster-7001.conf 
root@long:/opt/test_redis# redis-server cluster-7002.conf 
root@long:/opt/test_redis# redis-server cluster-7003.conf 
root@long:/opt/test_redis# redis-server cluster-7004.conf 
root@long:/opt/test_redis# redis-server cluster-7005.conf 

查看是否成功运行:
img

槽位配置

此时集群还不可以,可以登录redis-cli检查是否能够设置key,会发现报错:
img
注意-c是以集群模式打开客户端

接下来演示的是使用ruby脚本来进行槽位自动分配

  • 配置ruby环境

        # 下载ruby
        wget http://ftp.ruby-lang.org/pub/ruby/ruby-2.6.4.tar.gz
        # 安装ruby
        tar -zxvf ruby-2.6.4.tar.gz #解压
        ./configure --prefix=/opt/ruby/ #解包makefile
        make && make install # 编译安装
        # 配置环境变量,这里不做代码描述
    
  • 下载redis官方提供的ruby脚本分配槽(redis-trib.rb)

    这里踩了一下坑,教程上介绍的是提供ruby安装redis提供的gem包。可是安装完成后没找到安装了相关命令。

    解决方式是直接下redis的包,去里面找ruby脚本

        # 可以尝试一下安装gem包试试,不行再下redis包去找脚本
        # 下载gem软件包
        wget http://rubygems.org/downloads/redis-3.3.0.gem
        # gem装包
        gem install -l redis-3.3.0.gem
        # 接下来在全局或者ruby路径查找redis-trib.rb脚本
        find / -name redis-trib.rb
    

    再附上直接转redis包的过程(redis源码包:http://download.redis.io/releases/redis-3.2.3.tar.gz)
    img

  • 进行槽位的自动分配

    注意执行之前要确保集群启动。(即6个集群节点都跑起来了)

        # 运行redis-trib.rb进行槽位分配(--replicas 1 代表每一个主节点分配一个从节点)
         ./redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005
    

    img

运行情况

至此,redis cluster已经完成运行。本实验展示的是在一台宿主机上做的集群部署。如果在多台机器上运行redis,就可以有效的做好信息分片。

结果如下:

  • 集群状态
    img
  • 集群写入和读取信息(注意需要-c参数才能启动以集群启动redis)
    img

标签:redis,cluster,集群,conf,ruby,节点
From: https://www.cnblogs.com/lmlsh/p/18381031

相关文章

  • Redis 分布式锁:实现与应用
    在分布式系统中,为了保证数据的一致性和并发控制,常常需要使用分布式锁。Redis作为一种高性能的内存数据库,提供了一些特性可以方便地实现分布式锁。今天,我们就来探讨一下如何用Redis实现分布式锁。一、分布式锁的基本概念分布式锁是一种用于在分布式系统中协调多个进程或线程对......
  • Redis 集群的实现方案全解析
    在当今大数据时代,Redis作为一款高性能的内存数据库,被广泛应用于各种场景。然而,随着数据量的不断增长和业务需求的日益复杂,单节点的Redis往往无法满足需求,这时就需要使用Redis集群来实现数据的分布式存储和高可用性。今天,我们就来一起探讨一下Redis集群的实现方案有哪些。一......
  • Redis 实现延迟队列的巧妙方法
    今天我们来探索一下Redis是如何巧妙地实现延迟队列的,这可是在很多场景下都非常实用的技术哦!一、什么是延迟队列?延迟队列,简单来说,就是可以让消息在指定的延迟时间之后才被消费的队列。想象一下,你在网上订了一份外卖,商家并不会立即配送,而是根据你选择的送达时间,延迟一段时......
  • Redis 入门 - 安装最全讲解(Windows、Linux、Docker)
    经过上一章节的介绍,相信大家对Redis已经有了大致的认知,今天主要给大家详细讲解Redis在Windows、Linux、Docker下的安装过程。01Windows下面给大家介绍三种在Windows环境下安装Redis的方式:官方建议方式、可执行文件方式、脚本方式。1、官方建议方式Redis官方是不支持直接......
  • Redis 入门 - 图形化管理工具如何选择,最全分类
    工欲善其事必先利其器,上一章Redis服务环境已经搭建完成,现在就需要一个趁手的工具,有个好工具可以做到事半功倍。Redis图形化管理工具五花八门,可供选择的很多,大家可以根据自己的需求应用场景进行选择。就是因为选择过多所以才写了这篇文章,和大家分享下到底有哪些工具可供选择,好给......
  • Hadoop集群搭建----Hadoop安装与配置
    (1)上传Hadoop安装包:Hadoop安装包上传到虚拟机/erport/software目录Hadoop版本:hadoop-3.3.1.tar.gz(2)解压安装Hadoop:tar-zxvfhadoop-3.3.1.tar.gz-C/erport/servers/(3)配置Hadoop环境变量:vim/etc/profile生效:source/etc/profile(4)验证Hadoop环境:hadoopversion......
  • redis基础——SpringDataRedis入门
    redis基础——SpringDataRedis入门最近在学习redis,学到了redis的java客户端,其中最常用的是Jedis和lettuce,而SpringDataRedis是spring整合了Jedis和lettuce的产物,它提供了RedisTemplate工具类,封装各种对redis的操作,将不同数据类型的API封装到了不同类型中,避免了代码臃肿。S......
  • 【redis】redis的特性和主要应用场景
    文章目录redis的特性在内存中存储数据可编程的扩展能力持久化集群高可用快redis的应用场景实时数据存储缓存消息队列redis的特性redis的一些特性(优点)成就了它在内存中存储数据In-memorydatastructuresMySQL主要是通过“表”的方式来存储组织数据的“关系......
  • 如何解决缓存(redis)和数据库(MySQL)数据不一致的问题?
    在使用缓存(如Redis)和数据库(如MySQL)时,数据不一致是常见的问题。通常,我们希望缓存能够提高系统的读性能,但同时也会面临缓存与数据库数据同步的问题。解决缓存与数据库数据不一致的问题有多种方法,常见的策略包括以下几种:1.缓存更新策略常用的缓存更新策略包括缓存穿透、缓存......
  • Redis访问工具
    使用Redis存储缓存数据,如何通过Java去访问Redis?防止后面看晕,先来张图。1.Redis的客户端库Redis的客户端库是Redis官方提供的,用于让Java等编程语言与Redis服务器进行通信的工具包。常见的Redis客户端库有多个,主要包括以下两种:1.1Jedis1.1.1特点Jedis是最早的JavaRedi......