阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Zookeeper的日志和磁盘使用

187次阅读
没有评论

共计 1860 个字符,预计需要花费 5 分钟才能阅读完成。

服务器使用事务日志来持久化事务。在接受一个提案之前,服务器(Follower 和 Leader)需要将提案中的事务持久化到事务日志中。事务日志是服务器本地磁盘的一个文件。事务按顺序附加到这个文件。服务器时不时的会关闭当前文件,创建一个新文件来滚动 (Roll Over) 日志 (这篇文章是 Flavio Junqueria 和 Benjamin Reed 的 Zookeeper 书的第 9 章中 Local Storage/Logs and Disk use 的翻译)。

因为写事务日志是在写请求的关键路径上,所以 Zookeeper 需要高效地实现它。向文件附加信息可以在硬盘上高效完成,但 Zookeeper 使用一些其它技巧来使它更快的完成:

  • 组提交(Group Commits)
  • 补白(Padding)

组提交是将多个事务作为一次写附加到磁盘上。这种方式允许持久化多个事务只使用一次磁盘寻道 (Disk Seek) 的开销。

关于持久化事务到磁盘,这里有一个重要的告诫。现代操作系统通常缓存脏页 (Dirty Page),并将它们异步写入磁盘介质。然而,我们需要在往下进行之前,确保事务已经被持久化。因此我们需要冲刷(Flush)事务到磁盘介质。冲刷在这里就是指我们告诉操作系统将脏页写入磁盘,并在操作完成后返回。因为我们在 SyncRequestProcessor 中持久化事务,所以这个处理器也负责冲刷。当是时候在 SyncRequestProcessor 中冲刷事务到磁盘,我们事实上是冲刷所有队列中的事务。这样可以实现组提交优化。如果队列中只有一个事务,这个处理器依然会执行冲刷。这个处理器不会等待更多的事务进入队列,因为如果这样做会增加执行延时。代码参考可以查看 SyncRequestProcessor.run() 方法。

磁盘写缓存(Disk Write Cache)

服务器只有在强制将事务写入事务日志之后才确认对应的提案。更准确一点,服务器调用 ZKDatabase 的 commit 方法,这个方法最终会调用 FileChannel.force。这样,服务器保证在确认事务之前已经将它持久化到磁盘中。可是,这个观察有一个需要注意的地方。现代磁盘有一个保存将要写到磁盘的数据的写缓存。如果写缓存开启,force 调用不能保证在返回后数据写入介质中。反而,它可能还在写缓存中。为了保证在 FileChannel.force()方法返回后,写入的数据已经在介质上,磁盘写缓存必须关闭。操作系统有不同的关闭方式。

补白 (Padding) 通过预分配磁盘块到文件来实现。这样为块分配而对文件系统元数据的更新不会显著影响到顺序写文件。如果正在高速向日志附加事务,而块没有预先分配到文件,那么无论何时到达了写入文件的结尾,文件系统都需要分配一个新块。补白至少会减少两次额外的磁盘寻道:一次是更新元数据;另一次是返回文件。

为了避免受到其它系统写操作的干扰,我们强烈推荐你将事务日志写入到一个独立的磁盘。并可以将第二块磁盘用作操作系统文件和 Snapshot。

————————————– 分割线 ————————————–

Ubuntu 14.04 安装分布式存储 Sheepdog+ZooKeeper  http://www.linuxidc.com/Linux/2014-12/110352.htm

CentOS 6 安装 sheepdog 虚拟机分布式储存  http://www.linuxidc.com/Linux/2013-08/89109.htm

ZooKeeper 集群配置 http://www.linuxidc.com/Linux/2013-06/86348.htm

使用 ZooKeeper 实现分布式共享锁 http://www.linuxidc.com/Linux/2013-06/85550.htm

分布式服务框架 ZooKeeper — 管理分布式环境中的数据 http://www.linuxidc.com/Linux/2013-06/85549.htm

ZooKeeper 集群环境搭建实践 http://www.linuxidc.com/Linux/2013-04/83562.htm

ZooKeeper 服务器集群环境配置实测 http://www.linuxidc.com/Linux/2013-04/83559.htm

ZooKeeper 集群安装 http://www.linuxidc.com/Linux/2012-10/72906.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-20发表,共计1860字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中