分布式文件系统实践经验交流

   yubai.lk@taobao.com
Context
•   概述
•   一致性模型
•   元数据节点
•   数据节点
•   客户端API
•   总结
概述
• 应用
• 需求
• 架构
应用
• MapReduce计算
 – 高带宽
 – 顺序扫描
 – 批量顺序追加
• 表格系统的底层存储
 – 随机读取
 – 小记录顺序追加
 – 批量顺序追加
需求
•   超大规模的数据存储
•   易于扩展和迁移
•   容灾和自动恢复
•   高带宽和低延迟
架构
• 数据分块
 – 大文件优化
• 大容量低配置数据节点
 – 12T, sata
• 单一元数据节点
 – 主备同步
 – DNS切换
一致性模型
• 以记录为单位读写
 – 并发和异步操作
 – 记录级别的原子性
• 与GFS类似的语义
 – 写成功的记录,多个副本强一致
 – 写失败的记录,状态不确定
  • 多副本一致性状态不确定
  • 重复记录问题,需要用户处理
一致性模型
• Lease
  – master元数据与chunk信息一致性检查
  – 减小写数据对master带来的压力
  – Lease期间Primary Replica主导数据追加
一致性模型
• Primary Replica主导的数据追加
 – 接受master的lease 分配,并分发给其他副本
 – 处理lease释放和续订,并分发给其他副本
 – API都将数据发送给Primary Replica
 – Primary replica决定写入的offset向其他副本分发
   数据
   • Lease期间的宕机检测和处理
     – 心跳检测和Primary汇报其他副本宕机
     – 新建chunk
一致性模型
• Chunk状态和版本号
 – Master在收到数据节点的lease分配成功后升级
   自己名字空间的版本号
 – 数据节点在收到lease并检查成功后升级自己
   chunk的版本号
 – Master不根据汇报信息更新自己的版本号,只
   删除版本号低于自己的chunk
 – 数据节点上的Chunk状态
   • Readonly ,自己写失败或其他副本写失败
   • Cannot copy,版本号低于master
元数据节点
• 批量并发操作
 – Btree copy on write特性
   • 在拷贝出来的根节点上批量修改,提交日志
   • 然后提交或回滚修改后的根节点
• 运维接口
 – 动态信息查询
 – 允许人工介入的操作日志和ckeckpoint修正
数据节点
• 磁盘io
 – Async io
    • libaio
 – Direct io
    • 自己实现类似page cache和buffer cache
• 预读
 – MapReduce读取模式:扫描
 – BigTable读取模式:扫描或随机
数据节点
• 快速启动
 – Chunk元数据定期dump到磁盘
 – 配合操作日志则启动时不需要扫描磁盘
• 数据和操作日志
 – 提高响应能力:不能在buffercache中对齐的数
   据不立即写磁盘
 – 更新chunk元数据的操作不实时刷新到磁盘
 – 仅在打开和关闭chunk的时候更新一次chunk元
   数据
数据节点
• 多磁盘管理
 – 12 * 1T sata盘
 – 支持损坏磁盘的热插拔
 – 已损坏磁盘不可重新加载
   • 软连接
• 数据链路
 – Pipe line式的数据推送
   • API->Primary Replica->Secondary Replica
   • 跨交换机选择ip地址最近的下一个机器推送
   • 同一交换机内随机选择下一个机器推送,避免在小集群
     内都选择最近ip造成的瓶颈
数据节点
• 文件复用
 – chunk文件不立即删除
 – 改名复用已删除的文件
• 多网卡
 – 多网卡地址向master汇报
 – 过滤无效地址
客户端API
• 异步接口
 – Wait / Select
 – 多异步任务调度
• 写操作优先级
 – BigTable日志优先
• 高级API
 – 过滤重复记录
 – 更像Posix接口
 – DFSShell工具
总结
• 适应MapReduce和BigTable需求的底层存储
• 性能、实时性、可靠性优于HDFS,功能更华丽
• TFS
 – 优势
   • 名字空间与元数据空间分离
   • 小文件支持
 – 不足
   • 写操作对namenode压力大
   • 不支持并发追加
