一、中心化
1.优点:控制简单
2.典型:svn
缺点: primary故障的问题
(1).脑裂
定义:
当一个集群的不同部分在同一时间都认为自己是活动的时候,我们就可以将这个现象称为脑裂症状。
首先我们需要是个集群。
其次当中有业务是Master-Backup模式或双星模式。也就是说当主节点挂掉了,备用节点需要接管业务或者是两个节点直接有数据同步。
脑裂(split-brain),指在一个高可用(HA)系统中,当联系着的两个节点断开联系时,本来为一个整体的系统,分裂为两个独立节点,这时两个节点开始争抢共享资源,结果会导致系统混乱,数据损坏。
当sync出现故障(网络Or其他节点等),两部分各自认为自己是active的,于是各自跑程序,出现了脑裂现象
1.仲裁 当两个节点出现分歧时,由第3方的仲裁者决定听谁的。这个仲裁者,可能是一个锁服务,一个共享盘或者其它什么东西。
2.fencing 当不能确定某个节点的状态时,通过fencing把对方干掉,确保共享资源被完全释放,前提是必须要有可靠的fence设备。
注意仲裁和fencing都需要存在
3.预防措施:
解决通讯问题, 修改两个节点的系统时间
添加冗余的心跳线,例如双线条线。
尽量减少“裂脑”发生机会。
启用磁盘锁。正在服务一方锁住共享磁盘,“裂脑”发生时,让对方完全“抢不走”共享磁盘资源。
failover故障转移
集群要提供高可用性就必须要有某种机制去保证,常用的机制为failover(故障转移),简单说就是通过一定的heartbeat检测是否有故障,一旦故障发生备份节点则接管故障节点的工作。
常见的failover
mysql 主从 failover,redis sentinel主从切换 failover,tomcat 集群 failover,kafka failover.
注意启动的时候权限问题。
3.221 同步
GFS(Google file system),低可用,低性能(吞吐与延迟)
3.222异步
mongodb w.1 弱一致,高可用,高性能
3.33数据流向
链式:
pri压力小,充分利用网络,延迟大
主从模式:
pri压力大,延迟小
3.23部分节点写入异常
事务:
best effort 1PC(一阶段提交)
一阶段提交非常直白,就是从应用程序向数据库发出提交请求到数据库完成提交或回滚之后将结果返回给应用程序的过程。一阶段提交不需要“协调者”角色,各结点之间不存在协调操作,因此其事务执行时间比两阶段提交要短,但是提交的“危险期”是每一个事务的实际提交时间,相比于两阶段提交,一阶段提交出现在“不一致”的概率就变大了。但是我们必须注意到:只有当基础设施出现问题的时候(如网络中断,当机等),一阶段提交才可能会出现“不一致”的情况,相比它的性能优势,很多团队都会选择这一方案。
best efforts 1PC这种模式,前提是应用程序能获取所有的数据源,然后使用同一个事务管理器(这里指是的spring的事务管理器)管理事务。这种模式最典型的应用场景非数据库sharding莫属。但是对于那些基于web service/rpc/jms等构建的高度自治(autonomy)的分布式系统接口,best efforts 1PC模式是无能为力的,此类场景下,还有最后一种方法可以帮助我们实现“最终一致性”,那就是事务补偿机制。
两阶段提交:
两阶段提交主要保证了分布式事务的原子性:即所有结点要么全做要么全不做)。所谓的两个阶段是指:第一阶段:准备阶段和第二阶段:提交阶段。
三阶段提交协议(2PC:Three-Phrase Commit)
针对两阶段提交存在的问题,三阶段提交协议通过引入一个“预询盘”阶段,以及超时策略来减少整个集群的阻塞时间,提升系统性能。三阶段提交的三个阶段分别为:can_commit,pre_commit,do_commit。
1.自动重试
eg:gfs
2.业务重试
3.24primary选举
自治系统
本质:去中心化
代表:mongdb,zookeeper,tfs
依赖其他组件
1.redis sentinel
2.hdfs元数据 zookeeper
3.GFS primary mater(元数据服务器)
3.25Secondary(backup)是否对外提供服务
replica (提供)
mogodb为例 一致性问题CAP
no active-standby (不提供)
无状态:nginx
hdfs
共享存储 单点写
zookeeper 选择master (注意是否存在脑裂现象)
3.31概念
在一个分布有众多节点的系统中,每个节点都具有高度自治的特征。节点之间彼此可以自由连接,形成新的连接单元。任何一个节点都可能成为阶段性的中心,但不具备强制性的中心控制功能。节点与节点之间的影响,会通过网络而形成非线性因果关系。这种开放式、扁平化、平等性的系统现象或结构,我们称之为去中心化。
3.32本质
去中心化,不是不要中心,而是由节点来自由选择中心、自由决定中心。简单地说,中心化的意思,是中心决定节点。节点必须依赖中心,节点离开了中心就无法生存。在去中心化系统中,任何人都是一个节点,任何人也都可以成为一个中心。任何中心都不是永久的,而是阶段性的,任何中心对节点都不具有强制性。
3.33优缺点
优点:高可用
缺点:协议复杂,一致性难
实例:dynamo quorum&vector clock
一致性算法Paxos & raft & zab
paxos 算法与 raft 算法的差异
raft强调是唯一leader的协议,此leader至高无上
raft:新选举出来的leader拥有全部提交的日志,而 paxos 需要额外的流程从其他节点获取已经被提交的日志,它允许日志有空洞。
相同点:得到大多数的赞成,这个 entries 就会定下来,最终所有节点都会赞成
ZAB 协议 ( Zookeeper Atomic Broadcast) 原子广播协议:保证了发给各副本的消息顺序相同
3.341 以机器为单位
mongodb
DockerLXC
3.342 以数据为单位
数据切片