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多个节点。