minio-启动过程

  1. 给我自己看的,比较乱
  2. 只看了单机,集群的没看

启动

  1. 入口函数就在根目录下的main.go中
  2. 会进行一系列的command初始化,最后根据传入的命令执行相应的操作操作,比如传入server命令就执行serverMain函数
var serverCmd = cli.Command{
    Name:   "server",
    Usage:  "start object storage server",
    Flags:  append(ServerFlags, GlobalFlags...),
    Action: serverMain,
    CustomHelpTemplate: `NAME:
  {{.HelpName}} - {{.Usage}}`
}

serverMain函数

  • 起个协程处理信号量
  • runtime参数设置和logger初始化
  • 处理命令行参数和环境变量
  • 初始化所有子系统 newAllSubsystems
  • 设置系统资源使用限制
  • 配置路由configureServerHandler,启动server服务器
  • 初始化fs(比如在数据存储路径下创建.minio.sys文件夹和里面的其他东西)newObjectLayer
  • initServer 没太看明白
  • init各种系统(globalBucketMetadataSys、globalNotificationSys、globalSiteReplicationSys等)

newAllSubsystems函数(这里的启动其实这是生成了对象,放到了全局变量里)

  • 如果是EC就启动数据恢复(heal)程序
  • 启动通知系统(集群模式下才会)
  • 启动 bucket元数据系统
  • 启动bucket monitor
  • 启动全局配置系统
  • 启动鉴权系统
  • 启动Policy系统,也是鉴权用的
  • 启动声明周期、加密系统(应该是服务端加密)
  • 启动锁系统(minio的锁采用的是对某个object获取锁会通知全部节点,有(N/2 + 1)个节点应答就算成功获得了锁),为了数据一致性
  • 启动quota(配额)系统
  • 启动bucket版本系统(目前还不知是干啥的,为啥bucket有版本不应该是object吗)
  • 启动replication系统,minio是支持replication和EC这两种常见的方式
  • 启动缓存系统(缓存系统的设计往往是精髓)

endpointServerPools结构

pool下有多个set,set下有多个服务器,猜测跟联盟、集群、节点相对应

newXLStorage函数

在这里面初始化存储磁盘(更多的是检查合法性)

configureServerHandler

这个函数就是注册各种路由的,要看某一功能实现这可以作为入口函数

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容