专栏首页须臾之余Redis 集群教程:入门级的Redis集群使用指南

Redis 集群教程:入门级的Redis集群使用指南

Redis Cluster集群

传统Redis集群存在那些问题

Redis哨兵集群模式,每个节点都保存全量同步数据,冗余的数据比较多;而在Redis Cluster模式中集群中采用分片集群模式,可以减少冗余数据,缺点就是构建该集群模式成本非常高

RedisCluster集群数据分片原理

Redis 集群没有使用一致性hash, 而是引入了 哈希槽的概念.

Redis3.0开始官方推出了集群模式 RedisCluster,原理采用hash槽的概念,预先分配16384个卡槽,并且将该卡槽分配给具体服务的节点;通过key进行crc16(key)%16384 获取余数,余数就是对应的卡槽的位置,一个卡槽可以存放多个不同的key,从而将读或者写转发到该卡槽的服务的节点。 最大的有点:动态扩容、缩容。

传统RedisCluster集群模式环境搭建

摘要:2018年10月 Redis 发布了最新稳定版本 5.0 版本,推出了各种新特性,其中一点是放弃 Ruby的集群方式,改为使用 C语言编写的 redis-cli的方式,使集群的构建方式复杂度大大降低。

我们先来看一下redis-cluster架构图,如下图所示。可以看到Redis集群是没有统一入口的,采用的是去中心化设计思想,客户端连集群中的哪台设备都行,集群中各个设备之间都定时进行交互,以便知道节点是否还正常工作。

环境搭建开始:

1、安装Redis5.0 安装Redis5.0链接:Linux下安装Redis

2、创建 redis-cluster目录,方便我们管理创建的六个redis实例,并复制一份之前搭建好的redis,重命名为rediscluster

mkdir rediscluster cd rediscluster/ mkdir redis7000 redis7001 redis7002 redis7003 redis7004 redis7005

3.在文件夹 7000 至 7005 中, 各创建一个 redis.conf 文件,记得将配置中的端口号从 7000 改为与文件夹名字相同的号码。

每个配置文件内容

daemonize yes #后台启动 protected-mode no ; ## 允许外部访问 port 7005 #修改端口号,从7000到7005 cluster-enabled yes #开启cluster,去掉注释 cluster-config-file 7000nodes.conf #自动生成 cluster-node-timeout 15000 #节点通信时间 logfile /usr/rediscluster/redis7005/redis.log

Redis集群配置参数

  • cluster-enabled<yes/no>:如果yes:则在特定的Redis实例中启用Redis Cluster支持。no:该实例将像往常一样作为独立实例启动。
  • cluster-config-file<filename>:请注意,尽管有此选项的名称,但它不是用户可编辑的配置文件,而是Redis Cluster节点每次发生更改时都会自动持久保存集群配置的文件(状态,基本上是状态),为了能够在启动时重新阅读它。该文件列出了诸如群集中其他节点之类的内容,它们的状态,持久变量等等。通常,由于收到某些消息,此文件将被重写并刷新到磁盘上。
  • cluster-node-timeout<milliseconds>:Redis群集节点不可用的最长时间(不将其视为失败)。如果主节点无法访问的时间超过指定的时间长度,则它的从节点将对其进行故障转移。此参数控制Redis Cluster中的其他重要事项。值得注意的是,在指定的时间内无法到达大多数主节点的每个节点都将停止接受查询。
  • cluster-slave-validity-factor<factor>:如果设置为零,则从服务器将始终尝试对主服务器进行故障转移,而不管主服务器和从服务器之间的链接保持断开状态的时间长短。如果该值为正,则将最大断开时间计算为节点超时值乘以此选项提供的系数,如果节点是从节点,则如果断开主链接的时间超过指定的时间,它将不会尝试启动故障转移。例如,如果节点超时设置为5秒,而有效性因子设置为10,则从服务器与主服务器断开连接超过50秒将不会尝试对其主服务器进行故障转移。请注意,如果没有从属能够对其进行故障转移,则任何非零的值都可能导致Redis群集在主服务器发生故障后不可用。在这种情况下,只有当原始主服务器重新加入集群后,集群才会返回可用状态。
  • cluster-migration-barrier<count>:一个主机将保持连接的最小数量的从机,以便另一个从机迁移到不再被任何从机覆盖的主机。有关更多信息,请参见本教程中有关副本迁移的相应部分。
  • cluster-require-full-coverage<yes/no>:如果设置为yes,默认情况下,如果某个节点未覆盖一定比例的密钥空间,集群将停止接受写入。如果该选项设置为no,即使仅可以处理有关密钥子集的请求,群集仍将提供查询。

4.启动我们的redis

/usr/redis/bin/redis-server /usr/rediscluster/redis7000/redis.conf /usr/redis/bin/redis-server /usr/rediscluster/redis7001/redis.conf /usr/redis/bin/redis-server /usr/rediscluster/redis7002/redis.conf /usr/redis/bin/redis-server /usr/rediscluster/redis7003/redis.conf /usr/redis/bin/redis-server /usr/rediscluster/redis7004/redis.conf /usr/redis/bin/redis-server /usr/rediscluster/redis7005/redis.conf

连接一个redis

/usr/redis/bin/redis-cli -h 127.0.0.1 -p 7000

(error) CLUSTERDOWN Hash slot not served 说明没有分配hash槽

分配我们hash槽操作:

/usr/redis/bin/redis-cli --cluster create 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 --cluster-replicas 1

/usr/redis/bin/redis-cli -h 127.0.0.1 -p 7000

修改为Redis的集群方式连接/usr/redis/bin/redis-cli -h 127.0.0.1 -p 7000 –c

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 深入浅出理解HashMap1.8源码设计思想&手写HashMapV1.0

    数组:采用一段连续的存储单元来存储数据。对于指定下标的查找,时间复杂度为O(1);通过给定值进行查找,需要遍历数组,逐一比对给定关键字和数组元素,时间复杂度为O...

    须臾之余
  • MySQL调优系列——MySQL B+Tree索引和Hash索引的区别?

    https://blog.csdn.net/n88Lpo/article/details/78099337?depth_1-utm_source=distrib...

    须臾之余
  • LockSupport实现线程挂起和唤醒——深入浅出原码分析

    如果只是LockSupport在使用起来比Object的wait/notify简单,那还真没必要专门讲解下LockSupport。最主要的是灵活性。

    须臾之余
  • redis安装小记

    一灰灰blog
  • Redis 的安装与拓展操作指导(Windows+Linux)

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011415782/article/de...

    泥豆芽儿 MT
  • docker安装redis

    悟空聊架构
  • Redis 4.x 5.x漏洞手动复现

    Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

    陈殷
  • redis单机版,集群版,jedis

    redis是一个开源的key-value数据库。主要用来做数据缓存,本篇文章介绍redis的单机搭建,进而到redis的集群搭建,刚接触的可以先搭建单机版的,再...

    聚沙成塔
  • day107&day109部分&day111部分-Linux安装MariaDB&Redis

    少年包青菜
  • linux安装redis

    安装编译器:yum install gcc-c++(需要先安装C++编译器,redis 使用c++写的)

    traffic

扫码关注云+社区

领取腾讯云代金券