11_分布式文件系统
2024-05-23 22:14:39 0 举报
分布式文件存储系统架构设计
作者其他创作
大纲/内容
将checkpoint信息写入文件
注册到自己的selector上,关注OP_READ事件
DataNodeInfo
iphostnamelatestHeartbeatTimestoredDataSizenioPort
准备好要发送的请求prepareRequests()
key.isWritable()
网络管理组件NetworkManagersendRequest(request)
register()更新latestHeartbeatTime
loadEditLog()加载和回放editlog
定时60s制作checkpoint
上传文件
put新DataNode
EditsLogFetcher 日志同步线程
NetworkResponse构建响应
删除之前的fsimage
有客户端连接过来转交给某个processor
更新checkpoint txidupdateCheckpointTxid()
请求入队,等待通过nio发送requestQueue.offer(request);
NameNode
NetworkRequestQueue请求队列
通过FSDirectory制作FSImage
FSDirectory内存结构
create()1、上锁2、递归找父node3、创建文件node
readResponse() 读取响应1、取消关注OP_READ2、放入finishedResponses 或 执行回调函数
EditLogCleaner线程自动清理editlog文件
rpc接口实现 NameNodeServiceImpl
封装NetworkRequest
1、从内存缓冲的editslog中拉取数据2、从磁盘文件拉取edislog,并缓存磁盘文件3、从磁盘文件缓冲中读取
ReplicateManager副本管理
处理请求
ReplicateWorker副本复制线程
若需要拉取editlog,就开始拉取
拉取
NetworkManager网络连接的核心线程NetworkPollThread
关联processorId
无限监听selector
NameNodeRpcServer启动对外的rpc接口
将checkpoint txid保存到磁盘上去saveCheckpointTxid()
recoverNamespace()恢复元数据
放入
IOThread X 10个实际处理网络或磁盘IO的线程
heartbeat()更新latestHeartbeatTime
拉取响应
打开ServerSocketChannel并注册扫selector上,监听OP_ACCEPT
下发指令 List<Command> commands1、重新注册2、全量上报
创建文件upload()
创建请求NetworkRequest
DataNodeAliveMonitor线程datanode是否存活的监控线程
NetworkResponseQueuesprocessor和响应队列管理组件
构建文件Buffer
构建ManagedChannel和nameNode建立rpc连接
写fsimage到本次磁盘
loadFSImage()加载fsimage文件到内存里来进行恢复
调用DataNode管理组件的注册方法dataNodeManager.register()
key.isReadable()
HeartbeatThread心跳线程
FSImageCheckpointer fsimage管理组件
N
socket请求处理react模型
StorageManager存储管理组件
增量上报informReplicaReceived
初始化rpc Server
上报checkpointTxidupdateCheckpointTxid
返回指令
通过rpc请求namenode获取最新的txid
NetworkRequest构建请求对象
向nameNode发起注册
创建成功?
构建StorageInfo
Y 返回
等待响应networkManager.waitResponse()
下载文件
请求入队
获取文件所在的DataNodegetDataNodeForFile
FSEditlog日志组件
mkdir()1、上锁2、递归找父node3、插入子node
心跳失败
NameNodeRpcClient初始化连接nameNode RPC端口
FSDirectory.mkdir() 内存结构中创建子nodeeditsLog.logEdit() 写日志
检查latestHeartbeatTime
通过channel响应客户端
心跳heartbeat
返回响应
如果有响应,就让processor关注OP_WRITE
创建目录mkdir
sendRequest()发送请求1、从toSendRequests中拿到到发送数据2、channel.write(buffer) 发送数据3、关注OP_READ事件,等待响应4、异常:直接响应 或 执行回调函数
申请2个DataNode副本allocateDataNodes()
HeartbeatManager心跳
全量上报reportCompleteStorageInfo
shutdown()交换双缓冲刷磁盘
处理粘包/拆包
全量上报给nameNode自己存储的数据namenodeRpcClient.reportCompleteStorageInfo()
loadFSImage()加载fsimage
一个个上传文件NioClientsendFile()
BackNode
loadCheckpointInfo()加载checkpoint txid
NameNode 初始化和启动
拉取日志fetchEdisLog
下载文件readFile()
上传失败重新获取DataNode
FSImageUploadServer启动文件快照上传
loadCheckpointTxid()加载checkpoint txid
Processor X 10个请求响应转发器
NIO Server初始化
1、遍历waitingRequests获取到每个host对应的请求队列2、遍历NetworkRequest请求队列,拿到NetworkRequest3、放入toSendRequests4、获取到selectionKey关注OP_WRITE
重新获取负载均衡后的DataNodesreallocateDataNodes
根据processorId找到对应的响应队列
FSDirectory内存结构树
Client
FSNamesystem 初始化
尝试完成网络连接、请求发送、响应读取poll()
是
写editLog文件logEdit()
key.isConnectable()
NameNodeRpcClient rpc客户端
DelayRemoveReplicaThread线程延迟删除副本的线程(被动启动)
通过FSImageUploader上传fsimage到nameNode
DataNodeManager负责管理集群中所有的Datanode的组件
datanodeManager.heartbeat
是否注册成功
更新checkpointTxid
fsNameSystem.saveCheckpointTxid()fsEditlog.shutdown()
从双缓冲中获取editLog缓存getBufferedEditsLog()
无限循环
fsimage快照
尝试把排队中的机器发起连接的请求tryConnect()
注册register
创建文件create
扫描文件scanFiles()
遍历waitingConnectHosts1、构建socketChannel2、注册到selector上3、关注OP_CONNECT
执行命令1、重新注册2、全量上报
注册成功?
DataNode 初始化和启动
优雅关闭shutdown
获取负载均衡后的DataNodesallocateDataNodes
初始化 Nio Server1、接收连接2、接收fsimage3、返回响应
FSNamesystem负责管理元数据的核心组件:管理的是一些文件目录树
finishConnect()完成连接1、waitingRequests创建对应host的请求队列2、connections 完成连接添加此host3、connectState添加此host
0 条评论
下一页