gossip协议用于分布式中consul就是使用gossip协议,gossip协议是流行病协议,
流行病: 一 传十, 十传百,就这样所有人都感染了。
gossip也是这样
1. 网络中某个节点随机选择k个节点 (k个节点都是没传染的节点) 散播消息
2. k个节点接着传下去
最终消息传遍了整个集群,这里只是简单的介绍,其实gossip协议它还有很多内容,这里主要是是看看代码。
使用gossip协议可以使用
go get github.com/hashicorp/memberlist
node := flag.String("node", "127.0.0.1", "local node")
cluster := flag.String("cluster", "", "add exist cluster")
flag.Parse()
conf := memberlist.DefaultLANConfig()
conf.Name = *node
conf.BindAddr = *node
list, err := memberlist.Create(conf)
if err != nil {
panic("Failed to create memberlist: " + err.Error())
}
// 将list加入到已存在的集群.
if *cluster == "" {
n, err := list.Join([]string{*cluster})
if err != nil {
panic("Failed to join cluster: " + err.Error())
}
}
// Ask for members of the cluster
for _, member := range list.Members() {
fmt.Printf("Member: %s %s\n", member.Name, member.Addr)
}
master:
./server -node 172.17.0.2
node1:
./server -node 172.17.0.3 -cluster 172.17.0.2
node2:
./server -node 172.17.0.4 -cluster 172.17.0.2
或者
node3:
./server -node 172.17.0.5 -cluster 172.17.0.4
node4:
./server -node 172.17.0.6 -cluster 172.17.0.5