当前位置: 首页 > news >正文

浙江建设三类人员报名网站电子邮箱怎么注册

浙江建设三类人员报名网站,电子邮箱怎么注册,做个人的网站怎么做,wordpress部署Redis Cluster是Redis提供的一个分布式解决方案#xff0c;在3.0推出。Redis Cluster可以自动将数据分片分布到不同的master节点上#xff0c;同时提供了高可用的支持#xff0c;当某个master节点挂了之后#xff0c;整个集群还是可以正常工作。1、为什么要用Redis Cluster…Redis Cluster是Redis提供的一个分布式解决方案在3.0推出。Redis Cluster可以自动将数据分片分布到不同的master节点上同时提供了高可用的支持当某个master节点挂了之后整个集群还是可以正常工作。1、为什么要用Redis Cluster 前面十三章讲解了Redis中的哨兵模式。了解了Redis基于读写分离实现的主从架构。同时也知道了当Redis的master节点发生故障时Sentinel是如何执行故障转移的。 的确在数据上有从节点做副本数据备份可用性上有Sentinel保证master发生故障时自动执行故障转移。 那么我们就会有疑问为什么还需要Redis Cluster呢 首先Redis Sentinel实际上就是基于主从复制在主从复制中从节点的数据完全来源于master节点。 那么假设现在master节点的内存只有4G那么slave节点最多也就只能存储4G的数据。而且在前面第十三章中也介绍过在主从复制的架构中读写是分离也就是说我们可以横向增加slave节点的数量来提升Redis的读并发能力但是写能力和存储能力是无法扩展的就只能是master节点的承载上限。 因此当我们只存储4G的数据时基于主从复制和Sentinel的高可用架构完全没得问题。但是当我们的数据量达到16G、64G、1TB呢在现在互联网的业务中只要公司的体量大我感觉必然会面临海量数据缓存问题。 这就是为什么要引入Redis Cluster的原因。 2、Redis Cluster是什么 Redis Cluster我们可以很简单的理解为n个主从架构一起对外提供服务。Redis Cluster要求最少3个master才能组成一个集群同时每个master至少有一个slave节点。 这样一来如果一个主从能够存储32G数据那么2个主从就可以存储64G的数据。如果有更大量的数据只需要加相应数量的主从即可。 在主从架构中我们知道可以通过增加slave节点的数量来提供Redis的读请求并发能力。那么Redis Cluster是如何做的呢虽然每个master节点都挂了至少一个slave节点但是slave节点只是做数据的备份作用所有的读写请求都由master节点提供。 3、节点负载均衡 从上面我们知道在Redis Cluster中只有master节点对外提供读写能力且有多个master每个master上的存储的数据都不一样。那么Redis Cluster是如何知道哪个数据存储到哪个master上的呢 3.1、哈希算法 一般的负载均衡算法基本上会采用哈希算法。 首先对key计算出一个hash值然后用hash值对master的数据量取模。由此就可以将key均匀的分布到每个master节点上。这就是简单的哈希算法的实现。但是Redis Cluster并没有采用这种实现方式。而是采用了一个类一致性哈希算法的实现方式。 对于为什么没有采用哈希算法原因是假如此时有一台master节点挂掉了那么此时会导致Redis中的所有缓存失效(基本上所有数据都查不到)。 那么为什么呢假如现在有3台master节点那么之前的哈希算法应该是hash % 3如果此时有一台master节点挂掉了那么此时的哈希算法就应该是hash % 2。由于取模的基数不一样了那么势必会影响的之前存储的所有数据。 3.2、一致性哈希算法 我们上面说到的哈希算法是对master节点数量进行取模。而一致性哈希算法是对232 取模也就是值的范围在[0-232-1]。一致性哈希算法将其范围抽象成一个圆环使用CRC16算法计算出来的哈希值会落到圆环的某个地方。 而且我们的Redis实例也分布在圆环上我们在圆环上按照顺时针的顺序找到第一个Redis实例那么这个key存储的就是在这个实例上。 举个例子假设我们有A、B、C三个实例按照如图的方式分布在圆环上此时计算出来的hash值对应在D的位置那么我们按照顺时针的顺序就能够找到这个key应该分配的Redis实例B。同理计算出来的位置在E那么对应的Redis实例就是A。 即使这个时候Redis实例B挂掉了也不会影响到A、C两个实例。 假如此时B节点挂掉了那之前计算出来的位置D的key按照顺时针顺序找到节点C。相当于把节点B的流量转移到节点C上原来节点A、C的流量没有影响。 这就是一致性哈希算法能够在我们后续删除或者添加节点的时候不影响其他节点。 3.3、一致性哈希算法的虚拟节点机制 但是一致性哈希算法还是有点问题例如当们的Redis节点按照如下分布时 如果按照Redis节点上图分布时明显数据落在节点A上的几率更大其次落到节点C的几率最小。这样一来导致整个集群的数据存储不平衡A、B节点的负载较高节点C的资源利用不足所以为了解决这个问题引入了虚拟节点机制。 在圆环中增加了对应节点的虚拟节点然后完成了虚拟节点到真实节点的映射。假设现在计算出来的结果是位置D那么按照顺时针顺序我们找到的第一个节点就是虚拟节点C#1由于有虚拟节点到真实节点的映射关系所以数据最终会落到真实节点C上。 通过增加虚拟节点的方式使ABC三个节点在圆环上分布更加均匀平均了落在每个节点上的概率。这样就解决了上面提到的节点分布不均匀导致的数据分布不均匀的问题。这就是一致性哈希算法的虚拟节点机制。 4、Redis Cluster采用的算法 Redis Cluster 采用的是类一致性哈希算法。 一致性哈希算法是对232取模而Redis Cluster则是对214(也就是16384)取模。Redis Cluster将自己分成了16384个Slot(槽位)。通过CRC16计算出来的哈希值会对16384取模取模之后得到的值就是对应的槽位然后每个redis节点都会负责处理一部分的槽位就像下标所示 节点处理槽位A0-5000B5001-10000C10001-16383 每个Redis实例都会维护一份**slot-Redis节点**的映射关系但是如果你在节点A上设置了某个key但是通过CRC16计算的槽位是节点B维护的那么就会提示你去节点B上进行操作。5、Redis Cluster如何做到高可用 现在我们想一个问题如果Redis Cluster中的某个master节点挂了它是如何保证集群自身的高可用的如果我们想在集群里扩容节点新扩容的节点它应该负责哪些槽位 5.1、集群如何扩容 Redis Cluster可以很方便的横向扩容那当新的节点加入进来时它是如何获取对应的slot的呢 答案是通过**reshard(重新分片)**来实现reshard可以将已经分配给某个节点的任意数量的slot迁移给另一个节点。在Redis内部是通过redis-trib负责执行的。可以理解为Redis其实已经封装好了所有命令而redis-trib负责向获取slot节点和被转移slot的节点发送命令来实现reshard。 假设我们想集群中加入一个新节点D而此时集群内已经有A、B、C三个节点。 此时redis-trib会向A、B、C三个节点发送迁移出槽位的请求同时会向D发送准备导入槽位的请求做好准备之后A、B、C这三个节点就开始执行迁移将对应的slot的所有键值迁移到目标节点D。最后redis-trib会向集群中的所有主节点发送槽位变更信息。 5.2、高可用故障转移 Redis Cluster中保证集群高可用的思路和Redis Sentinel如出一辙。 简单来说针对节点A如果某个节点认为节点A挂了那么此时就是主观宕机而如果集群内超过半数的节点都认为节点A挂了那么此时A就会标记为客观宕机。 一旦节点A被标记为客观宕机那么集群就会开始故障转移。其余正常运行的master节点会进行投票选举从节点A的slave节点中选出一个将其切换为新的master节点对外提供服务。当某个slave节点获得超过半数的master节点的投票就成功当选。 当选成功后新的master节点会执行slaveof no one来让自己停止复制节点A使自己成为master节点。然后将A节点负责的slot全部转移给自己然后向集群发送PONG消息来广播自己的最新状态。 按照一致性哈希算法的思想如果某个节点挂了那么就会沿着那个圆环按照顺时针找到遇到的第一个Redis实例。 而对于Redis Cluster某个key它其实是不用关心它最终是去哪个Redis实例它只要关心自己属于哪个slot不论你节点怎么迁移最终还是只需要找到对应的slot即可然后在找到slot关联的节点。 6、gossip协议 gossip留言、八卦、小道消息。 gossip协议就是Redis Cluster各个节点之间交换数据、通信所采用的一种协议。 gossip在最初提出是为了解决分布式数据库中各个副本节点的数据同步问题。但是随着技术的发展gossip后续也被广泛用与信息扩散、故障检测等等。 Redis Cluster就是用gossip来实现自身的信息扩散的。 很简单就像图里那样每个Redis节点每秒都会向其他节点发送PING然后被PING的节点会回一个PONG。 6.1、gossip协议消息类型 Redis Cluster中节点之间的消息类型分为5种分别是MEET、PING、PONG、FAIL和PUBLISH。 消息类型消息内容MEET给某个节点发送MEET消息请求接收消息的节点加入到集群。(新的节点加到集群)PING每隔一秒钟选择5个最久没有通信的节点发送PING消息检测对应的节点是否在线同时还有一种策略如果某个节点的通信延迟大于cluster-node-time的值的一半就会立即给该节点发送PING消息避免数据交换延迟太久。PONG当节点收到MEER或者PING消息后会回一个PONG消息给对方代表自己收到了MEET或者PING消息。同时节点也可以主动发送PONG消息向集群中广播自己的信息让其他节点获取到自己的最新消息。就像完成故障转移之后的新的master向集群发送PONG消息一样。FAIL用于广播自己的对某个节点的宕机判断假设当前节点对节点A判断为宕机那么就会立即向Redis Cluster广播自己对于节点A的判断所有收到消息的节点就会对A节点进行标记。PUBLISH用于向指定的Channel发送消息某个节点收到PUBLISH消息之后会直接在集群内广播这样一来客户端不论连接到任何节点都能订阅这个Channel。 6.2、gossip的优劣 优点扩展性网络可以允许节点的任意增加和减少新增加的节点的状态最终会与其他节点一致。容错性由于每个节点都持有一份完整的元数据所以任何节点宕机都不会影响gossip的运行。健壮性与容错性类似由于所有节点都持有数据地位平等是一个去中心化的设计。任何节点都不会影响到服务的运行。最终一致性当有新消息需要传递时消息可以快速的发送到所有节点让所有节点都拥有最新的数据。 gossip可以在O(logN)轮就可以将信息传播到所有节点为什么是O(logN)呢因为每次PING**当前节点都会带上自己的信息外加整个Cluster的1/10数量的节点信息**一起发送出去。7、总结 总的来说Redis Cluster相当于是把Redis的主从架构和Sentinel继承在一起从Reids Cluster的高可用机制、判断故障转移以及执行故障转移的过程都和主从、Sentinel相关。这也就是为什么说主从是Redis高可用的基石。
http://www.zqtcl.cn/news/370559/

