下面的 EnvoyFilter 在 Pilot 下发的 CDS 中创建了一个 "envoy.clusters.redis" 类型的 Cluster: "custom-redis-cluster",该 Cluster 会采用 CLUSTER SLOTS 命令 向 Redis 集群中的一个随机节点查询集群的拓扑结构,并在本地保存该拓扑结构,以将来自客户端的请求分发到集群中正确的 Redis 节点上。
apiVersion: networking.istio.io/v1alpha3 kind: EnvoyFilter metadata: name: custom-redis-cluster namespace: istio-system spec: configPatches: - applyTo: CLUSTER patch: operation: INSERT_FIRST value: name: "custom-redis-cluster" connect_timeout: 0.5s lb_policy: CLUSTER_PROVIDED load_assignment: cluster_name: custom-redis-cluster endpoints: - lb_endpoints: - endpoint: address: socket_address: address: redis-cluster-0.redis-cluster.redis.svc.cluster.local port_value: 6379 - endpoint: address: socket_address: address: redis-cluster-1.redis-cluster.redis.svc.cluster.local port_value: 6379 - endpoint: address: socket_address: address: redis-cluster-2.redis-cluster.redis.svc.cluster.local port_value: 6379 - endpoint: address: socket_address: address: redis-cluster-3.redis-cluster.redis.svc.cluster.local port_value: 6379 - endpoint: address: socket_address: address: redis-cluster-4.redis-cluster.redis.svc.cluster.local port_value: 6379 - endpoint: address: socket_address: address: redis-cluster-5.redis-cluster.redis.svc.cluster.local port_value: 6379 cluster_type: name: envoy.clusters.redis typed_config: "@type": type.googleapis.com/google.protobuf.Struct value: cluster_refresh_rate: 5s cluster_refresh_timeout: 3s redirect_refresh_interval: 5s redirect_refresh_threshold: 5 小结本文介绍了如何使用 Envoy 为微服务应用提供客户端无感知的 Redis 数据分片,以及如何通过 Istio 来统一管理系统中多个 Envoy 代理的 Redis Cluster 配置。我们可以看到,采用 Istio 和 Envoy 可以大大简化客户端使用 Redis Cluster 的编码和配置工作,并且可以在线修改 Redis Cluster 的运维策略,实现读写分离、流量镜像等高级流量管理。当然,引入 Istio 和 Envoy 并未减少整个系统的复杂度,而是将 Redis Cluster 维护的工作从各个分散的应用代码中集中到了服务网格基础设施层。对应广大应用开放者来说,其业务价值主要来自于应用代码,将大量精力投入此类基础设施是不太划算的。建议直接采用腾讯云上的云原生 Service Mesh 服务 TCM(Tencent Cloud Mesh),为微服务应用快速引入 Service Mesh 的流量管理和服务治理能力,而无需再关注 Service Mesh 基础设施自身的安装、维护、升级等事项。
参考文档https://rancher.com/blog/2019/deploying-redis-cluster
https://medium.com/@fr33m0nk/migrating-to-redis-cluster-using-envoy-93a87ae79dc3
Implement REPLACE operation for EnvoyFilter patch
【腾讯云原生】云说新品、云研新术、云游新活、云赏资讯,扫码关注同名公众号,及时获取更多干货!!