M3DB集群安装笔记

发布时间:2019-09-17 07:48:50编辑:auto阅读(2325)

    介绍

    最简单的docker方式安装就不介绍了,这里讲一下我在装m3db单机多实例集群时遇到的问题和爬坑过程

    用途

    为了搭配exporter + prometheus + grafana使用,prometheus暂不支持分片。使用federate方式来做的话,架构比较复杂

    m3db的优点:

    • 可以分片,副本存储,这个比influxdb方案要好很多。
    • 可以数据聚合存储,可以对前期的数据进行抽样聚合压缩降低存储空间

    m3db的缺点

    • 刚开源,资料比较少
    • 配置操作比较麻烦。与我接触到的MySQL,Redis, MongoDB安装方式不太一样,但与之前维护的NDIR系统略有相似之处

    为甚么不使用其他的方案:

    • timescaleDB依赖PG数据库,安装和维护起来相对于我熟悉的MySQL差距很大。
    • InfluxDB分片功能收费
    • 其他的比较小众或者不同时支持数据读取和写入

    架构

    这里使用m3db官方网站上的架构图
    M3DB集群安装笔记

    • m3db的seedNode和其他数据存储节点的区别在于其内置运行ETCD服务
    • etcd服务用于存储整个集群的元数据,类似于NDIR的zookeeper作用,也可也单独运行
    • coordinator相当于整个集群的入口,类似于NDIR的IndexDispatcher的作用,类似于MongoDB的mongos的作用

    安装

    架构

    M3DB集群安装笔记

    元数据

    首先我们下载etcd,然后执行就可以,这里我们暂时不使用集群

    nohup ./etcd &> /dev/null &

    数据节点

    这里附上第一个节点的配置文件,需要注意的地方我会在下面用注释的方式指出

    coordinator:
      listenAddress:
        type: "config"
        value: "0.0.0.0:7201"          # 交互端口
    
      local:
        namespaces:
          - namespace: default       # 数据要存入的表
            type: unaggregated       # 数据类型
            retention: 48h                # 数据保存时间
    
      metrics:                               # coordinator本身的metric
        scope:
          prefix: "coordinator"
        prometheus:
          handlerPath: /metrics
          listenAddress: 0.0.0.0:7203 # until https://github.com/m3db/m3/issues/682 is resolved
        sanitization: prometheus
        samplingRate: 1.0
        extended: none
    
      tagOptions:
        # Configuration setting for generating metric IDs from tags.
        idScheme: quoted        # 这个必须
    
    db:
      logging:
        level: info
    
      metrics:
        prometheus:
          handlerPath: /metrics
        sanitization: prometheus
        samplingRate: 1.0
        extended: detailed
    
      hostID:                           # 这里实测后,其实可以理解为nodeID
        resolver: config            # 单机多实例,这里必须设置为config,从文件中读取
        value: node1                # 这个实例的Id
    
      config:                           # config段的配置都是和etcd相关的 
        service:
          env: default_env   
          zone: embedded
          service: m3db          # 服务名。可以按照consul中的service进行理解
          cacheDir: /data1/m3db/cache
          etcdClusters:
            - zone: embedded
              endpoints:
                - 127.0.0.1:2379
    
      listenAddress: 0.0.0.0:9000                   
      clusterListenAddress: 0.0.0.0:9001
      httpNodeListenAddress: 0.0.0.0:9002
      httpClusterListenAddress: 0.0.0.0:9003
      debugListenAddress: 0.0.0.0:9004
    
      client:
        writeConsistencyLevel: majority                       # 写一致性级别
        readConsistencyLevel: unstrict_majority
    
      gcPercentage: 100
    
      writeNewSeriesAsync: true
      writeNewSeriesLimitPerSecond: 1048576
      writeNewSeriesBackoffDuration: 2ms
    
      bootstrap:
        bootstrappers:                          # 启动顺序
            - filesystem
            - commitlog
            - peers
            - uninitialized_topology
        fs:
            numProcessorsPerCPU: 0.125
    
      cache:
        series:
          policy: lru
        postingsList:
          size: 262144
    
      commitlog:
        flushMaxBytes: 524288
        flushEvery: 1s
        blockSize: 10m
        queue:
            calculationType: fixed
            size: 2097152
    
      fs:
        filePathPrefix: /data1/m3db                    # m3dbnode数据目录

关键字