基于serf的数据库同步模块库
chenshijun
2019-09-04 0495bb9aa85ffd7dfe4ee268c768c423982f8afb
修改加入集群的接口,需要ip加端口
1个文件已修改
59 ■■■■■ 已修改文件
agent.go 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
agent.go
@@ -25,6 +25,7 @@
    "io/ioutil"
    "net"
    "os"
    "strconv"
    "sync"
    //"os"
@@ -536,14 +537,14 @@
}
//Init serf Init
func Init(clusterID string, password string, nodeID string, ips []string) (*Agent, error) {
func Init(clusterID string, password string, nodeID string, addrs []string) (*Agent, error) {
    agent, err := InitNode(clusterID, password, nodeID)
    if err != nil {
        fmt.Printf("InitNode failed, error: %s", err)
        return agent, err
    }
    err = agent.JoinByNodeIP(ips)
    err = agent.JoinByNodeAddrs(addrs)
    if err != nil {
        fmt.Printf("JoinByNodeIP failed, error: %s", err)
        return agent, err
@@ -588,43 +589,49 @@
    return agent, nil
}
func (a *Agent) JoinByNodeIP(ips []string) error {
func (a *Agent) JoinByNodeAddrs(addrs []string) error {
    var nodes []string
    if len(ips) == 0 {
    if len(addrs) == 0 {
        return fmt.Errorf("No Nodes To Join!")
    }
    for _, ip := range ips {
        node := fmt.Sprintf("%s:%d", ip, DefaultBindPort)
        nodes = append(nodes, node)
    for _, addr := range addrs {
        nodes = append(nodes, addr)
    }
    n, err := a.Agent.Join(nodes, true)
    if err != nil || n == 0 {
        //a.Stop()
        //fmt.Println("Stop node")
        return fmt.Errorf("Error Encrypt Key!")
    a.Agent.Join(nodes, true)
    return nil
    }
    return err
}
//func (a *Agent) JoinByNodeIP(ips []string) error {
//    var nodes []string
//
//    if len(ips) == 0 {
//        return fmt.Errorf("No Nodes To Join!")
//    }
//    for _, ip := range ips {
//        node := fmt.Sprintf("%s:%d", ip, DefaultBindPort)
//        nodes = append(nodes, node)
//    }
//
//    n, err := a.Agent.Join(nodes, true)
//    if err != nil || n == 0 {
//        return fmt.Errorf("Error Encrypt Key!")
//    }
//
//    return err
//}
type Node struct {
    clusterID string
    NodeID    string
    IP        string
    isAlive   int //StatusNone:0, StatusAlive:1, StatusLeaving:2, StatusLeft:3, StatusFailed:4
}
func (a *Agent) GetNodes() (nodes []Node) {
    var node Node
func (a *Agent) GetNodes() (nodes []NodeInfo) {
    var node NodeInfo
    fmt.Println("a.conf.ClusterID:", a.conf.ClusterID)
    mbs := a.GroupMembers(a.conf.ClusterID)
    for _, mb := range mbs {
        node.NodeID = mb.Name
        node.IP = mb.Addr.String()
        node.isAlive = int(mb.Status)
        node.clusterID = mb.Tags[tagKeyClusterID]
        node.NodeAddress = mb.Addr.String() + ":" + strconv.Itoa(int(mb.Port))
        node.IsAlive = int(mb.Status)
        node.ClusterID = mb.Tags[tagKeyClusterID]
        nodes = append(nodes, node)
    }