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:
Will Assis
2025-04-25 13:08:44 -04:00
committed by GitHub
parent ff7b923d33
commit 4adebd6058
19 changed files with 654 additions and 25 deletions
+53
View File
@@ -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
}