- Notifications
You must be signed in to change notification settings - Fork8
Goelect is an open-source, self-contained Golang library designed to facilitate leader election within a distributed system.
License
danl5/goelect
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Goelect is an open-source Go (Golang) library for leader election. It is heavily influenced by the election component of the Raft implementation. For more details, you can refer toRaft Wiki.
- Independent Operation: No third-party services are required. You don't need to set up or rely on external systems like ZooKeeper or etcd.
- Simplified Integration: Easy to integrate into your existing Golang projects with minimal configuration.
- Supports Novote role:The no-vote node does not participate in the election.
- Highly Available: Built to be fault-tolerant, suitable for systems that require high availability.
// ElectConfig is a struct that represents the configuration for an election.typeElectConfigstruct {// Timeout for heartbeat messages, in millisecondsHeartBeatIntervaluint// Timeout for election messages, in millisecondsElectTimeoutuint// Timeout for connecting to peers, in secondsConnectTimeoutuint// List of peers in the networkPeers []Node// Node represents the information of this nodeNodeNode// State callbacksCallBacks*StateCallBacks// Timeout for callbacks, in secondsCallBackTimeoutint}
examples/onenode/node.go
is a great example of using this goelect package.
Create an Elect instance:
// use the built-in RPC as the transport layer.rpcTransport,err:=rpc.NewRPC(logger)iferr!=nil {returnnil,err }e,err:=goelect.NewElect(rpcTransport,// rpc transport config&rpc.Config{},&goelect.ElectConfig{ElectTimeout:200,HeartBeatInterval:150,ConnectTimeout:10,Peers:peerNodes,// state transition callbacksCallBacks:&goelect.StateCallBacks{EnterLeader:enterLeader,LeaveLeader:leaveLeader,EnterFollower:enterFollower,LeaveFollower:leaveFollower,EnterCandidate:enterCandidate,LeaveCandidate:leaveCandidate, },// self nodeNode: goelect.Node{Address:*nodeAddress,ID:*nodeAddress, }, },logger)
Start the Elect:
err=e.Run()
This is everything we need to do :)
About
Goelect is an open-source, self-contained Golang library designed to facilitate leader election within a distributed system.
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Packages0
Uh oh!
There was an error while loading.Please reload this page.
Contributors2
Uh oh!
There was an error while loading.Please reload this page.