谢谢!
Q&A

分布式文件实践经验交流

  • 1.
  • 2.
    Context • 概述 • 一致性模型 • 元数据节点 • 数据节点 • 客户端API • 总结
  • 3.
  • 4.
    应用 • MapReduce计算 –高带宽 – 顺序扫描 – 批量顺序追加 • 表格系统的底层存储 – 随机读取 – 小记录顺序追加 – 批量顺序追加
  • 5.
    需求 • 超大规模的数据存储 • 易于扩展和迁移 • 容灾和自动恢复 • 高带宽和低延迟
  • 6.
    架构 • 数据分块 –大文件优化 • 大容量低配置数据节点 – 12T, sata • 单一元数据节点 – 主备同步 – DNS切换
  • 7.
    一致性模型 • 以记录为单位读写 –并发和异步操作 – 记录级别的原子性 • 与GFS类似的语义 – 写成功的记录,多个副本强一致 – 写失败的记录,状态不确定 • 多副本一致性状态不确定 • 重复记录问题,需要用户处理
  • 8.
    一致性模型 • Lease – master元数据与chunk信息一致性检查 – 减小写数据对master带来的压力 – Lease期间Primary Replica主导数据追加
  • 9.
    一致性模型 • Primary Replica主导的数据追加 – 接受master的lease 分配,并分发给其他副本 – 处理lease释放和续订,并分发给其他副本 – API都将数据发送给Primary Replica – Primary replica决定写入的offset向其他副本分发 数据 • Lease期间的宕机检测和处理 – 心跳检测和Primary汇报其他副本宕机 – 新建chunk
  • 10.
    一致性模型 • Chunk状态和版本号 –Master在收到数据节点的lease分配成功后升级 自己名字空间的版本号 – 数据节点在收到lease并检查成功后升级自己 chunk的版本号 – Master不根据汇报信息更新自己的版本号,只 删除版本号低于自己的chunk – 数据节点上的Chunk状态 • Readonly ,自己写失败或其他副本写失败 • Cannot copy,版本号低于master
  • 11.
    元数据节点 • 批量并发操作 –Btree copy on write特性 • 在拷贝出来的根节点上批量修改,提交日志 • 然后提交或回滚修改后的根节点 • 运维接口 – 动态信息查询 – 允许人工介入的操作日志和ckeckpoint修正
  • 12.
    数据节点 • 磁盘io –Async io • libaio – Direct io • 自己实现类似page cache和buffer cache • 预读 – MapReduce读取模式:扫描 – BigTable读取模式:扫描或随机
  • 13.
    数据节点 • 快速启动 –Chunk元数据定期dump到磁盘 – 配合操作日志则启动时不需要扫描磁盘 • 数据和操作日志 – 提高响应能力:不能在buffercache中对齐的数 据不立即写磁盘 – 更新chunk元数据的操作不实时刷新到磁盘 – 仅在打开和关闭chunk的时候更新一次chunk元 数据
  • 14.
    数据节点 • 多磁盘管理 –12 * 1T sata盘 – 支持损坏磁盘的热插拔 – 已损坏磁盘不可重新加载 • 软连接 • 数据链路 – Pipe line式的数据推送 • API->Primary Replica->Secondary Replica • 跨交换机选择ip地址最近的下一个机器推送 • 同一交换机内随机选择下一个机器推送,避免在小集群 内都选择最近ip造成的瓶颈
  • 15.
    数据节点 • 文件复用 –chunk文件不立即删除 – 改名复用已删除的文件 • 多网卡 – 多网卡地址向master汇报 – 过滤无效地址
  • 16.
    客户端API • 异步接口 –Wait / Select – 多异步任务调度 • 写操作优先级 – BigTable日志优先 • 高级API – 过滤重复记录 – 更像Posix接口 – DFSShell工具
  • 17.
    总结 • 适应MapReduce和BigTable需求的底层存储 • 性能、实时性、可靠性优于HDFS,功能更华丽 •TFS – 优势 • 名字空间与元数据空间分离 • 小文件支持 – 不足 • 写操作对namenode压力大 • 不支持并发追加
  • 18.