一、集群

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

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

二、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. jQuery find()方法 eq()方法

    find() 使用: 返回 <ul> 后代中所有的 <span> 元素: $(document).ready(function(){$("ul").find ...

  2. ZJOI round1游记

    Day 0 到镇海报道了 大佬们太多了--话说镇海的晚饭还真好吃啊-- 听说某人要咱去找bwh--不过咱和他也不是很熟啊--还是算了吧--(才不是因为嫌麻烦懒得去呢) 晚上吃完晚饭之后在镇海校园里参观 ...

  3. PHP网上支付

    1,网上支付方式两类:企业与银行对接和通过中间公司间接与银行对接. (1),企业与银行对接,优点:因为直接与银行进行财务结算,交易资金结算比较安全.适合资金流量比较大的企业,这种方案适合于,每月结算金 ...

  4. ArchLinux 下 OpenSSH 高级运用

    00x0.相关介绍 OpenSSH(OpenBSD Secure Shell)使用 SSH 通过计算机网络加密通信的实现. 它是替换由 SSH Communications Security 所提供的 ...

  5. 新建MAVEN项目--pom.xml报错

    使用集成了maven的Eclipse版本新建maven项目后,配置文件pom.xml会在project以及引用的xsd文件处出现错误(第一.二行报错) 其中一个报错例子: Multiple annot ...

  6. 模块化之seaJs学习和使用

    使用seaJs也有一阵子了,一直也想抽个时间写个这方面的博客,直到今天才写……也许写的不是很完善,但跟大伙分享也是一种乐趣,不对之处欢迎指出.[抱拳] 时间有限,我这里不过多介绍前端模块化,有兴趣可以 ...

  7. python 常用模块大全

    1.getpass 模块  一般用于获取用户输入的密码 import getpass pwd = getpass.getpass('input your pass') print(pwd) print ...

  8. 对cookie,session,token,jwt的理解

    对这几个东西有点凌乱了,今天有时间整理下 cookie Cookie的诞生 由于HTTP协议是无状态的,而服务器端的业务必须是要有状态的.Cookie诞生的最初目的是为了存储web中的状态信息,以方便 ...

  9. python全栈开发_day3_数据类型,输入输出及运算符

    一:常见数据类型 1)int整型 例:age=1 整型常用于年龄,账号等 2)float浮点型 例:salary=5.1 浮点型常用于薪水,身高,体重等 3)str字符串类型 例:name=“chen ...

  10. python 封装,隐藏属性,绑定方法classmethod和staticmethod

    [封装] 隐藏对象的属性和实现细节,仅对外提供公共访问方式. [好处] 1. 将变化隔离: 2. 便于使用: 3. 提高复用性: 4. 提高安全性: [封装原则] 1. 将不需要对外提供的内容都隐藏起 ...