Kubernetes 上的 Redis 主/从复制可实现超低延迟

问题描述 投票:0回答:1

图表总是比最后的句子更好,所以这就是我想做的:

enter image description here

总结一下:

  • 我想在我的 K8S 集群外部(或内部,这与这里无关)有一个 Redis 主实例
  • 我想要一个 Redis 从属实例 每个节点复制主实例
  • 我希望在删除节点时,Redis 从属 pod 从主节点取消注册
  • 我希望在添加节点时,将一个Redis Slave Pod添加到该节点并注册到Master上
  • 我希望一个节点中的所有 Pod 只消耗本地 Redis Slave 的数据(我认为很简单)

我为什么想要这样的架构?

  • 我想利用Redis主/从复制来避免自己处理缓存失效问题
  • 我希望对 Redis 缓存进行超低延迟调用,因此每个节点有一个从属设备是我能得到的最好结果(在本地主机网络上调用)

是否可以自动化此类部署(例如使用 Helm)?是否有文档资源可以使这样的架构具有干净的动态主/从绑定/解除绑定?

最重要的是,这种架构对于我想做的事情来说是一个好主意吗?有没有其他方法可以这么快?

kubernetes redis architecture master-slave
1个回答
2
投票

我记得我们之前在这里讨论过这个话题,不用担心在这里添加更多内容。

了解有关 Redis helm 图表的更多信息:https://github.com/bitnami/charts/tree/master/bitnami/redis#choose- Between-redis-helm-chart-and-redis-cluster-helm-chart

您还应该问我的申请将如何进行的问题 连接到同一节点上的 POD 而不使用 Redis 服务。

为此,您可以使用`环境变量并将它们公开给 application POD

类似的东西:

env:
- name: HOST_IP
  valueFrom:
    fieldRef:
      fieldPath: status.hostIP

它将为您提供运行 PODNode IP 的值,然后您可以使用该 IP 连接到 DeamonSet(如果您正在运行 Redis 从机)。

您可以阅读更多内容:https://kubernetes.io/docs/tasks/inject-data-application/environment-variable-expose-pod-information/

是否可以自动化此类部署(例如使用 Helm)?

是的,您可以写下自己的 Helm 图表并部署生成的 YAML 清单。

最重要的是,这个架构对于我想要的东西来说是一个好主意吗? 做?有没有其他方法可以这么快?

如果您认为这是一个好主意,根据我的考虑,这可能会造成 $$$ 问题和更高的集群资源使用率。

如果您运行 200 个节点,每个节点都运行 Redis 从属节点怎么办?这可能会消耗每个节点上的资源并增加您的基础设施的成本。

如果您正在计划特定部署

您的上述建议也很好,但是,如果您打算使用 Redisonly Specific deployment,您也可以使用 sidecar 模式并使用配置将多个 Redis 连接在一起。

apiVersion: v1
kind: Service
metadata:
  name: web
  labels:
    app: web
spec:
  ports:
  - port: 80
    name: redis
    targetPort: 5000
  selector:
    app: web
  type: LoadBalancer    
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: web
spec:
  selector:
    matchLabels:
      app: web
  replicas: 3
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
      - name: redis
        image: redis
        ports:
          - containerPort: 6379
            name: redis
            protocol: TCP        
      - name: web-app
        image: web-app
        env:       
          - name: "REDIS_HOST"
            value: "localhost"
© www.soinside.com 2019 - 2024. All rights reserved.