Chinaunix首页 | 论坛 | 博客
  • 博客访问: 584205
  • 博文数量: 86
  • 博客积分: 3214
  • 博客等级: 中校
  • 技术积分: 1105
  • 用 户 组: 普通用户
  • 注册时间: 2008-06-01 18:26
文章分类

全部博文(86)

文章存档

2011年(5)

2010年(49)

2009年(3)

2008年(29)

分类: 数据库开发技术

2011-05-05 21:40:03

在分布式存储系统中为了保证数据的可用性可采用master-slave Replication机制(其中master只提供写服务,slave只提供读服务),一般有三种方式:
 
1.异步
  master有一个线程不断的扫描操作日志将最新的日志发送给slave,slave有线程接受master发送来的更新操作并回放。接受和回放操作一般由两个不同的线程。如果slave宕机则重新向master申请。 
 
2.强同步
  每个更新操作都先写入slave然后才写入master才能成功返回。传统的强同步会遇到一个问题,即如有一个slave宕机则必须停止写服务,所以该方法只能满足数据可靠性,不能满足可用性。
  改进方法为,在master中维护一张slave机器表,每个写操作都要同步到slave列表中的所有机器。如发现一台slave宕机则将该slave从这个列表中删除。
 
3.半同步
  设有N台slave,只要数据写入其中的任意K(1=1,所以总有至少一个跟master保持数据同步。当master宕机时,可以采用分布式选举算法paxos再slave中选取跟master数据同步的slave充当master继续提写服务。(Berkerly DB实现了这种同步方式)

 

阅读(6992) | 评论(6) | 转发(1) |
给主人留下些什么吧!~~

gothic2011-05-09 13:45:16

GFree_Wind: 也就是说分布式事务即使只考虑的数据的备份。难道不需要关心数据的一致性吗?我的问题就是,部分成功,部分成功时,这时合理的策略应该是什么?.....
分布式事务,需要考虑数据的一致性,如采用两阶段提交协议。由事务协调者和资源管理者(本地DBMS)组成。
在第一阶段准备阶段如果有任意一个资源管理者没有做好准备(即不能完成该任务),那么事务协调者会在第二阶段向所有的资源管理者发送一个回滚命令。

GFree_Wind2011-05-06 23:57:41

gothic: 分布式事务考虑的是操作多个不同的group(group里有一个master和多个slave,用于数据的备份),你说的那个不属于分布式事务的范畴而是关于HA的问题。.....
也就是说分布式事务即使只考虑的数据的备份。难道不需要关心数据的一致性吗?我的问题就是,部分成功,部分成功时,这时合理的策略应该是什么?

gothic2011-05-06 20:40:11

GFree_Wind: 1个master,多台slave。部分slave成功,部分没成功。全部回滚呢,还是放弃不成功的salve?.....
分布式事务考虑的是操作多个不同的group(group里有一个master和多个slave,用于数据的备份),你说的那个不属于分布式事务的范畴而是关于HA的问题。

GFree_Wind2011-05-06 16:43:01

gothic: 可以采用两阶段提交的方式,来保证分布式事务数据的一致性。.....
1个master,多台slave。部分slave成功,部分没成功。全部回滚呢,还是放弃不成功的salve?

gothic2011-05-06 14:46:55

GFree_Wind: 是否能够真正做到原子提交呢?.....
可以采用两阶段提交的方式,来保证分布式事务数据的一致性。