floridalist

package module
v1.1.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 25, 2019 License: Apache-2.0 Imports: 13 Imported by: 0

README

dynomite-floridalist

Dynomite seed management / seed_provider.

dynomite-floridalist works as Dynomite seed_provider using same communicate as Florida API.

features below:

  • Automated seed_provider / less state dependence
  • Simple configuration management. dynomite-florialist can using dynomite.yml
  • Container friendly. dynomite-floridalist can be applied to both sidecar pattern and centralized pattern
  • Consistently generate dynomite.yml and using it
  • Clustering and node management with memberlist

Build

Build requires Go version 1.11+ installed.

$ go version

Run make pkg to Build and package for linux, darwin.

$ git clone https://github.com/octu0/dynomite-floridalist
$ make pkg

Usage

using dynomite.yml (e.g. side-car pattern)

$ dynomite-floridalist -j memberlist:port -c /path/to/dynomite.conf

Or specify DC,Rack,Token

$ dynomite-floridalist --join member:port --address "$(hostname -i):8101" --datacenter asia-northeast1 --rack asia-northeast1-c --token 2147483647

Help

NAME:
   dynomite-floridalist

USAGE:
   dynomite-floridalist [global options] command [command options] [arguments...]

VERSION:
   1.1.3

COMMANDS:
     generate  generate `dynomite.yml`
     help, h   Shows a list of commands or help for one command

GLOBAL OPTIONS:
   --join value, -j value       join memberlist cluster address (default: "127.0.0.1:3101") [$DYN_FLORIDALIST_JOIN_ADDR]
   --ml-name ml-ip              memberlist name(defaults: ml-ip:`ml-port`) [$DYN_FLORIDALIST_NODE_NAME]
   --ml-ip value                memberlist bind-ip (default: "0.0.0.0") [$DYN_FLORIDALIST_BIND_IP]
   --ml-port value              memberlist bind-port (default: 3101) [$DYN_FLORIDALIST_BIND_PORT]
   --conf value, -c value       path to dynomite.yml [$DYNOMITE_YAML_PATH]
   --address value              Dynomite node listen address [$DYN_ADDRESS]
   --datacenter value           Dynomite node datacenter name [$DYN_DC]
   --rack value                 Dynomite node rack name [$DYN_RACK]
   --token value                Dynomite node owned token [$DYN_TOKEN]
   --http-ip value, -i value    florida API http ip (default: "0.0.0.0") [$DYNOMITE_FLORIDA_IP]
   --http-port value, -p value  florida API http port (default: 8080) [$DYNOMITE_FLORIDA_PORT]
   --request value, -r value    florida API request endpoint (default: "/REST/v1/admin/get_seeds") [$DYNOMITE_FLORIDA_REQUEST]
   --http-read-timeout value    florida API read timeout (default: "500ms")
   --http-write-timeout value   florida API write timeout (default: "500ms")
   --ml-leave-timeout value     memberlist cluster leave timeout (default: "30s")
   --wan                        use WANconfig (defaults LANConfig)
   --procs value, -P value      attach cpu(s) (default: 8)
   --debug, -d                  debug mode
   --verbose, -V                verbose. more message
   --help, -h                   show help
   --version, -v                print the version

Generate dynomite.yml

Using generate command, can make dynomite.yml automatically.

NAME:
   dynomite-floridalist generate - generate `dynomite.yml`

USAGE:
   dynomite-floridalist generate [command options] [arguments...]

OPTIONS:
   --tmpl dynomite.yml.tmpl, -t dynomite.yml.tmpl  path to dynomite.yml.tmpl. if Empty using default value [$DYNOMITE_YAML_TMPL_PATH]
   --output FILE, -o FILE                          write output to FILE. defaults output to stdout [$DYNOMITE_YAML_PATH]
   --address value                                 Dynomite node listen address [$DYN_ADDRESS]
   --datacenter value                              Dynomite node datacenter name [$DYN_DC]
   --rack value                                    Dynomite node rack name [$DYN_RACK]
   --token value                                   Dynomite node owned token [$DYN_TOKEN]
   --backend-server servers                        servers format 'ip:port:weight' (default: "127.0.0.1:6379:100") [$DYN_BACKEND_SERVER]

Usage

$ DYNOMITE_YAML="/etc/dynomite.yml"

$ dynomite-floridalist generate \
	--address 10.16.0.123 \
	--datacenter ap-northeast-1 \
	--rack ap-northeast-1d
	--token 0 \
	--backend-server "127.0.0.1:6379:1" \
	-o $DYNOMITE_YAML

$ dynomite-floridalist --address 10.16.0.123 -c $DYNOMITE_YAML

Environment

# defined by Dockerfile or docker-compose or any solution
$ DYN_ADDRESS="10.16.0.123"
$ DYN_DC="ap-northeast-1"
$ DYN_RACK="ap-northeast-1d"
$ DYN_TOKEN="0"
$ DYN_BACKEND_SERVER="127.0.0.1:6379:100"
$ DYNOMITE_YAML="/etc/dynomite.yml"

# run. same source
$ dynomite-floridalist generate -o $DYNOMITE_YAML
$ dynomite-floridalist -c $DYNOMITE_YAML
$ dynomite -c $DYNOMITE_YAML

Documentation

Index

Constants

