浅析redis cluster介绍与gossip协议_Redis

来源:脚本之家  责任编辑:小易  

当我们执行如2113下JedisPool类实例的getResource()时抛出can't get a resource异常。异常代5261码如下:redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the poolat redis.clients.util.Pool.getResource(Pool.java:22)分析:redis.clients.util.Pool.getResource会从4102JedisPool实例池中返回一个可用1653的redis连接。分析源码可知JedisPool extends redis.clients.util.Pool<Jedis> .而Pool<T>是通过commons-pool开源工具包中的org.apache.commons.pool.impl.GenericObjectPool来实现对Jedis实例的管理的。所以我们分析一下GenericObjectPool或许能找到答案。首先看一下common-pool的api:http://commons.apache.org/pool/apidocs/index.html?org/apache/commons/pool/impl/GenericObjectPool.html。其中三个重要个几个属性是:MaxActive: 可用连接实例的最大数目,为负值时没有限制。MaxIdle: 空闲连接实例的最大数目,为负值时没有限制。Idle的实例在使用前,通常会通过org.apache.commons.pool.BasePoolableObjectFactory<T>的activateObject()方法使其变得可用。MaxWait: 等待可用连接的最大数目,单位毫秒(million seconds)。 (注:pool.getResource()方法实际调用的GenericObjectPool类borrowObject()方法,该方法会根据MaxWait变量值在没有可用连接(idle/active)时阻塞等待知道超时,具体含义参看api。)也就是说当连接池中没有active/idle的连接时,会等待maxWait时间,如果等待超时还没有可用连接,则抛出Could not get a resource from the pool异常。所以为避免这样的错误,我们应该根据程序实际情况合理设置这三个参数的值,同时在我们获取一个连接的程序方法中也应该合理的处理这个异常,当没有连接可用时,等待一段时间再获取也许是个比较好的选择。本回答被网友采纳www.zgxue.com防采集请勿采集本网。

一、redis cluster 介绍 自动将数据进行分片,每个 master 上放一部分数据 提供内置的高可用支持,部分 master 不可用时,还是可以继续工作的

第一个是键名,第二个是超时时间,单位是秒。当超过了此时间仍然没有获得新元素的话就会返回nil。

redis cluster架构下的每个redis都要开放两个端口号,比如一个是6379,另一个就是加1w的端口号16379。 6379端口号就是redis服务器入口。 16379端口号是用来进行节点间通信的,也就是 cluster bus 的东西,cluster bus 的通信,用来进行故障检测、配置更新、故障转移授权。cluster bus 用的是一种叫gossip 协议的二进制协议,用于节点间高效的数据交换,占用更少的网络带宽和处理时间。

第一优化你的sql和索引; 第二加缓存,memcached,redis; 第三以上都做了后,还是慢,

二、节点间的内部通信机制

大致为两种措施:一、脚本同步:1、自己写脚本将数据库数据写入到redis/memcached。2、

集群元数据的维护有两种方式:集中式、Gossip 协议。

1.可视化分析 大数据分析的使用者有大数据分析专家,同时还有普通用户,但是他们二者对于大数据分析最基

redis cluster 节点间采用 gossip 协议进行通信。

coredump可以用在很多场合,使用Linux,或者solaris的人可能都有过这种经历,系统在跑

1. 集中式

将集群元数据集中存储在一个节点上。典型代表是大数据领域的 storm。它是分布式的大数据实时计算引擎,是集中式的元数据存储的结构,底层基于 zookeeper对所有元数据进行存储维护。

优点

元数据的读取和更新时效性非常好,元数据的变更都能立即更新到集中式存储节点中,其它节点读取的时候就可以感知到;

缺点

所有的元数据的更新压力全部集中在一个地方,可能会导致元数据的存储有压力。

2. gossip 协议

redis 维护集群元数据采用的是gossip 协议,所有节点都持有一份元数据,不同的节点如果出现了元数据的变更,就不断将元数据发送给其它的节点,让其它节点也进行元数据的变更。

优点

元数据的更新比较分散,不是集中在一个地方,降低了压力;

缺点

元数据的更新有延时,可能导致集群中的一些操作会有一些滞后。

三、深入剖析gossip 协议

gossip 协议包含多种消息,包含 ping、pong、meet、fail等等。

meet:某个节点在内部发送了一个gossip meet 消息给新加入的节点,通知那个节点去加入我们的集群。然后新节点就会加入到集群的通信中

redis-trib.rb add-node ping:每个节点都会频繁给其它节点发送 ping,其中包含自己的状态还有自己维护的集群元数据,互相通过 ping 交换元数据。 pong:ping 和 meet消息的返回响应,包含自己的状态和其它信息,也用于信息广播和更新。 fail:某个节点判断另一个节点 fail 之后,就发送 fail 给其它节点,通知其它节点说这个节点已宕机。

