03.InfluxDB系统化学习-MetaStore

概述

在《02.InfluxDB系统化学习-InfluxDB初始化》讲述了influxdb数据启动过程中加载的服务,其中在

cmd/influxdb/run/server.go中创建NewServer对象时有以下代码

MetaClient: meta.NewClient(c.Meta)

该代码主要是完成Meta相关的初始化,本节主要是针对Meta做详细的介绍

Meta的作用

Meta中的信息存储在meta.db的数据文件中,具体配置信息参考《配置文件》章节。

meta 为InfluxDB的元数据服务,用于管理数据库的元数据相关内容;influxdb将meta数据库,包装成一个MetaClient对外提供数据,需要meta的模块都引用这个MetaCient。meta.db 直接使用protobuf格式的数据作为持久化文件meta加载持久化文件后,会将全部内容缓存在内存中。当有meta改写时, MetaClient会将更新后的数据序列化然后写入磁盘中。MetaClient一部分数据已slice的形式存储,很多api都会将该slice返回给调用方,从而脱离了其锁的保护,有数据并发竞争 访问的问题存在。meta.db中存储每个database的元数据(名称、过期策略、ContinuousQuery)和用户信息

配置文件

全部的配置文件参考《01.InfluxDB系统化学习-配置文件》,关于meta的配置信息如下所示:

###
### [meta]
### 存储有关InfluxDB集群元数据的 Raft consensus group 的控制参数将在下面被配置。
### Controls the parameters for the Raft consensus group that stores metadata
### about the InfluxDB cluster.
###

[meta]
  # Where the metadata/raft database is stored
  # 元数据/raft 数据库被存储的路径  即meta目录
  dir = "/var/lib/influxdb/meta"

  # Automatically create a default retention policy when creating a database.
  # 当创建一个新的数据库时自动为其创建一个默认的rentention policy(保留策略)
  # retention-autocreate = true

  # If log messages are printed for the meta service
  # 是否为meta服务打印日志
  # logging-enabled = true

代码分析

通过《02.InfluxDB系统化学习-InfluxDB初始化》中的说明,指导在服务启动过程中会初始化MetaClient并且打开加载相关文件,代码如下:

// NewServer returns a new instance of Server built from a config.
// 依据配置Server对象和它管理的各个组件
func NewServer(c *Config, buildInfo *BuildInfo) (*Server, error) {
    。。。。。。
       。。。。。。
       bind := c.BindAddress
    s := &Server{
        buildInfo: *buildInfo,
        err: make(chan error),
        closing: make(chan struct{}),
        BindAddress: bind,
        Logger: logger.New(os.Stderr),
        MetaClient: meta.NewClient(c.Meta),
        reportingDisabled: c.ReportingDisabled,
        httpAPIAddr: c.HTTPD.BindAddress,
        httpUseTLS: c.HTTPD.HTTPSEnabled,
        tcpAddr: bind,
        config: c,
    }
    s.Monitor = monitor.New(s, c.Monitor)
    s.config.registerDiagnostics(s.Monitor)
    if err := s.MetaClient.Open(); err != nil {
        return nil, err
    }
        。。。。。。
        。。。。。。
        return s, nil
}

MetaClient定义

定义在services/meta/client.go中,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值