• go开源项目influxdb-relay源码分析(一)


    influxdb-relay项目地址: https://github.com/influxdata/influxdb-relay,主要作为负载均衡节点,写入多个influxdb节点,起到高可用效果。

    不多说,开搞~

    1、main.go

     1 package main
     2 
     3 import (
     4     "flag"
     5     "fmt"
     6     "log"
     7     "os"
     8     "os/signal"
     9 
    10     "github.com/influxdata/influxdb-relay/relay"
    11 )
    12 
    13 var (
    14     //influxdb-realy启动时接收的配置文件参数,因为是falg.String所以接收的是一个字符串类型的参数
    15     //flag.String 函数第一个参数代表启动时参数的名称,第二个参数代表默认值,第三个参数代表用途描述,此方法返回一个指针
    16     //那么启动realy时应该是这个样子的: ./influxdb-relay  -config  relay.toml  ———— "-config" 就是匹配上面flag.String函数第一个参数, "relay.toml" 是-config的值,这里代表配置文件的路径
    17     configFile = flag.String("config", "", "Configuration file to use")
    18 )
    19 
    20 func main() {
    21     //flag.Parse是用来解析启动时传入的参数,必须调用
    22     flag.Parse()
    23 
    24     //如果启动参数,配置文件路径为空
    25     if *configFile == "" {
    26         //记录日志
    27         fmt.Fprintln(os.Stderr, "Missing configuration file")
    28         //打印需要的参数提示,也就是会输出上面flag.String函数第三个参数
    29         flag.PrintDefaults()
    30         //退出
    31         os.Exit(1)
    32     }
    33     //加载配置文件
    34     cfg, err := relay.LoadConfigFile(*configFile)
    35     //LoadConfigFile方法如下: 主要做的事情是把配置文件反序列化成一个Config对象然后return,也就是cfg
    36     // func LoadConfigFile(filename string) (cfg Config, err error) {
    37     //    f, err := os.Open(filename)
    38     //    if err != nil {
    39     //        return cfg, err
    40     //    }
    41     //    defer f.Close()
    42     //    return cfg, toml.NewDecoder(f).Decode(&cfg)
    43     // }
    44     if err != nil {
    45         fmt.Fprintln(os.Stderr, "Problem loading config file:", err)
    46     }
    47     //根据Config对象 创建relay组件
    48     r, err := relay.New(cfg)
    49     if err != nil {
    50         log.Fatal(err)
    51     }
    52     //定义接收操作系统信号的channel
    53     sigChan := make(chan os.Signal, 1)
    54     //notify用于监听信号,如果操作系统向当前进程发送中断信号(os.Interrupt 表示中断信号)
    55     signal.Notify(sigChan, os.Interrupt)
    56     //如果接收到中断信号,开一个协程调用relay的Stop方法 停止http监听
    57     go func() {
    58         <-sigChan
    59         r.Stop()
    60     }()
    61 
    62     log.Println("starting relays...")
    63     //relay 运行
    64     r.Run()
    65 }

    2、配置文件 relay.toml

     1 [[http]]
     2 name = "example-http"
     3 bind-addr = "127.0.0.1:9096"
     4 output = [
     5     { name="influxdb-1", location = "http://127.0.0.1:8086/write" },
     6     { name="influxdb-2", location = "http://127.0.0.1:7086/write" },
     7 ]
     8 
     9 [[udp]]
    10 name = "example-udp"
    11 bind-addr = "127.0.0.1:19096"
    12 read-buffer = 0 # default
    13 output = [
    14     { name="influxdb-1", location="127.0.0.1:8089", mtu=512 },
    15     { name="influxdb-2", location="127.0.0.1:7089", mtu=1024 },
    16 ]

    总结:

    1、加载配置文件 relay.toml

    2、根据配置文件创建relay,启动监听端口,接收请求

    3、把接收到的请求写入到influxdb1-2节点

    后面再研究下核心模块relay怎么把接收到的数据同时写入,influxdb多个节点。

  • 相关阅读:
    Java 8 新特性之 Stream&forEach&map&filter&limit&sorted&统计函数&Collectors&并行(parallel)程序(转)
    kafka入门:简介、使用场景、设计原理、主要配置及集群搭建(转)
    java8 stream API
    Docker容器CPU、memory资源限制
    JVM调优总结 -Xms -Xmx -Xmn -Xss
    JAVA8之妙用Optional解决判断Null为空的问题
    【王凤鸣 太极缠丝功笔记】第二章
    【精美凉菜】黄瓜腐竹花生豆
    【瓜果篇】黄瓜
    【Teradata UDF】中文按字符查找chs_instr
  • 原文地址:https://www.cnblogs.com/chenru1988/p/9681246.html
Copyright © 2020-2023  润新知