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 {}
|
}
|