一、集群

互联网每天都会产生大量的数据,单实例已经不能满足需求。但是如果依赖于硬件成本的提升,那就不是所有人能够负担的起的。

集群这个时候出现,一定程度上解决了这个问题。它通过互联网,将多个单实例连接在一起,对外隐藏实现细节,这样在用户看来跟单实例是一样的。你不需要去购买昂贵的服务器,甚至于只需要通过多台廉价的服务器就可以满足需要。

二、redis集群

1、简介

在redis3.0之前是它的无集群时代,大家只能够通过一些中间件来完成集群。而3.0开始,redis内部集群的实现开始逐渐替代很多中间件。redis集群主要有以下两个特点:

1)数据会自动地被分布到集群节点上;

2)它以主从模式提高集群的高可用性。

2、TCP端口

每一个集群节点都有两个TCP端口需要开启:

1)用于服务客户端的端口(通常是6379)

2)用于集群节点的通信端口(服务端口加上10000,如:16379)

你需要确保防火墙没有关闭这两个端口,否则集群将无法通信从而失效。

3、数据分片

redis并没有采用一致性哈希算法,而是使用哈希槽(slot)来包含数据,一个哈希槽可以存放很多数据。

在redis集群里,总共有16384个哈希槽,每一个key都会根据CRC16算法获得一个值,然后把这个值对16384求余,那么也就是说,每一个key都会落在[0,16384]这个区间当中。而这16384个哈希槽将被分配到集群的节点当中,根据计算出的值寻找落在哪个节点,并找到该节点的对应哈希槽,进行操作。

哈希槽的计算公式如下:

HASH_SLOT = CRC16(key) mod 16384

4、主从模型

redis集群的主节点如果挂掉,那么集群就失效了。为了让集群高可用,redis实现了主从模式。

例如:

主节点是A、B、C那么我们将设立从节点A1、B1、C1。主节点A挂掉,那么从节点A1将会被提升为主节点,以保证集群可用。当然,如果从节点也挂掉,或者一半的主节点挂掉了,那么集群也就直接失效。

5、一致性

redis集群并不是强一致性,例如:

1)客户端向主节点A写入数据

2)主节点A写入完成并返回OK

3)主节点A再向从节点A1,A2...写入数据。

我们看到,主节点A写入数据就立马返回了,而不是同步对A1,A2...写入数据以后再返回。那么如果主节点A写入完毕,这时主节点A挂掉呢?从节点A1或者A2会被提升为主节点,而从节点还未写入数据,也就产生了数据不一致的问题。当然,还有很多其它情况会产生数据不一致,这里只是简单举个例子。

6、集群参数配置

在开始构建集群之前,我们先了解一些redis.conf的参数配置:

1)cluster-enabled<yes/no>: 这个配置表示当前的redis实例是否开启集群支持,如果是那么配置yes如果你希望它保持单实例那么配置no;

2) cluster-config-file<filename>: 注意:你看到这里filename是可配置的,但事实上这里配置的这个文件是用户永远无法接触到的,也就是说你无法去编辑这个文件。而是当程序启动的时候,由redis集群节点自动持久化生成并维护的。这个文件里面包含了一些其它节点的信息,状态,变量等。

3)cluster-node-timeout<milliseconds>: 这里配置的是集群节点的超时时间,意思就是当该节点被判断为不可达(无法通信)的时间超过这个最大时间限制,那么将会被判定为该节点失效。

4)cluster-slave-validity-factor<factor>: 这里配置从节点的有效因子,如果设置为0,那么从节点将会不断尝试替换主节点。如果值为正数,那么不可达的超时时间将乘以这个有效因子来计算主节点什么时候判定为失效并替换主节点。如果当前节点是从节点,那么会反过来,也就是说超过该计算结果的话,当前节点将不会尝试替换主节点。

5)cluster-migration-barrier<count>: 这里配置最小的从节点数量,如果该主节点没有任何从节点,那么会从其它主节点那移一个过来作为当前主节点的从节点。

6)cluster-require-full-coverage<yes/no>: 配置集群的可用情况,例如:当一个key所在的节点挂掉,并且没有从节点可用的情况下,那么意味着该集群不完整,如果配置为yes集群将不可用。如果配置为no,那么意味着即使集群有部分不完整,也需要处理可用的那些key。redis默认设置为yes,也就是集群需要完整可用。

详细内容参考官网:https://redis.io/topics/cluster-tutorial

