让我先声明一下:我是 Kubernetes 的新手,如果我问错了问题,请放轻松。
好的,这就是我要做的。我计划使用一些物理机器为我的项目构建一个 Kubernetes。
我有 1 个主节点服务器和 2 个工作节点。我的服务docker(pods)将由Kubernetes master分配,它们将需要存储数据库(MySQL)
。
搜索后,我想出了一个解决方案Persistent Volume
,但我不想使用那些在线云服务,例如谷歌云或Azure云等。它引导我找到另一个解决方案 -Local Persistent Volume (LPV)
,这是我目前坚持的地方。
LPV
的问题在于它附加了一个特定的节点,所以我将无法在其他节点上复制(备份)数据库,如果这个节点出现问题,或者物理磁盘出现问题,我将丢失所有数据库,对吧?
问题是,是否有任何解决方案可以使用Local Persistent Volume
在数据库上设置复制?例如,我在节点 1 上有一个数据库,在节点2上有一个备份版本,所以当节点 1不可用时,Pod 将挂载到节点 2上的备份数据库。
提前感谢!
-
您可以使用节点上的本地卷将数据库部署为 statefulset。只需创建卷并将它们放入存储类
-
对于备份,您需要在数据库级别(不是卷级别)设置复制到其他集群/在其他地方运行的其他数据库实例/或在其他集群上。
-
无论如何,Pod 失败是由 kubernetes 处理的,如果出现问题,它将重新启动 pod。
-
节点故障无法在 statefulset 中处理(一个节点不能替换另一个节点,换句话说,在 statefulset 中一个 pod 不会在另一个节点上重启,kubernetes 会等待节点回来)
-
如果您要进行简单的单 pod 部署而不是 statefulset,您可以将数据库部署为单个 pod,将另一个实例部署为单个 pod,并使用节点选择器在不同的节点上运行它们,然后在数据库级别设置从一个实例到另一个实例的复制,并将您的客户端应用程序配置为在主实例不可用的情况下故障转移到回退实例, 这需要是同步复制。
链接:
运行单实例有状态应用程序 ( MYSQL)
运行复制的有状态应用程序 ( MYSQL )