package main import ( "context" "flag" "math/rand" "path" "serfNode/ipc" "serfNode/vrrp" "serfNode/webServer" "serfNode/config" "serfNode/serf" "basic.com/valib/logger.git" _ "basic.com/valib/version.git" ) var ( procName = "serfNode" Priority int Vrrp bool ) func init() { flag.IntVar(&Priority, "pri", 0, "router priority") flag.BoolVar(&Vrrp, "vrrp", false, "enable vrrp") // 日志初始化 var logFile = path.Join(config.LogConf.Path, procName+".log") logger.InitLogger(logFile, config.LogConf.Level, config.LogConf.MaxSize, config.LogConf.MaxBackups, config.LogConf.MaxAge) logger.Info("log init success !") } func main() { flag.Parse() // 如果未配置优先级, 先使用一个随机数, 用作节点选举 if Priority == 0 { Priority = rand.Intn(100) } // 通过node-red读取集群配置 if err := ipc.GetConfigFromNodeRed(); err != nil { logger.Error(err.Error()) return } // 启动serf节点 ctx := context.Background() if err := serf.InitAgent(ctx, *config.SerfConf); err != nil { logger.Debug("err:", err) return } // 启动web通信服务 go webServer.Serve(config.WebConf.Port) ipc.InitNsqClient() // 启动vrrp服务 if Vrrp { go vrrp.Start(Priority) } select {} }