package serf
|
|
import (
|
"context"
|
|
"serfNode/config"
|
"serfNode/logger"
|
|
"basic.com/syncdb.git"
|
)
|
|
var agent *syncdb.Agent
|
var nodeRole string
|
|
// 初始化节点
|
func InitAgent(ctx context.Context, conf config.SerfConfig) error {
|
if agent != nil {
|
agent.Stop()
|
agent = nil
|
}
|
|
var err error
|
password := conf.AuthKey + "123456"
|
|
serfConfig := syncdb.DefaultConfig()
|
serfConfig.RPCAddr = "0.0.0.0:7373"
|
serfConfig.RPCPort = 7373
|
serfConfig.BindAddr = "0.0.0.0:5000"
|
serfConfig.Ctx = ctx
|
|
if conf.BindAddr != "" {
|
serfConfig.BindAddr = conf.BindAddr
|
}
|
|
if conf.RPCAddr != "" {
|
serfConfig.RPCAddr = conf.RPCAddr
|
}
|
|
if conf.RPCPort != 0 {
|
serfConfig.RPCPort = conf.RPCPort
|
}
|
|
agent, err = syncdb.InitNode(conf.ClusterName, password, conf.NodeName, "./serf-daemon.json", serfConfig)
|
if err != nil {
|
logger.Error(err)
|
return err
|
}
|
|
agent.RegisterHandleEventFunc(HandleSerfEvent)
|
|
//logger.Debug("agent init done")
|
|
return nil
|
}
|
|
// 加入集群
|
func JoinCluster(addr string) error {
|
return agent.JoinByNodeAddrs([]string{addr})
|
}
|
|
// 退出集群
|
func LeaveCluster() error {
|
return agent.Leave()
|
}
|
|
func ClusterState() map[string]map[string]string {
|
return agent.Stats()
|
}
|
|
func Members() []syncdb.NodeInfo {
|
return agent.GetNodes()
|
}
|
|
func Switch2Master() error {
|
nodeRole = "master"
|
SetTag("role", "master")
|
|
return nil
|
}
|
|
func Switch2Slave() error {
|
nodeRole = "slave"
|
SetTag("role", "slave")
|
|
return nil
|
}
|
|
func SetTag(key, value string) error {
|
// 有一些预置的tag
|
conf := agent.SerfConfig()
|
conf.Tags[key] = value
|
|
return agent.SetTags(conf.Tags)
|
}
|
|
func IsMaster() bool {
|
return nodeRole == "master"
|
}
|