go开源项目influxdb-relay源码分析(一)
程序员文章站
2023-11-27 22:03:46
influxdb-relay项目地址: https://github.com/influxdata/influxdb-relay,主要作为负载均衡节点,写入多个influxdb节点,起到高可用效果。 不多说,开搞~ 1、main.go 2、配置文件 relay.toml 总结: 1、加载配置文件 r ......
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多个节点。
推荐阅读
-
go开源项目influxdb-relay源码分析(一)
-
go开源项目influxdb-relay源码分析(一)
-
mybatis的使用及源码分析(一) mybatis介绍以及原生Mybatis项目搭建
-
Hadoop源码学习笔记之NameNode启动流程分析一:源码环境搭建和项目模块及NameNode结构简单介绍
-
【.NET Core项目实战-统一认证平台】第八章 授权篇-IdentityServer4源码分析
-
待进阶的phper 想要通读一个开源项目源码,应该研究哪个较好?
-
待进阶的phper 想要通读一个开源项目源码,应该研究哪个较好?
-
Hadoop源码学习笔记之NameNode启动流程分析一:源码环境搭建和项目模块及NameNode结构简单介绍
-
【.NET Core项目实战-统一认证平台】第八章 授权篇-IdentityServer4源码分析
-
------ 开源软件 Tor(洋葱路由器,构建匿名网络的方案之一)源码分析——主程序入口点(二)------