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

2023-12-22

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

总结:

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

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

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

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

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


我记得我们之前讨论过这个话题here https://stackoverflow.com/questions/70257094/redis-master-slave-on-gcp-memorystore,不用担心在这里添加更多。

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

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

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

就像是 :

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

它会给你带来的价值Node IP其上的POD正在运行,然后您可以使用该 IP 来连接守护进程集(Redis 从机,如果您正在运行)。

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

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

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

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

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

如果您在 200 个节点上运行 Redis 从属节点会怎样?这可能会消耗每个节点上的资源并增加您的成本infra.

OR

如果您正在计划具体部署

您的上述建议也很好,但是,如果您打算使用Redis with 仅具体 部署您还可以使用 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"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • 读者-作者访问多个读者

    在 UNIX 中实现 WRITER READER 问题时 我有一些无法解决的问题 第一个是我不知道如何修改代码才能像线程总是调用进入阅览室一样工作 例如 当作家在阅览室时 读者正在等待进入阅览室 当作家逃离阅览室 读者进入阅览室时 他仍在等
  • 在 DigitalOcean 应用程序平台上为 HTTPS 节点应用程序使用 Let's Encrypt 证书

    我习惯于使用 Docker Express 框架和 https 包在 DigitalOcean 服务器上部署 HTTPS 节点应用程序 如下所示 const https require https const app express con
  • 为什么我的 MIPS 基础转换器在当前值之后打印出前一个循环的值?

    我对 MIPS 很陌生 这让我完全困惑 我编写了一个程序来转换基数 第一次运行时效果很好 但是当它循环时 它会显示先前循环迭代中其他寄存器的值 输出如下 我已经尝试了我能想到的一切 但我没有想法 Enter a decimal number
  • Javascript 的 sort() 是如何工作的?

    下面的代码如何按数字顺序对该数组进行排序 var array 25 8 7 41 array sort function a b return a b 我知道如果计算结果是 小于0 a 被排序为比 b 更低的索引 Zero a 和 b 被认
  • jQuery Mobile 无法刷新可折叠集

    我正在使用 jQuery mobile 创建一个应用程序 并从 wordpress throw jsonp 加载其菜单和页面 我以可折叠集和列表视图的形式加载其菜单 但我不断收到错误 当我尝试通过此代码刷新可折叠集时 childnev ht
  • 如何快速取消多个线程之一

    我有一个启动 3 个异步线程的函数 每个线程都会做一些需要一些时间的事情 当某个线程首先完成时 我需要它来停止其他两个线程 但我不知道该怎么做 还 My code class SomeController UIViewController
  • django、phpmyadmin 和 mysql?

    我想开始使用 Django 和 MYSQL 而不是一直使用 sqlite 但是我使用 MSQL 的唯一经验是通过 XAMPP 通过 phpmyadmin 操作数据库 我真的很想保持与 mysql 的 GUI 交互 而不必通过命令行完成所有操
  • pyinstaller:ModuleNotFoundError:没有名为“cv2”的模块

    我正在尝试创建一个简单的软件 pyinstaller 激活计算机摄像头 但我遇到了错误ModuleNotFoundError No module named cv2 但是 当我使用命令提示符运行相同的代码时 它会按照我想要的方式完美运行 i
  • JVM Hotspot 上的 PrintAssembly 选项已启用,但未显示任何程序集跟踪

    我正在使用 intel i386 Ubuntu 14 OpenJDK 版本信息显示为 java version is java version 1 7 0 65 OpenJDK Runtime Environment IcedTea 2 5
  • Windows 10 inkscape 0.92 中无法识别 libxml

    Inkscape 抱怨没有 libxml 所以我安装了 Windows 10 的 lxml 在修改路径 gt 抖动节点期间它再次抱怨 所以我重新启动了 Inkscape 它仍然在抱怨 有谁知道如何解决这个问题吗 提前致谢 错误 inkex
  • 了解议程组的锁定活动

    我尝试了一个示例来了解锁定活动的工作原理 当我在不使用议程组的情况下触发规则时 一切似乎都很好 但是 当我取消注释下面代码中的议程组并将焦点设置为组 B 组 时 不会触发任何规则 Rule rule Additional Rs 1 tax
  • 在 pandas.DataFrame.query() 表达式中使用负数

    我尝试使用 pandas DataFrame query 函数 如下所示 expression string ColumnName lt 1000 output dataframe dataframe query expression st
  • 将 vline 添加到 geom_密度 和均值 R 的阴影置信区间

    阅读不同的帖子后 我发现如何将均值 vline 添加到密度图 如图所示here http www cookbook r com Graphs Plotting distributions ggplot2 使用上面链接中提供的数据 1 如何使
  • 调用 API 后的 React-redux 导航

    下面是我的减速器代码 import as Helper from utils helper import AppNavigator from Navigation navigationStack const initialState use
  • 在不使用关系代数中的 max 函数的情况下查找两个表之间的最大值

    假设我有两张桌子A int m and B int m 我必须找到最大值m在使用关系代数的两个表之间 但我不能使用 max 函数 我该怎么做 我认为使用 join 我们可以做到这一点 但我不确定我的猜测是否正确 Note 这是一个面试问题
  • 最小的 i 且 1/i == 1/(i+1)?

    Someone reverse sorted by 1 i instead of the usual i and it made me wonder What is the smallest positive integer case wh
  • bash 脚本中 stderr 的临时重定向

    我有一个简单的脚本 用于启动另一个程序 这个其他程序有时可能会产生一个SIGSEGV 这会扰乱我的输出 因此 我添加了几行 应该暂时重定向stderr to dev null使得SIGSEGV被忽略 以下是我的代码草稿 exec 2 gt
  • 具有命名/标记类型的 C# 字典

    我已经搜索了几乎所有地方 甚至不确定这是否可能 但是嘿 我想我会看看你们 C 向导可能有什么解决方案或解决方法 TL DR 我有一个使用 C 字典的多维集合 并且想要指示字典中每个字符串的用途 如下所示 private Dictionary
  • 如何禁用或更改 Ghostdriver.log 的路径?

    问题很简单 但一些内容可能会有所帮助 我正在尝试部署 scrapy 同时使用 selenium 和 phantomjs 作为下载器 但问题是在尝试部署时它一直说权限被拒绝 所以我想更改 Ghostdriver log 的路径或只是禁用它 看
  • Kubernetes 上的 Redis 主/从复制可实现超低延迟

    图表总是比最后的句子更好 所以这就是我想做的 总结 我想要在我的 K8S 集群外部 或内部 这与此无关 有一个 Redis 主实例 我想要一个 Redis 从实例per node复制主实例 我希望在删除节点时 Redis 从属 pod 从主