相关文章:

  • 网站推广朋友圈文案嵩县网站建设
  • 网站建设实践考试试题app运营推广策划方案
  • django网站开发源码阿里邮箱登录
  • 机床网站建设网站关键词优化怎么做
  • 全网营销一站式推广wordpress新文章加new
  • 做网站哪个系统最安全长沙简界网络科技有限公司
  • 象山县城乡和住房建设局网站上海公司牌照最新价格
  • 复旦学霸张立勇做的网站开一个公司需要多少钱
  • 专业建设公司网站软件技术培训
  • 网站建设_聊城笑话小网站模板html
  • 智能建造师威海网站优化推广
  • 做网站如何选域名长沙房价2020最新价格
  • seo网站推广济宁一建建设集团有限公司
  • 高端大气网站设计欣赏有意思网站推荐
  • 什么网站做海宁的房产好北控京奥建设有限公司网站
  • 上海网站建设网络推广网页搜索框下记录删不掉
  • 团购网站大全做相册手机网站如何制作免费
  • 承德网站制作方案百度seo关键词排名s
  • 网站建设公司佛山国内网站推广
  • 辽宁网站制作公司潍坊网站建设维护
  • 手机网站图片切换平面图网站
  • 松岗建设网站广州网站定制开发方案
  • 东阳网站建设价格做理财的网站有哪些问题
  • 蓄电池回收网站建设wordpress cp 部署
  • cuteftp 备份网站网站制作课程介绍
  • 杭州网站搭建宁波企业官网建设
  • php免费网站源码网站建设电子书
  • 建设纺织原料网站专业网页制作室
  • 买域名做网站推广都是些什么湘潭什么网站做c1题目
  • 鲜花网站建设图片昆明网站建站平台