1
0
Fork 0

Add support for DNS SRV -based discovery

master
Philip O'Toole 3 years ago
parent ac91689504
commit f9148b5745

@ -19,6 +19,7 @@ const (
DiscoModeConsulKV = "consul-kv"
DiscoModeEtcdKV = "etcd-kv"
DiscoModeDNS = "dns"
DiscoModeDNSSRV = "dns-srv"
)
// Config represents the configuration as set by command-line flags.
@ -243,7 +244,7 @@ func (c *Config) Validate() error {
if c.BootstrapExpect > 0 {
return fmt.Errorf("bootstrapping not applicable when using %s", c.DiscoMode)
}
case DiscoModeDNS:
case DiscoModeDNS, DiscoModeDNSSRV:
if c.BootstrapExpect == 0 {
return fmt.Errorf("bootstrap-expect value required when using %s", c.DiscoMode)
}

@ -18,6 +18,7 @@ import (
consul "github.com/rqlite/rqlite-disco-clients/consul"
"github.com/rqlite/rqlite-disco-clients/dns"
"github.com/rqlite/rqlite-disco-clients/dnssrv"
etcd "github.com/rqlite/rqlite-disco-clients/etcd"
"github.com/rqlite/rqlite/auth"
"github.com/rqlite/rqlite/cluster"
@ -370,8 +371,8 @@ func createCluster(cfg *Config, tlsConfig *tls.Config, hasPeers bool, str *store
}
log.Printf("discovery mode: %s", cfg.DiscoMode)
// DNS disco is special.
if cfg.DiscoMode == DiscoModeDNS {
// DNS-based discovery involves a few different options.
if cfg.DiscoMode == DiscoModeDNS || cfg.DiscoMode == DiscoModeDNSSRV {
if hasPeers {
log.Printf("preexisting node configuration detected, ignoring %s", cfg.DiscoMode)
return nil
@ -382,19 +383,33 @@ func createCluster(cfg *Config, tlsConfig *tls.Config, hasPeers bool, str *store
rc.Close()
}
}()
dnsCfg, err := dns.NewConfigFromReader(rc)
if err != nil {
return fmt.Errorf("error reading DNS configuration: %s", err.Error())
var provider interface {
cluster.AddressProvider
httpd.StatusReporter
}
if cfg.DiscoMode == DiscoModeDNS {
dnsCfg, err := dns.NewConfigFromReader(rc)
if err != nil {
return fmt.Errorf("error reading DNS configuration: %s", err.Error())
}
provider = dns.New(dnsCfg)
} else {
dnssrvCfg, err := dnssrv.NewConfigFromReader(rc)
if err != nil {
return fmt.Errorf("error reading DNS configuration: %s", err.Error())
}
provider = dnssrv.New(dnssrvCfg)
}
dnsClient := dns.New(dnsCfg)
bs := cluster.NewBootstrapper(dnsClient, cfg.BootstrapExpect, tlsConfig)
bs := cluster.NewBootstrapper(provider, cfg.BootstrapExpect, tlsConfig)
done := func() bool {
leader, _ := str.LeaderAddr()
return leader != ""
}
httpServ.RegisterStatus("disco", provider)
httpServ.RegisterStatus("disco", dnsClient)
return bs.Boot(str.ID(), cfg.RaftAdv, done, cfg.BootstrapExpectTimeout)
} else {
discoService, err := createDiscoService(cfg, str)

@ -21,7 +21,7 @@ require (
github.com/mkideal/pkg v0.1.3
github.com/rqlite/go-sqlite3 v1.22.0
github.com/rqlite/raft-boltdb v0.0.0-20211018013422-771de01086ce
github.com/rqlite/rqlite-disco-clients v0.0.0-20220130234129-c05d8e6f4a92
github.com/rqlite/rqlite-disco-clients v0.0.0-20220131053835-8891a23a4eed
go.etcd.io/bbolt v1.3.6
go.uber.org/atomic v1.9.0 // indirect
go.uber.org/multierr v1.7.0 // indirect

@ -251,8 +251,8 @@ github.com/rqlite/go-sqlite3 v1.22.0 h1:twqvKzylJXG62Qe0rcqdy5ClGhc0YRc2vvA3nEXw
github.com/rqlite/go-sqlite3 v1.22.0/go.mod h1:ml55MVv28UP7V8zrxILd2EsrI6Wfsz76YSskpg08Ut4=
github.com/rqlite/raft-boltdb v0.0.0-20211018013422-771de01086ce h1:sVlzmCJiaM0LGK3blAHOD/43QxJZ8bLCDcsqZRatnFE=
github.com/rqlite/raft-boltdb v0.0.0-20211018013422-771de01086ce/go.mod h1:mc+WNDHyskdViYAoPnaMXEBnSKBmoUgiEZjrlAj6G34=
github.com/rqlite/rqlite-disco-clients v0.0.0-20220130234129-c05d8e6f4a92 h1:Pfq4lSuNANFRRQDODU2Rcy+rJH7ezDKJiM6rKqDpBAk=
github.com/rqlite/rqlite-disco-clients v0.0.0-20220130234129-c05d8e6f4a92/go.mod h1:pym85nj6JnCI7rM9RxTZ4cubkTQyyg7uLwVydso9B80=
github.com/rqlite/rqlite-disco-clients v0.0.0-20220131053835-8891a23a4eed h1:Rr6Ubr916vDhZR5+2ZTsuno0Of285BQEskkorWMZZLU=
github.com/rqlite/rqlite-disco-clients v0.0.0-20220131053835-8891a23a4eed/go.mod h1:pym85nj6JnCI7rM9RxTZ4cubkTQyyg7uLwVydso9B80=
github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I=
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=

Loading…
Cancel
Save