【问题标题】:Can you scale a StatefulSet horizontally running a relational database in Kubernetes?你可以在 Kubernetes 中水平扩展一个运行关系数据库的 StatefulSet 吗?
【发布时间】:2021-10-28 13:36:47
【问题描述】:

为什么我想要我的数据库的多个副本?

  1. 冗余:我的应用程序代码有 > 1 个副本。为什么?如果一个节点发生故障,另一个节点可以在负载均衡器后面运行时填补其位置。
  2. 负载:负载平衡器可以将流量分配到应用的多个实例。
  3. A/B 测试。我可以让一个节点提供一个版本的应用,而另一个提供不同的版本。
  4. 维护。我可以关闭一个实例进行维护,并在停机时间为 0 的情况下保持另一个实例。

所以,如果可能的话,我想我也想对后备数据库做同样的事情。

我意识到许多 nosql dbs 更好地配置为多个实例,但我对关系 dbs 感兴趣。

我与 thisthis 等运营商合作过,但发现文档存在问题,无法启动并运行它们,并且发现社区有点缺乏。在生产中依赖这种东西让我很紧张。 Mysql 操作符甚至有一个注释,说它不是用于生产的。

我看到原生 k8s statefulsets have scaling 但这些文档根本不特定于 dbs。我认为复杂之处在于 dbs 需要通过卷持续写入磁盘,并且如果您有多个实例,则必须以某种方式同步和路由数据。

那么,我自己做这件事是不是很重要?或者,我最好有一个在集群中使用单副本数据库映像的开发环境以节省计费,以及一个使用完全托管数据库的生产环境,例如 this 负责扩展/哈为我?然后我会使用 kustomize 来管理 yaml 差异。

编辑

我实际上发现了一个很好用的 postgres 运算符。遵循文档一次,一切正常,来自postgres docs

【问题讨论】:

  • 不要将 pvc 共享给多个数据库实例。即使您使用正确的后备卷(它必须是基于对象的存储才能进行多次读写),如果具有足够的扩展性,性能也会受到影响(毕竟,所有内容都集中在一个文件系统上,这将造成压力财政司司长)。正确的方法是配置集群。所有主要的关系数据库(mssql、mysql、postgres、oracle、...)都支持集群。但是,为了安全起见,我建议您购买“即服务”的可扩展数据库,除非您确切知道自己在做什么。
  • 对,这就是我的假设。所以你说的是一个好的解决方案可能是使用单个副本 StatefulSet 进行开发,以避免计费并在产品中使用完全托管的基于云的 sql 解决方案?
  • 是的。除非您具备部署集群 dbms 的知识或足够专业的操作员。
  • 添加这个作为答案,我会接受它
  • 还有 Turing85,如果您将 StatefulSet 用于数据库但不考虑集群,那么您永远不应该通过将副本提高到 > 1 来扩展它,对吗?

标签: database kubernetes crunchy-postgresql-operator


【解决方案1】:

我创建了这个社区 wiki 答案来总结主题并使相关信息更加可见。

正如评论中提到的Turing85

不要将 pvc 共享给多个数据库实例。即使您使用正确的后备卷(它必须是基于对象的存储才能进行多次读写),如果具有足够的扩展性,性能也会受到影响(毕竟,所有内容都集中在一个文件系统上,这将造成压力财政司司长)。正确的方法是配置集群。所有主要的关系数据库(mssql、mysql、postgres、oracle、...)都支持集群。不过,为了安全起见,我建议您购买“即服务”的可扩展数据库,除非您确切知道自己在做什么。

好的解决方案可能是使用单个副本 StatefulSet 进行开发,以避免计费,并在 prod 中使用基于云的完全托管的 sql 解决方案。除非您具备部署集群 dbms 的知识或足够专业的操作员。

另一种解决方案可能是使用与Aaron 不同的运算符:

我实际上发现了一个很好用的 postgres 运算符。遵循文档一次,一切正常,它来自 postgres:https://www.kubegres.io/doc/getting-started.html

另见this similar question

【讨论】:

  • 我遇到了第一个关于 kubegres 的问题,在问题队列中提出了一个问题。我希望得到一个答案,这将告诉我,也许这个操作符可以用于关键任务项目。
猜你喜欢
  • 2010-09-07
  • 2015-01-25
  • 2017-05-29
  • 1970-01-01
  • 2012-09-28
  • 1970-01-01
  • 1970-01-01
  • 2020-04-29
  • 1970-01-01
相关资源
最近更新 更多