一、集群

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

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

二、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. 点击隐藏显示和点击body空白处隐藏

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. 【loj#6503.】「雅礼集训 2018 Day4」Magic(生成函数+容斥)

    题面 传送门 题解 复杂度比较迷啊-- 以下以\(n\)表示颜色总数,\(m\)表示总的卡牌数 严格\(k\)对比较难算,我们考虑容斥 首先有\(i\)对就代表整个序列被分成了\(m-i\)块互不相同 ...

  3. 部署LAMP架构及其应用

    部署企业LAMP架构 (一)首先安装Apache服务,具体请见另一篇关于Apache的博文. (二)安装MySQL数据库,具体请见另一篇关于LNMP的博文. (三)构建PHP运行环境 1.安装PHP ...

  4. 基于KMP与Levenshtein模糊匹配算法的银行联行号查询

    在人民银行那里,每个银行的每一个营业网点都有自己唯一的银行联行号,根据这个号码能快速定位一间银行具体的分支行,就像根据一个身份证号码能快速确定一个人一样.例如汇款时,汇款单上要求填写收款人开户行,然后 ...

  5. luogu4294 [WC2008]游览计划(状压DP/斯坦纳树)

    link 题目大意:给定一个网格图,有些点是关键点,选择格点有代价,求把所有关键点联通的最小代价 斯坦纳树模板题 斯坦纳树问题:给定一个图结构,有一些点是关键点,求把这些关键点联通的最小代价e 斯坦纳 ...

  6. js计算器案例

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>j ...

  7. c++ Initialization

    c++ 的初始化过程比较复杂:根据对象的storage duration来分类.所谓storage duration是对象而言的,Storage duration is the property of ...

  8. angular5新增全局的模块

    比如新增一个全局的swiper,需要在webpack中配置: 之后在代码中就可以用了

  9. Springboot第二篇:与前端fetch通信(附springboot解决跨域方法)

    说到与前端通信,明白人都知道这章肯定会写两部分的东西啦. 关于后台 ①首先回顾前文,上一章环境搭建如图: ②我们在maven.example.controller下添加一个文件,并附上如图代码: ③: ...

  10. 移动端自动化测试之Appium实战

    软件工程的趋势:目前大部分企业的软件研发模式是持续交付,而自动化是持续交付的根基,而且不仅仅是测试要自动化,所有的环节都在自动化,自动化是未来的方向这一点已成为行业共识. 之前咱们已经讲过了AppCr ...