Documentation
¶
Index ¶
- Constants
- Variables
- func Concatenate(arrays ...[]clientv3.Op) []clientv3.Op
- func DoWithRetry(f func() error, funcName string, retryTimes int, retryInterval time.Duration) error
- func InitLogger(cfg *Config) error
- func PrintVersionInfo()
- func StartClean(cfg *Config) error
- type Config
- type EtcdRegistry
- func (r *EtcdRegistry) Close() error
- func (r *EtcdRegistry) Node(pctx context.Context, nodeID string) (*NodeStatus, error)
- func (r *EtcdRegistry) RefreshNode(pctx context.Context, nodeID string) error
- func (r *EtcdRegistry) RegisterNode(pctx context.Context, nodeID, internalHost, externalHost string, ttl int64) error
- func (r *EtcdRegistry) UnregisterNode(pctx context.Context, nodeID string) error
- type Leader
- type LeaderMeta
- type LogForElection
- type Node
- type NodeStatus
- type Position
- type Server
- func (s *Server) ChangeMaster(w http.ResponseWriter, r *http.Request)
- func (s *Server) Close()
- func (s *Server) MasterCheck(w http.ResponseWriter, r *http.Request)
- func (s *Server) SetOnlyFollow(w http.ResponseWriter, r *http.Request)
- func (s *Server) SetReadOnly(w http.ResponseWriter, r *http.Request)
- func (s *Server) SetReadWrite(w http.ResponseWriter, r *http.Request)
- func (s *Server) SlaveCheck(w http.ResponseWriter, r *http.Request)
- func (s *Server) Start() error
- type ServiceManager
- type WarnHook
Constants ¶
const (
// DefaultName is the default name of the command line.
DefaultName = "mysql-agent"
)
Variables ¶
var ( // Version defines the version of agent Version = "1.0.0+git" // GitHash will be set during make GitHash = "Not provided (use make build instead of go build)" // BuildTS will be set during make BuildTS = "Not provided (use make build instead of go build)" )
Functions ¶
func Concatenate ¶
Concatenate creates a new array and concatenates all passed-in arrays together
func DoWithRetry ¶
func DoWithRetry(f func() error, funcName string, retryTimes int, retryInterval time.Duration) error
DoWithRetry will execute f once, followed by `retryTimes` retry if returned err is not nil so given DoWithRetry(f, 2), f will be executed at most 3 times, 1 execution and 2 retries, with the last time error returned.
func StartClean ¶
StartClean should be invoked by another process when agent exits with status code 3, is used to clean the data that should have been cleaned by agent gracefully shutdown.
Types ¶
type Config ¶
type Config struct {
*flag.FlagSet
// ClusterName distinguishes one Master-Slaves cluster from another
ClusterName string `toml:"cluster-name" json:"cluster-name"`
// LeaderLeaseTTL is the leader lease time to live, measured by second
LeaderLeaseTTL int64 `toml:"leader-lease-ttl" json:"leader-lease-ttl"`
// ShutdownThreshold is the time that costs when agent shutdown, measured by second
ShutdownThreshold int64 `toml:"shutdown-threshold" json:"shutdown-threshold"`
DataDir string `toml:"data-dir" json:"data-dir"`
NodeID string `toml:"node-id" json:"node-id"`
ListenAddr string `toml:"addr" json:"addr"`
// OnlyFollow decides whether current node join in leader campaign
// if onlyFollow is true, current node will NOT campaign leader
// else, aka onlyFollow is false, node will participate in leader campaign
OnlyFollow bool `toml:"only-follow" json:"only-follow"`
EtcdURLs string `toml:"etcd-urls" json:"etcd-urls"`
EtcdDialTimeout time.Duration
RefreshInterval int `toml:"refresh-interval" json:"refresh-interval"`
RegisterTTL int `toml:"register-ttl" json:"register-ttl"`
EtcdRootPath string `toml:"etcd-root-path" json:"etcd-root-path"`
EtcdUsername string `toml:"etcd-username" json:"etcd-username"`
EtcdPassword string `toml:"etcd-password" json:"etcd-password"`
LogLevel string `toml:"log-level" json:"log-level"`
LogFile string `toml:"log-file" json:"log-file"`
ErrorLog string `toml:"error-log" json:"error-log"`
LogMaxSize int `toml:"log-max-size" json:"log-max-size"`
LogMaxDays int `toml:"log-max-days" json:"log-max-days"`
LogCompress bool `toml:"log-compress" json:"log-compress"`
ServiceType string `toml:"service-type" json:"service-type"`
DBConfig types.DBConfig `toml:"db-config" json:"db-config"`
InternalServiceHost string `toml:"internal-service-host" json:"internal-service-host"`
ExternalServiceHost string `toml:"external-service-host" json:"external-service-host"`
ForkProcessFile string `toml:"fork-process-file" json:"fork-process-file"`
ForkProcessArgs []string `toml:"fork-process-args" json:"fork-process-args"`
ForkProcessWaitSecond int `toml:"fork-process-wait-second" json:"fork-process-wait-second"`
CampaignWaitTime time.Duration
// contains filtered or unexported fields
}
Config holds the configuration of agent
type EtcdRegistry ¶
type EtcdRegistry struct {
// contains filtered or unexported fields
}
EtcdRegistry wraps the reactions with etcd.
func NewEtcdRegistry ¶
func NewEtcdRegistry(cli *etcd.Client, reqTimeout time.Duration) *EtcdRegistry
NewEtcdRegistry returns an EtcdRegistry client.
func (*EtcdRegistry) Node ¶
func (r *EtcdRegistry) Node(pctx context.Context, nodeID string) (*NodeStatus, error)
Node returns node status in etcd by nodeID.
func (*EtcdRegistry) RefreshNode ¶
func (r *EtcdRegistry) RefreshNode(pctx context.Context, nodeID string) error
RefreshNode keeps heartbeats with etcd.
func (*EtcdRegistry) RegisterNode ¶
func (r *EtcdRegistry) RegisterNode(pctx context.Context, nodeID, internalHost, externalHost string, ttl int64) error
RegisterNode registers node in the etcd.
func (*EtcdRegistry) UnregisterNode ¶
func (r *EtcdRegistry) UnregisterNode(pctx context.Context, nodeID string) error
UnregisterNode unregisters node from etcd.
type Leader ¶
type Leader struct {
// contains filtered or unexported fields
}
Leader represents the Leader info get from etcd
type LeaderMeta ¶
type LeaderMeta struct {
// contains filtered or unexported fields
}
LeaderMeta is the meta-info of the leader, which is persist in etcd, with no expiration
type LogForElection ¶
type LogForElection struct {
Term uint64 `json:"term"`
LastUUID string `json:"last_uuid"`
LastGTID string `json:"last_gtid"`
EndTxnID uint64 `json:"end_txn_id"`
// Version is the schema version of LogForElection, used for backward compatibility
Version int `json:"version"`
}
LogForElection describes the necessary information (log) for election
type Node ¶
type Node interface {
// ID returns node ID
ID() string
// Register registers node to etcd.
Register(ctx context.Context) error
// Unregister unregisters node from etcd.
Unregister(ctx context.Context) error
// Heartbeat refreshes node state in etcd.
// key 'root/nodes/<nodeID/alive' will disappear after TTL time passed.
Heartbeat(ctx context.Context) <-chan error
// RowClient returns raw etcd client.
RawClient() *etcd.Client
// NodeStatus return one node status
NodeStatus(ctx context.Context, nodeID string) (*NodeStatus, error)
}
Node defines actions with etcd.
func NewAgentNode ¶
NewAgentNode returns a MySQL agentNode that monitor MySQL server.
type NodeStatus ¶
type NodeStatus struct {
NodeID string
InternalHost string
ExternalHost string
IsAlive bool `json:",omitempty"`
LatestPos Position `json:",omitempty"`
}
NodeStatus describes the status information of a node in etcd.
type Position ¶
type Position struct {
File string
Pos string
GTID string
UUID string
EndTxnID uint64 `json:",omitempty"`
SlaveIORunning bool `json:",omitempty"`
SlaveSQLRunning bool `json:",omitempty"`
SecondsBehindMaster int `json:",omitempty"`
}
Position describes the position of MySQL binlog.
type Server ¶
type Server struct {
// contains filtered or unexported fields
}
Server maintains agent's status at runtime.
func (*Server) ChangeMaster ¶
func (s *Server) ChangeMaster(w http.ResponseWriter, r *http.Request)
ChangeMaster triggers change master by endpoint
func (*Server) MasterCheck ¶
func (s *Server) MasterCheck(w http.ResponseWriter, r *http.Request)
MasterCheck return status 200 iff current node is master else status 418
func (*Server) SetOnlyFollow ¶
func (s *Server) SetOnlyFollow(w http.ResponseWriter, r *http.Request)
SetOnlyFollow sets the s.onlyFollow to true or false, depending on the param `onlyFollow` passed in
func (*Server) SetReadOnly ¶
func (s *Server) SetReadOnly(w http.ResponseWriter, r *http.Request)
SetReadOnly sets mysql readonly
func (*Server) SetReadWrite ¶
func (s *Server) SetReadWrite(w http.ResponseWriter, r *http.Request)
SetReadWrite sets mysql readwrite
func (*Server) SlaveCheck ¶
func (s *Server) SlaveCheck(w http.ResponseWriter, r *http.Request)
SlaveCheck return status 200 iff current node is not master else status 418
type ServiceManager ¶
type ServiceManager interface {
// SetReadOnly set service readonly
SetReadOnly() error
// SetReadWrite set service readwrite
SetReadWrite() error
// PromoteToMaster promotes a slave to master
PromoteToMaster() error
// RedirectMaster make a slave point to another master
RedirectMaster(masterHost, masterPort string) error
// SetReadOnlyManually sets service readonly, but only executed manually
SetReadOnlyManually() (bool, error)
LoadSlaveStatusFromDB() (*Position, error)
LoadMasterStatusFromDB() (*Position, error)
LoadReplicationInfoOfMaster() (masterUUID, executedGTID string, endTxnID uint64, err error)
LoadReplicationInfoOfSlave() (masterUUID, executedGTID string, endTxnID uint64, err error)
GetServerUUID() (string, error)
Close() error
}
ServiceManager defines some functions to manage service
func NewMySQLServiceManager ¶
NewMySQLServiceManager returns the instance of mysqlServiceManager
func NewPostgreSQLServiceManager ¶
func NewPostgreSQLServiceManager(dbConfig types.DBConfig, timeout time.Duration) (ServiceManager, error)
NewPostgreSQLServiceManager returns the instance of mysqlServiceManager