我有一个运行多个应用程序(服务)的 Kubernetes 环境。现在我有点困惑如何设置 MySQL 数据库实例。
根据不同的来源,每个微服务都应该有自己的数据库。我应该在 HA 模式下创建一个运行多个数据库的单个 MySQL 状态集,还是应该为每个运行一个数据库的应用程序(服务)部署一个单独的 MySQL 实例。
我的第一个想法是第一个选择,因此 HA 应该在哪里有用?想听听一些不同的看法。
我有一个运行多个应用程序(服务)的 Kubernetes 环境。现在我有点困惑如何设置 MySQL 数据库实例。
根据不同的来源,每个微服务都应该有自己的数据库。我应该在 HA 模式下创建一个运行多个数据库的单个 MySQL 状态集,还是应该为每个运行一个数据库的应用程序(服务)部署一个单独的 MySQL 实例。
我的第一个想法是第一个选择,因此 HA 应该在哪里有用?想听听一些不同的看法。
有点主观的问题,但这是我们设置的。希望这将帮助您建立案例。我相信有人会有不同的意见,这也可能同样有效:
我们部署了大约 70 个微服务,每个微服务都有自己的数据库(“模式”)和自己的 JDBC URL(通过服务定义)。每个微服务都有自己的端点和凭证,我们不会在微服务之间共享。所以实际上,就架构而言,我们保持设计在微服务中完全独立。
然而,在部署方面,我们选择使用单个数据库实例来托管所有数据库(或“模式”)。虽然从技术上讲,我们可以将每个数据库部署在其自己的数据库实例上,但出于以下几个主要原因,我们选择不这样做:
因此,我的建议是使用单个数据库实例(Docker 或其他),但保持数据库/模式完全独立,并且除“所有者”微服务之外的任何微服务都无法访问。
如果您将 MySQL 部署为 Docker 容器,请使用 aStatefulSet
以实现持久性。定义一个外部pvc
,以便您始终可以保留数据,无论您的 pod 甚至您的集群发生什么。当然,如果您运行“主动-主动”,则需要确保节点之间的集群,但我们确实以“主动-被动”模式运行它,因此我们将replica
计数保持为 1,因为我们只使用 MySQL Docker 容器替代方案为我们的测试环境节省不需要的外部 DBaaS 服务的成本。