我计划在我的kubernetes集群上部署HA数据库集群。我是数据库的新手,我对各种数据库术语感到困惑。我已经决定使用MariaDB,我已经找到了两个图表,MariaDB和MariaDB Galera Cluster。
我知道两者都可以达到相同的目标,但两者之间的主要区别是什么?在什么情况下我应该使用两者之一?
提前感谢!
我不是专家,所以请谨慎对待我的解释(并仔细检查)
MariaDB的图表和MariaDB Galera集群的图表之间的主要区别是,第一个将部署标准的主从(或主-从)数据库,而第二个是一个弹性的主-主(或主-主)数据库集群。
它的详细含义如下:
MariaDB图将部署一个MasterStatefulSet和一个SlaveStatefulSet这将产生(默认值)一个主Pod和2个从Pod。一旦您的数据库启动并运行,您就可以连接到主服务器并写入或读取数据,然后在从服务器上复制这些数据,这样您就有了可用的数据的安全副本。
副本可用于读取数据,但只有主Pod可以向数据库写入新数据。如果飞船坠毁…或者运行Pod的Kubernetes集群节点发生故障,您将无法写入新数据,直到主Pod再次启动并运行(这可能需要人工干预)。或者如果执行故障转移,将其他pod中的一个提升为新的临时主服务器(这也需要手动干预或使用代理或虚拟ip等进行一些设置)。
星系图相反,他们将部署更有弹性的东西。使用默认值,它将创建单个StatefulSet有3个豆荚…每个pod都可以读取和写入数据,实际上就像一个主人。
这意味着如果其中一个pod因为任何原因停止工作,其他2个将继续为数据库服务,就像什么都没有发生一样,使整个事情更有弹性。当Pod(停止工作)重新启动并运行时,它将从其他Pod获取新的/不同的数据,从而同步。
为了换取整个基础设施的弹性(如果Galera集群解决方案能够提供极端的弹性而没有缺点,那就太容易了),多主应用程序中有一些缺点,更多的共同点是操作中增加了一些延迟,需要保持所有内容同步和一致。而且增加了复杂性,这往往会带来麻烦。
Galera Cluster还有其他一些限制,比如表的显式锁不能工作,或者所有表必须声明一个主键。你可以在这里找到完整的列表(https://mariadb.com/kb/en/mariadb-galera-cluster-known-limitations/)在这两种解决方案之间做出决定主要取决于以下问题:
- 您是否有必要,如果您的Kubernetes集群节点中的一个发生故障,数据库继续工作(并且可以被您的应用程序使用),就像什么都没有发生一样,即使它的一个pod正在该特定节点上运行?