import "github.com/hashicorp/memberlist"
memberlist是一個(gè)庫乘寒,它使用基于 gossip 的協(xié)議管理集群成員關(guān)系和成員故障檢測的诵。
此類庫的用例意義深遠(yuǎn):所有分布式系統(tǒng)都需要成員關(guān)系万栅,而成員列表是管理集群成員關(guān)系和節(jié)點(diǎn)故障檢測的可重用解決方案.
成員列表最終是一致的,但平均收斂速度很快西疤。它收斂的速度可以通過協(xié)議上的各個(gè)旋鈕進(jìn)行大量調(diào)優(yōu)烦粒。通過嘗試通過多個(gè)路由與可能死節(jié)點(diǎn)通信,可以檢測到節(jié)點(diǎn)故障并部分容忍網(wǎng)絡(luò)分區(qū).
方法
-
func DefaultLocalConfig() *Config
返回一個(gè) struct
DefaultLocalConfig的工作原理與DefaultConfig類似代赁,然而扰她,它返回一個(gè)優(yōu)化的本地環(huán)回地址的配置。默認(rèn)配置仍然是非常保守的芭碍,并且需要注意錯(cuò)誤徒役。 -
func Create(conf *Config) (*Memberlist, error)
Create將使用給定的配置創(chuàng)建一個(gè)新的成員列表。它還不會(huì)連接到任何其他節(jié)點(diǎn)(請(qǐng)參見Join)窖壕,但會(huì)啟動(dòng)所有偵聽器廉涕,以允許其他節(jié)點(diǎn)加入這個(gè)成員列表。創(chuàng)建成員列表后艇拍,用戶不應(yīng)該再修改給定的配置狐蜕。 -
func (m *Memberlist) GetHealthScore() int
數(shù)字越低越好,0 意味著“完全健康” -
func (m *Memberlist) Join(existing []string) (int, error)
Join用于獲取現(xiàn)有的成員列表卸夕,并嘗試通過聯(lián)系所有給定主機(jī)并執(zhí)行狀態(tài)同步來連接集群层释。最初,Memberlist只包含我們自己的狀態(tài)快集,因此這樣做將導(dǎo)致遠(yuǎn)程節(jié)點(diǎn)意識(shí)到這個(gè)節(jié)點(diǎn)的存在贡羔,從而有效地加入集群。
這將返回成功聯(lián)系的主機(jī)數(shù)量个初,如果無法聯(lián)系到主機(jī)乖寒,則返回錯(cuò)誤。如果返回錯(cuò)誤院溺,則節(jié)點(diǎn)沒有成功加入集群楣嘁。 -
func (m *Memberlist) Leave(timeout time.Duration) error
Leave將廣播一條Leave消息,但不會(huì)關(guān)閉后臺(tái)偵聽器珍逸,這意味著節(jié)點(diǎn)將繼續(xù)參與gossip和狀態(tài)更新逐虚。
這將阻塞,直到成功地將leave消息廣播到集群的一個(gè)成員(如果有的話)谆膳,或者直到達(dá)到指定的超時(shí)叭爱。
這個(gè)方法可以安全地多次調(diào)用,但是在集群已經(jīng)關(guān)閉之后不能再調(diào)用它漱病。 -
func (m *Memberlist) LocalNode() *Node
LocalNode用于返回本地節(jié)點(diǎn) -
func (m *Memberlist) Members() []*Node
Members返回所有已知的活著的節(jié)點(diǎn)列表买雾。返回的節(jié)點(diǎn)結(jié)構(gòu)不能被修改把曼。如果希望修改節(jié)點(diǎn),請(qǐng)先進(jìn)行復(fù)制漓穿。 -
func (m *Memberlist) NumMembers() (alive int)
NumMembers返回當(dāng)前已知的活著的節(jié)點(diǎn)的數(shù)量嗤军。在調(diào)用NumMembers和調(diào)用Members的時(shí)候,活著節(jié)點(diǎn)的數(shù)量可能已經(jīng)改變器净,所以這個(gè)不應(yīng)該用來確定Members返回多少個(gè)members型雳。 -
func (m *Memberlist) Ping(node string, addr net.Addr) (time.Duration, error)
Ping向具有指定名稱的節(jié)點(diǎn)發(fā)起Ping当凡。 -
func (m *Memberlist) ProtocolVersion() uint8
返回此memberlist當(dāng)前使用的協(xié)議版本山害。 -
func (m *Memberlist) SendBestEffort(to *Node, msg []byte) error
SendBestEffort使用傳輸?shù)牟豢煽康臄?shù)據(jù)包的接口以給定節(jié)點(diǎn)上的用戶消息為目標(biāo)(不使用gossip機(jī)制)。消息的最大大小取決于此memberlist實(shí)例的已配置UDPBufferSize沿量。 -
func (m *Memberlist) SendReliable(to *Node, msg []byte) error
sendreresponsible使用可靠的面向流的傳輸接口浪慌,以指定節(jié)點(diǎn)上的用戶消息為目標(biāo)(不使用gossip機(jī)制)。如果沒有返回錯(cuò)誤朴则,并且消息的大小沒有限制权纤,則保證交付。 -
func (m *Memberlist) Shutdown() error
Shutdown將停止此memberlist的網(wǎng)絡(luò)活動(dòng)的任何后臺(tái)維護(hù)乌妒,導(dǎo)致它顯示為“dead”汹想。在此之前,將不會(huì)廣播leave消息撤蚊,因此所剩下的集群必須使用探測來檢測此節(jié)點(diǎn)的關(guān)閉古掏。如果希望更優(yōu)雅地退出集群,請(qǐng)?jiān)陉P(guān)閉之前調(diào)用Leave侦啸。
這個(gè)方法可以安全調(diào)用多次槽唾。 -
func (m *Memberlist) UpdateNode(timeout time.Duration) error
UpdateNode is used to trigger re-advertising the local node.
這將阻塞,直到更新消息成功地廣播到集群的一個(gè)成員(如果存在更新消息)光涂,或者直到達(dá)到指定的超時(shí)庞萍。