unified-storage: setup ring to shard requests (#103783)
* Updates the instrumentation_server service to use mux instead of the builtin router, and have it store the router in the module server: this is so we can register the /ring endpoint to check the status of the ring * Create a new Ring service that depends on the instrumentation server and declares it as a dependency for the storage server * Create standalone MemberlistKV service for Ring service to use * Update the storage server Search and GetStats handler to distribute requests if applicable
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
package server
|
||||
|
||||
import (
|
||||
"github.com/grafana/dskit/dns"
|
||||
"github.com/grafana/dskit/flagext"
|
||||
"github.com/grafana/dskit/kv"
|
||||
"github.com/grafana/dskit/kv/codec"
|
||||
"github.com/grafana/dskit/kv/memberlist"
|
||||
"github.com/grafana/dskit/ring"
|
||||
"github.com/grafana/dskit/services"
|
||||
"github.com/grafana/grafana/pkg/infra/log"
|
||||
"github.com/grafana/grafana/pkg/setting"
|
||||
"github.com/prometheus/client_golang/prometheus"
|
||||
)
|
||||
|
||||
func (ms *ModuleServer) initMemberlistKV() (services.Service, error) {
|
||||
logger := log.New("memberlist")
|
||||
|
||||
dnsProviderReg := prometheus.WrapRegistererWithPrefix(
|
||||
"grafana",
|
||||
prometheus.WrapRegistererWith(
|
||||
prometheus.Labels{"component": "memberlist"},
|
||||
ms.registerer,
|
||||
),
|
||||
)
|
||||
dnsProvider := dns.NewProvider(logger, dnsProviderReg, dns.GolangResolverType)
|
||||
|
||||
KVStore := kv.Config{Store: "memberlist"}
|
||||
|
||||
memberlistKVsvc := memberlist.NewKVInitService(toMemberlistConfig(ms.cfg), logger, dnsProvider, ms.registerer)
|
||||
KVStore.MemberlistKV = memberlistKVsvc.GetMemberlistKV
|
||||
|
||||
ms.MemberlistKVConfig = KVStore
|
||||
|
||||
return memberlistKVsvc, nil
|
||||
}
|
||||
|
||||
func toMemberlistConfig(cfg *setting.Cfg) *memberlist.KVConfig {
|
||||
memberlistKVcfg := &memberlist.KVConfig{}
|
||||
flagext.DefaultValues(memberlistKVcfg)
|
||||
memberlistKVcfg.Codecs = []codec.Codec{
|
||||
ring.GetCodec(),
|
||||
}
|
||||
if cfg.MemberlistBindAddr != "" {
|
||||
memberlistKVcfg.TCPTransport.BindAddrs = []string{cfg.MemberlistBindAddr}
|
||||
}
|
||||
if cfg.MemberlistAdvertiseAddr != "" {
|
||||
memberlistKVcfg.AdvertiseAddr = cfg.MemberlistAdvertiseAddr
|
||||
}
|
||||
memberlistKVcfg.JoinMembers = []string{cfg.MemberlistJoinMember}
|
||||
|
||||
return memberlistKVcfg
|
||||
}
|
||||
Reference in New Issue
Block a user