继续深入剖析ping消息 ping 时要携带一些元数据,如果很频繁,可能会加重网络负担。因此,一般每个节点每秒会执行 10 次 ping,每次会选择 5 个最久没有通信的其它节点。 当然如果发现某个节点通信延时达到了 cluster_node_timeout / 2,那么立即发送 ping,避免数据交换延时过长导致信息严重滞后。比如说,两个节点之间都 10 分钟没有交换数据了,那么整个集群处于严重的元数据不一致的情况,就会有问题。所以 cluster_node_timeout 可以调节,如果调得比较大,那么会降低 ping 的频率。 每次 ping,会带上自己节点的信息,还有就是带上 1/10 其它节点的信息,发送出去,进行交换。至少包含 3 个其它节点的信息,最多包含 总节点数减 2 个其它节点的信息。

10000 端口:

每个节点都有一个专门用于节点间通信的端口,就是自己提供服务的端口号+10000,比如 6379,那么用于节点间通信的就是16379端口。每个节点每隔一段时间都会往另外几个节点发送 ping 消息,同时其它几个节点接收到 ping 之后返回 pong。

交换的信息:信息包括故障信息,节点的增加和删除,hash slot 信息等等。

总结

到此这篇关于redis cluster介绍与gossip协议的文章就介绍到这了,更多相关redis cluster和gossip协议内容请搜索真格学网以前的文章或继续浏览下面的相关文章希望大家以后多多支持真格学网! 您可能感兴趣的文章:Spring-data-redis操作redis cluster的示例代码Windows环境下Redis Cluster环境搭建(图文)如何用docker部署redis cluster的方法Redis Cluster添加、删除的完整操作步骤

1. Redis中,并不是所有2113的数据都一直存储在内存中的,5261这是和4102Memcached相比一个最大的区别。2. Redis不仅仅支1653持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储。3. Redis支持数据的备份,即master-slave模式的数据备份。4. Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。5、分布式--设定memcache集群,利用magent做一主多从;redis可以做一主多从。都可以一主一从6、存储数据安全--memcache挂掉后,数据没了;redis可以定期保存到磁盘(持久化)7、灾难恢复--memcache挂掉后,数据不可恢复; redis数据丢失后可以通过aof恢复希望可以帮助你,以上参考:PHP程序员,雷雪松的个人博客,1、Redis和Memcache都是将数据存放在2113内存中,5261都是内存数据库。不过memcache还可用于4102缓存其他东西,例如图片、视1653频等等。2、Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储。3、虚拟内存--Redis当物理内存用完时,可以将一些很久没用到的value交换到磁盘4、过期策略--memcache在set时就指定,例如setkey1008,即永不过期。Redis可以通过例如expire设定,例如expirename105、分布式--设定memcache集群,利用magent做一主多从;redis可以做一主多从。都可以一主一从6、存储数据安全--memcache挂掉后,数据没了;redis可以定期保存到磁盘(持久化)7、灾难恢复--memcache挂掉后,数据不可恢复;redis数据丢失后可以通过aof恢复8、Redis支持数据的备份,即master-slave模式的数据备份内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • redis获取某个前缀的key脚本实例
  • redis安装与使用方法小结
  • 在redis集群中使用pipeline批量插入的实现方法
  • 爬虫技术之分布式爬虫架构的讲解
  • windows下使用redis requirepass认证不起作用的解决方法
  • 利用ganglia监控redis的最新解决方法
  • 详解redis数据结构之sds
  • 详解centos7下配置redis并开机自启动
  • redis的使用模式之计数器模式实例
  • redis在windows中下载及安装、设置教程
  • Redis和Memcache的区别分析
  • 调用redis时出现java.lang.IllegalArgumentException: host...
  • 大数据好吗?想转行大数据!
  • redis怎么实现数据库的缓存
  • redis定时任务怎么实现分析
  • 怎样分析mysql的性能并优化
  • 怎么实现redis的数据库的缓存?
  • 如何进行大数据分析及处理?
  • 一个redis的core dump,各位大神能帮看看,分析一下么
  • spring怎么处理redis无效忽略异常
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全mssqlmysqlmariadboracledb2mssql2008mssql2005sqlitepostgresqlmongodbredisaccess数据库文摘数据库其它首页spring-data-redis操作redis cluster的示例代码windows环境下redis cluster环境搭建(图文)如何用docker部署redis cluster的方法redis cluster添加、删除的完整操作步骤redis获取某个前缀的key脚本实例redis安装与使用方法小结在redis集群中使用pipeline批量插入的实现方法爬虫技术之分布式爬虫架构的讲解windows下使用redis requirepass认证不起作用的解决方法利用ganglia监控redis的最新解决方法详解redis数据结构之sds详解centos7下配置redis并开机自启动redis的使用模式之计数器模式实例redis在windows中下载及安装、设置教程超强、超详细redis数据库入门教程redis常用命令、常见错误、配置技redis操作命令总结redis中5种数据结构的使用场景介64位windows下安装redis教程redis中使用redis-dump导出、导入redis中统计各种数据大小的方法redis常用命令小结让redis在你的系统中发挥更大作用centos 6.6下redis安装配置记录redis list列表的详细介绍redis高并发问题的解决方法redis操作学习记录redis 数据类型的详解redis获取某个前缀的key脚本实例redis stat的安装指南基于redis实现世界杯排行榜功能项目实战redis教程(一):redis简介linux中设置redis开机启动的方法redis的11种web应用场景简介
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved