Redis 流量镜像
采用 RedisService ,我们可以将发送到 Redis 服务的请求同时发送一份到另一个 Redis 服务上。客户端只会收到来自主 Redis 服务的响应,而镜像 Redis 服务的响应会被丢弃。我们可以设置镜像流量的百分比,例如将 50% 的流量镜像到另一个 Redis 服务上。
例如下面的 RedisService 将所有发送到 redis-cluster 服务的请求同时发送到 redis-single 服务。
kubectl apply -f- <<EOF
apiVersion: redis.aeraki.io/v1alpha1
kind: RedisService
metadata:
name: redis-cluster
namespace: redis
spec:
host:
- redis-cluster.redis.svc.cluster.local
redis:
- route:
host: redis-cluster.redis.svc.cluster.local
mirror:
- route:
host: redis-single.redis.svc.cluster.local
percentage:
value: 100
EOF
此时通过客户端访问 redis-cluster 服务,设置 test-traffic-mirroring
key 的值。
kubectl exec -it `kubectl get pod -l app=redis-client -n redis -o jsonpath="{.items[0].metadata.name}"` -c redis-client -n redis -- redis-cli -h redis-cluster
redis-cluster:6379> set test-traffic-mirroring "this key goes to both redis-cluster and redis-single"
OK
redis-cluster:6379> get test-traffic-mirroring
"this key goes to both redis-cluster and redis-single"
再通过客户端访问 redis-single 服务,可以看到 redis-single 服务中也有 test-traffic-mirroring
这个 key,说明客户端发送给 redis-cluster 的请求被同时发送到了 redis-single。
kubectl exec -it `kubectl get pod -l app=redis-client -n redis -o jsonpath="{.items[0].metadata.name}"` -c redis-client -n redis -- redis-cli -h redis-single
redis-single:6379> AUTH testredis123!
OK
redis-single:6379> get test-traffic-mirroring
"this key goes to both redis-cluster and redis-single"
Feedback
Was this page helpful?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.
最后修改 May 7, 2023: Redis traffic management (b1d6dd9)