![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
分布式系统
文章平均质量分 83
mindlesslcc
这个作者很懒,什么都没留下…
展开
-
redis集群实现(二)集群添加节点
在redis-3.0.0里,集群添加节点是通过客户端运行cluster meet命令来实现的,命令格式是cluster meet ,如果客户端向A节点发送这条命令,ip和port分别是B节点的ip和port,就会把ip:port的机器添加进入执行命令的节点所在的集群里。具体的流程如下:1.首先客户端向A节点发送cluster meet 命令。2.A节点在本地为B节点创建对应的数据结原创 2016-11-06 19:14:10 · 2476 阅读 · 0 评论 -
redis集群实现(八)redis+twemproxy集群
redis的确是一个非常高效的缓存服务器,但是单台redis服务器的内存管理能力有限,如果一味的加大内存的话会导致redis服务器的性能下降,所以就必须要搭建redis集群来提供服务。在redis官方在3.0.0版本给出集群方案之前,大部分的企业都使用twemproxy组件来进行redis集群的搭建。 twemproxy 通过引入一个代理层,可以将其后端的多台redis进行统一管理与原创 2017-01-01 17:23:40 · 1898 阅读 · 0 评论 -
redis集群实现(七)sentinel数据结构和初始
上节我们看过了sentinel协调者模块处理集群故障节点的功能,今天我们看一下sentinel的处理架构以及sentinel的初始化流程。首先,sentinel是独立于数据节点之外的一个协调模块,sentinel不存储任何用户要求存储的key-value数据,sentinel只负责监视集群中每一个节点的运行状态以及处理故障转移。首先sentinel其实就是redis进程的另一种模式原创 2017-01-01 10:01:10 · 3749 阅读 · 0 评论 -
redis集群实现(五) sentinel的架构与raft协议
在分布式系统的一致性协议方面,paxos一直是标准级别的存在,但是由于paxos在工程师先上的困难,所以就有人研究出了raft协议。和大名鼎鼎的paxos算法不一样,raft比较通俗易懂,在很多关键的地方甚至给出了伪代码。raft协议在redis内并没有用来实现一些分布式锁以及分布式事务,仅仅是用来做master宕机时的选主。在redis内部有一个哨兵(sentinel)监测master和slav原创 2016-11-28 22:22:45 · 13761 阅读 · 7 评论 -
redis集群实现(六) 容灾与宕机恢复
实现集群,一个重要的保证就是高可用性,要在各种软件和硬件的故障情况下仍然能够提供服务。一般来说有两种解决思路,一种是每一个节点互相之间都会进行数据交互以及监控,出现故障的时候,各个节点都可以做协调任务。另一种就是增加一个协调组件来对集群进行实时监控以及故障处理。现在使用比较广泛的是第二种方案,各个模块之间低耦合,工程师先也比较简单(相对第一种而言)。上一节已经介绍过了raft协议,有了raft协议原创 2016-12-04 10:54:08 · 20025 阅读 · 1 评论 -
分布式事务之2PC和3PC
分布式一致性回顾在分布式系统中,为了保证数据的高可用,通常,我们会将数据保留多个副本(replica),这些副本会放置在不同的物理的机器上。为了对用户提供正确的增\删\改\差等语义,我们需要保证这些放置在不同物理机器上的副本是一致的。为了解决这种分布式一致性问题,前人在性能和数据一致性的反反复复权衡过程中总结了许多典型的协议和算法。其中比较著名的有二阶提交协议(Two Phase转载 2016-11-20 18:17:54 · 816 阅读 · 0 评论 -
redis集群实现(四) 数据的和槽位的分配
不知道有没有人思考过redis是如何把数据分配到集群中的每一个节点的,可能有人会说,把集群中的每一个节点编号,先放第一个节点,放满了就放第二个节点,以此类推。。如果真的是这样的话,服务器的利用率和性能就太低了,因为先放第一个,其他的服务器节点就闲置下来了,单个节点的压力就会非常的大,其实就相当于退化成为了单机服务器,从而违背了集群发挥每一个节点的性能的初衷。在redis官方给出的集群方案中,数原创 2016-11-15 07:46:50 · 31588 阅读 · 15 评论 -
redis集群实现(三)集群删除节点
redis集群里的节点支持动态删除,但是一般情况下不会这么做,只有在节点软硬件升级的时候才会主动让节点下线。删除节点的方式就是redis-cli客户端连接到服务器,然后执行cluster forget node-id就可以了,如果是删除一个从节点的话,集群仍然是可用状态,如果是删除一个主节点的话,集群的槽位不足,就会变成不可用状态。下边看下我在自己的虚拟机运行的例子127.0.0.1:原创 2016-11-13 22:32:26 · 8041 阅读 · 1 评论 -
使用虚拟节点改进的一致性哈希算法
分布式存储中的应用在分布式存储系统中,将数据分布至多个节点的方式之一是使用哈希算法。假设初始节点数为 N,则传统的对 N 取模的映射方式存在一个问题在于:当节点增删,即 N 值变化时,整个哈希表(Hash Table)需要重新映射,这便意味着大部分数据需要在节点之间移动。因此现在普遍使用的是被称为一致性哈希(Consistent Hashing)的一类算法。“一致性” 这个定语的意义在转载 2016-11-13 10:41:03 · 5097 阅读 · 3 评论 -
分布式系统设计权衡之CAP
写在最前:1.为什么学习并记录分布式设计理念一系列相关的东西在日常工作中系统设计评审的时候,经常会有一些同事抛出一些概念,高可用性,一致性等等字眼,他们用这些最基本的概念去反驳系统最初的设计,但是很多人理解的可用性,一致性等等问题,都是自己拍脑袋想的,或者根本和最原始表达的意思就不是一个东西,在这种情况下PK,就像不再一个频段的人在交流,除了争论,没有任何实质性的进展,所以有必要熟悉其理论转载 2016-10-27 21:04:22 · 694 阅读 · 0 评论 -
redis伪集群搭建
搭建环境是vmware虚拟机+ubuntu-14.04,以redis伪集群的方式搭建搭建,一共实现了6台机器集群的搭建,三个master节点和三个slave节点。#首先安装redis的集群管理需要ruby和zlibsudo apt-get install zlib ruby#以及安装和redis有关的ruby packagesudo gem install redis#下载安装包,编译原创 2016-10-27 16:02:01 · 2042 阅读 · 0 评论 -
redis集群实现(一)集群架构与初始化
redis是一个高可用、高性能、高可扩展性的基于内存也支持持久化存储的kv存储数据库,redis相比较于之前的kv存储memcached而言,不但支持的value类型大大增加,并且还支持数据的持久化,弥补了memcached的不能持久化的缺点,但是在3.0之前的redis并不支持集群功能,这也是redis在3.0之前不能被大量部署的一个原因,但是由于3.0以后的redis支持了集群功能,redis原创 2016-10-27 08:38:00 · 6195 阅读 · 4 评论 -
hdfs架构分析
hdfs介绍hadoop的分布式文件系统hdfs是依据谷歌的GFS论文来实现的,它是一个被设计成为运行在廉价的通用硬件之上,具有容错性的文件系统。hdfs的设计使得它能够提供很高的吞吐量,很适合大规模的数据集合。hdfs架构hdfs的设计如下图所示hdfs由Namenode和Datanode组成,Namenode和Datanode可以在任何异构的机器上运行。hd原创 2017-04-09 22:04:02 · 1005 阅读 · 0 评论