View Source
const (
	DEFAULT_MEMBERLIST_JOIN_ADDR     string = "127.0.0.1:3101"
	DEFAULT_MEMBERLIST_BIND_IP       string = "0.0.0.0"
	DEFAULT_MEMBERLIST_BIND_PORT     int    = 3101
	DEFAULT_FLORIDA_API_IP           string = "0.0.0.0"
	DEFAULT_FLORIDA_API_PORT         int    = 8080
	DEFAULT_FLORIDA_API_REQUEST      string = "/REST/v1/admin/get_seeds"
	DEFAULT_HTTP_READ_TIMEOUT        string = "500ms"
	DEFAULT_HTTP_WRITE_TIMEOUT       string = "500ms"
	DEFAULT_MEMBERLIST_LEAVE_TIMEOUT string = "30s"
)
View Source
const (
	AppName string = "dynomite-floridalist"
	Version string = "1.1.3"
	UA      string = AppName + "/" + Version
)
View Source
const DYNOMITE_YML_TMPL = `` /* 1238-byte string literal not displayed */
View Source
const TAB string = "\t"

Variables

This section is empty.

Functions

func NewMemberlistConfig

func NewMemberlistConfig(ctx context.Context) *memberlist.Config

func WrapAccessLog

func WrapAccessLog(next http.Handler, logger HttpLogger) http.Handler

Types

type Config

type Config struct {
	DebugMode   bool
	VerboseMode bool
	Procs       int

	MemberlistNodeName    string
	MemberlistJoinAddress string
	MemberlistBindIp      string
	MemberlistBindPort    int

	FloridaBindIP          string
	FloridaBindPort        int
	FloridaEndpoint        string
	HttpReadTimeout        time.Duration
	HttpWriteTimeout       time.Duration
	MemberlistLeaveTimeout time.Duration

	UseWANConfig bool
}

type DefDelegate

type DefDelegate struct {
	// contains filtered or unexported fields
}

func NewMemberlistDelegate

func NewMemberlistDelegate(ctx context.Context) *DefDelegate

func (*DefDelegate) GetBroadcasts

func (d *DefDelegate) GetBroadcasts(overhead, limit int) [][]byte

func (*DefDelegate) Init

func (d *DefDelegate) Init() error

func (*DefDelegate) LocalState

func (d *DefDelegate) LocalState(join bool) []byte

func (*DefDelegate) MergeRemoteState

func (d *DefDelegate) MergeRemoteState(buf []byte, join bool)

func (*DefDelegate) NodeMeta

func (d *DefDelegate) NodeMeta(limit int) []byte

func (*DefDelegate) NotifyMsg

func (d *DefDelegate) NotifyMsg(msg []byte)

type DefLogger

type DefLogger struct {
	DebugMode bool
}

func (*DefLogger) Write

func (l *DefLogger) Write(host string, method string, uri string, status int, ua string)

type Dyn_o_mite

type Dyn_o_mite struct {
	Datacenter string `yaml:"datacenter"`
	Rack       string `yaml:"rack"`
	Listen     string `yaml:"dyn_listen"`
	Tokens     string `yaml:"tokens"`
}

type DynomiteYaml

type DynomiteYaml struct {
	DynomiteConf Dyn_o_mite `yaml:"dyn_o_mite"`
}

type HttpController

type HttpController struct {
	// contains filtered or unexported fields
}

func NewHttpController

func NewHttpController(config Config, member *Member) *HttpController

func (*HttpController) CheckStatus

func (c *HttpController) CheckStatus(res http.ResponseWriter, req *http.Request)

func (*HttpController) GetSeeds

func (c *HttpController) GetSeeds(res http.ResponseWriter, req *http.Request)

func (*HttpController) HttpHandler

func (c *HttpController) HttpHandler() http.Handler

func (*HttpController) Version

func (c *HttpController) Version(res http.ResponseWriter, req *http.Request)

type HttpLogger

type HttpLogger interface {
	Write(host string, method string, uri string, status int, ua string)
}

func NewHttpLogger

func NewHttpLogger(c Config) HttpLogger

type HttpServer

type HttpServer struct {
	Server     *http.Server
	Controller *HttpController
	// contains filtered or unexported fields
}

func NewHttpServer

func NewHttpServer(ctx context.Context, m *Member) *HttpServer

func (*HttpServer) Start

func (s *HttpServer) Start(sctx context.Context) error

func (*HttpServer) Stop

func (s *HttpServer) Stop(sctx context.Context) error

type Member

type Member struct {
	// contains filtered or unexported fields
}

func NewMember

func NewMember(ctx context.Context) *Member

func (*Member) Init

func (m *Member) Init() error

func (*Member) IsJoined

func (m *Member) IsJoined() bool

func (*Member) Join

func (m *Member) Join() error

func (*Member) Leave

func (m *Member) Leave(timeout time.Duration) error

func (*Member) SeedList

func (m *Member) SeedList() []string

type MemberLogger

type MemberLogger struct {
	// contains filtered or unexported fields
}

func NewMemberLogger

func NewMemberLogger(config Config) *MemberLogger

func (*MemberLogger) NewLogger

func (ml *MemberLogger) NewLogger() *log.Logger

type SeedAdvertise

type SeedAdvertise struct {
	Datacenter string `json:"d"`
	Rack       string `json:"r"`
	Token      string `json:"t"`
	Address    string `json:"a"`
}

type WrapWriter

type WrapWriter struct {
	Writer     http.ResponseWriter
	LastStatus int
}

func (*WrapWriter) Header

func (w *WrapWriter) Header() http.Header

func (*WrapWriter) Write

func (w *WrapWriter) Write(b []byte) (int, error)

func (*WrapWriter) WriteHeader

func (w *WrapWriter) WriteHeader(status int)

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL