seaweedfs源码阅读记录2

来源:互联网 发布:韩国文化产业数据 编辑:程序博客网 时间:2024/05/12 16:54

master启动过程

使用pycharm , 入口为weed.go, 根据参数调用command文件夹下的文件.
opology 核心模块,主要包括 【DataCenter, Rack, DataNode】 三层拓扑结构,
参考文章: weed-fs 源码解读

master启动-20161128

type Sequencer interface {    NextFileId(count uint64) (uint64, uint64)    SetMax(uint64)    Peek() uint64}

topology中包含Sequencer , sequence 负责FileID的全局有序生成

type Topology struct {    NodeImpl   //指向NodeImpl对象,即Topology和node相互指向    collectionMap *util.ConcurrentReadMap    pulse int64    volumeSizeLimit uint64    Sequence sequence.Sequencer    chanDeadDataNodes      chan *DataNode    chanRecoveredDataNodes chan *DataNode    chanFullVolumes        chan storage.VolumeInfo    configuration *Configuration    RaftServer raft.Server}

NodeImpl结构

type NodeImpl struct {    id                NodeId    volumeCount       int    activeVolumeCount int    maxVolumeCount    int    parent            Node    sync.RWMutex      // lock children    children          map[NodeId]Node    maxVolumeId       storage.VolumeId    //for rack, data center, topology    nodeType string    value    interface{}  //指向Topology对象,即Topology和node相互指向}

DataNode数据结构

go
type DataNode struct {
NodeImpl
volumes map[storage.VolumeId]storage.VolumeInfo
Ip string
Port int
PublicUrl string
LastSeen int64 // unix time in seconds
Dead bool
}

go
type VolumeInfo struct {
Id VolumeId
Size uint64
ReplicaPlacement *ReplicaPlacement
Ttl *TTL
Collection string
Version Version
FileCount int
DeleteCount int
DeletedByteCount uint64
ReadOnly bool
}

通过RaftServer的raft协议,完成多个weedmaster间投票选leader的事情,
当启动多个ServerMaster时,它们之间会进行通信,通过raft协议选举出一个Leader,对所有的master进行管理。
weed-fs中,通过使用raftServer完成上述选举过程;而raftServer则是用到了第三方资源,即goRaft(参照http://ayende.com/blog/165858/reviewing-go-raft-part-i)。
go
type RaftServer struct {
peers []string // initial peers to join with
raftServer raft.Server //使用goraft //type Server interface 包含实现raft的方法
dataDir string
httpAddr string
router *mux.Router
topo *topology.Topology
}

0 0
原创粉丝点击