我使用 DEPLOYMENTS 在 kubernetes 中部署了我的 java Web 应用程序,并且能够对其进行扩展并将其连接到数据库 POD,但后来我也想扩展数据库,但正如您所知,在 kubernetes 中是不可能的,并且不建议将 MYSQL REPLICA 用于生产. 所以我尝试了 vitess 并能够扩展我的数据库,但不知道我应该如何或在哪里创建我的 java web 应用程序 DEPLOYMENTS/REPLICAS 并通过 vtgate 将它们连接到数据库。还有另一种通过 kubernetes 扩展 mysql 数据库的方法吗?
1 回答
需要注意的是,Vitess 不是一个透明代理,您可以在连接级别在应用程序和 MySQL 之间插入它。Vitess 将一组 MySQL 服务器变成一个集群数据库,它要求您针对 Vitess 驱动程序而不是普通的 MySQL 驱动程序构建您的应用程序。
如果您已经在使用 JDBC,那么除了连接管理之外,您不需要进行大量代码更改,因为有JDBC 接口的 Vitess 实现。但是,Vitess 可能还不支持某些查询构造,因此您可能需要将它们重写为受支持的等效形式。
一旦您的应用程序与 Vitess 兼容,在 Kubernetes 中部署它的方式将与您之前所做的相同,除了您将指向应用程序 pod通过 DNS 连接到 VTGate 服务。
至于其他在没有 Vitess 的情况下在 Kubernetes 中扩展 MySQL 的方法,Kubernetes 1.5 中有一个重要的新功能进入 Beta 版,称为 StatefulSet,它将帮助您扩展 MySQL 等数据库,类似于 Deployment 可以扩展无状态 Pod 的方式。通过利用 StatefulSet,Vitess 本身也将更方便地在 Kubernetes 中进行扩展。
但是,使用纯 MySQL 的 StatefulSet 主要只能通过增加从属设备的数量来帮助您扩展只读流量。如果您需要扩展写入流量,您可能需要实现应用程序定义的分片。到那时,您的应用程序所需的更改几乎肯定会比您修改它以支持 Vitess 多得多。