redis(8)集群简介的更多相关文章

  1. Redis Cluster搭建高可用Redis服务器集群

    一.Redis Cluster集群简介 Redis Cluster是Redis官方提供的分布式解决方案,在3.0版本后推出的,有效地解决了Redis分布式的需求,当一个节点挂了可以快速的切换到另一个节 ...

  2. Redis集群简介及部署

    1简介 在 Redis 3.0 之前,使用 哨兵(sentinel)机制来监控各个节点之间的状态.Redis Cluster 是 Redis 的 分布式解决方案,在 3.0 版本正式推出,有效地解决了 ...

  3. Redis Cluster集群搭建与应用

    1.redis-cluster设计 Redis集群搭建的方式有多种,例如使用zookeeper,但从redis 3.0之后版本支持redis-cluster集群,redis-cluster采用无中心结 ...

  4. Redis Cluster集群架构实现(四)--技术流ken

    Redis集群简介 通过前面三篇博客的介绍<Redis基础认识及常用命令使用(一)--技术流ken>,<Redis基础知识补充及持久化.备份介绍(二)--技术流ken>,< ...

  5. Redis cluster集群:原理及搭建

    Redis cluster集群:原理及搭建 2018年03月19日 16:00:55 阅读数:6120 1.为什么使用redis? redis是一种典型的no-sql 即非关系数据库 像python的 ...

  6. redis搭建集群并用TreeSoft管理

    前言:redis作为一款高效的NOSQL数据库已经深入贯彻和落实到我们的日常开发代码中,作为缓存.时间控制.数据仓库.队列等使用方法层出不穷,简直是开写代码.居家旅行之必备良药.曾经,我们的项目都是单 ...

  7. redis哨兵集群、docker入门

    redis-sentinel主从复制高可用 Redis-Sentinel Redis-Sentinel是redis官方推荐的高可用性解决方案,当用redis作master-slave的高可用时,如果m ...

  8. Redis Cluster 集群使用(3)

    简介 Redis3.0版本之前,可以通过Redis Sentinel(哨兵)来实现高可用(HA),从3.0版本之后,官方推出了Redis Cluster,它的主要用途是实现数据分片(Data Shar ...

  9. Redis Cluster集群架构实现

    Redis集群简介 通过前面三篇博客的介绍<Redis基础认识及常用命令使用(一)–技术流ken>,<Redis基础知识补充及持久化.备份介绍(二)–技术流ken>,<R ...

随机推荐

  1. 【Linux】CentOS7上解压zip需要安装uzip

    1.安装zip.unzip应用 yum install zip unzip 2.压缩和解压文件 以下命令均在/home目录下操作 cd /home #进入/home目录 a.把/home目录下面的my ...

  2. “全栈2019”Java第二十一章:流程控制语句中的决策语句if

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  3. INSERT IGNORE 与INSERT INTO的区别,以及replace的用法

    INSERT IGNORE 与INSERT INTO的区别就是INSERT IGNORE会忽略数据库中已经存在 的数据,如果数据库没有数据,就插入新的数据,如果有数据的话就跳过这条数据. 这样就可以保 ...

  4. shell 常用命令集合

    grep -i 忽略大小写 -I 跳过二进制文件 -c 计算数量 -n 显示行号 -R 递归 -v 不匹配某个关键字 常用组合命令 grep -iIRn keyword * 搜索含有该 keyword ...

  5. UIView中的tintColor和renderingMode

    tintColor 每一个view都有一个tintcolor,类似于魔法色,实现类似于换肤的效果. 每一个view的subview都集成view的tintcolor,当然subview可以指定自己的t ...

  6. 2018年1月17日总结 css3里transition 和animation 区别

    transition 和animation两个CSS3属性经常被用到实际项目中,想把它整理出来. 1.先介绍transition >>>>>  a. 在做项目中经常会遇见 ...

  7. 进阶篇:4.2.6)DFMEA故障库的建立与积累

    本章目的:DFMEA故障库的建立与积累. 1.故障库的认知 故障库是一种数据库,只是这个数据库中储存的是故障模式,也就是失效模式. 从前文DFMEA章节的学习中,我们可以知道,DFMEA对不同层级的失 ...

  8. 博客主题皮肤探索-GitHub和jsdelivr的使用

    有个前言 本萌并不会前端相关的知识,一切都是自己慢慢摸索出来的,如果存在代码方面的不足,请尽快告诉我~~~ 使用一个主题 目前我博客使用是 https://www.cnblogs.com/bndong ...

  9. MySQL数据库 053

    mysql 使用: 开启服务端软件 mysqld 开启客户端软件 mysql -uroot -p mysql : 就是一个基于socket编写的c/s架构的软件 概念介绍 : 数据库服务器 : 运行数 ...

  10. sql count中加条件

    一般的,我们会在where, 或者 having中加条件,count中只是某个字段 今天看到另外一种写法,不知道性能怎么样 select count( case when xxx>10 and ...