一、集群

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

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

二、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个哈希槽将被分配到集群的节点当中,根据计算出的值寻找落在哪个节点,并找到该节点的对应哈希槽,进行操作。

哈希槽的计算公式如下:

  1. 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. 修改cmd默认启动路径

    1.打开注册表编辑器(WIN+R打开运行.输入regedit,或者直接找到路径,双击打开C:\Windows\regedit.exe): 2.定位到“HKEY_CURRENT_USER\Softwar ...

  2. “全栈2019”Java第四十三章:封装

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

  3. heap与stack的区别

    java 的内存分为两类,一类是栈内存,一类是堆内存.栈内存是指程序进入一个方法时,会为这个方法单独分配一块私属存储空间,用于存储这个方法内部的局部变量,当这个方法结束时,分配给这个方法的栈会释放,这 ...

  4. js计算器案例

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

  5. NavigationItem的Title不居中,BackButton修改它得title

    国外得一个链接: http://situee.blogspot.com/2014/10/ios-set-navigation-bar-back-button-title.html 最近迷上了简洁风,在 ...

  6. 分享到QQ空间和新浪微博功能

    分享到QQ空间 http://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?url=http://campus.51job.com/cmbnt ...

  7. python高级(二)—— python内置序列类型

    本文主要内容 序列类型分类: (1)容器序列.扁平序列 (2)可变序列.不可变序列 列表推导式 生成器表达式 元组拆包 切片 排序(list.sort方法和sorted函数) bisect pytho ...

  8. 使用IntelliJ IDEA 前最好修改的配置

    目录 1.下载 2.破解 3.修改配置 下载 详见我的另外一篇博客:<软件开发资源下载>中的[IDE]->[IntelliJ IDEA] 破解 详见我的另外一篇博客:<最新版I ...

  9. vue-lazyload图片懒加载的简单使用

    一.vue lazyload插件: 插件地址:https://github.com/hilongjw/vue-lazyload demo:http://hilongjw.github.io/vue-l ...

  10. odoo 的一些orm 操作

    1.基础文件及目录结构 在认识odoo ORM框架前,先介绍一下odoo中模块目录结构.     data:存放模块预制数据 i18n:存放国际化文件 models:存放模型等py代码 securit ...