database - 使用 Kubernetes 在物理机上设置本地持久卷
问题描述
我先声明一下:我是 Kubernetes 的新手,如果我问错了问题,请不要着急。
好的,这就是我要做的。我打算使用一些物理机器为我的项目构建一个 Kubernetes 。
我有 1 台服务器用于主节点和 2 个工作节点。我的服务泊坞窗(pod)将由 Kubernetes master 分配,它们需要存储数据库(MySQL)
。
搜索后,我想出了一个解决方案Persistent Volume
,但我不想使用那些在线云服务,例如Google Cloud或Azure Cloud等。它引导我找到另一个解决方案 -Local Persistent Volume (LPV)
这就是我目前卡住的地方.
问题LPV
在于它与特定节点相连,因此我无法在其他节点上复制(备份)数据库,如果该节点发生问题或物理磁盘出现问题,我将失去所有数据库,对吧?
问题是,是否有任何解决方案可以使用在数据库上设置复制Local Persistent Volume
?例如,我在 Node 1 上有一个数据库,在Node 2上有一个备份版本,所以当Node 1不可用时,Pod 将挂载到Node 2上的备份数据库。
提前致谢!
解决方案
您可以使用节点上的本地卷将数据库部署为 statefulset。只需创建卷并将它们放在 StorageClass 中
对于备份,您需要在数据库级别(而不是卷级别)设置复制到其他集群/其他数据库实例在其他地方/或其他集群上运行。
无论如何,Pod 故障都由 kubernetes 处理,如果不正常,它将重新启动 Pod。
statefulset 中不能处理节点故障(一个节点不能替换另一个节点,换句话说,在 statefulset 中,一个 pod 不会在另一个节点上重新启动,kubernetes 将等待节点回来)
如果您要进行简单的单 pod 部署而不是 statefulset ,您可以将数据库部署为单个 pod 并将另一个实例部署为单个 pod 并使用节点选择器在不同的节点上运行它们,然后在数据库上设置从一个实例到另一个实例的复制level ,并将您的客户端应用程序配置为故障转移到备用实例,以防主实例不可用,这需要同步复制。
链接:
推荐阅读
- amazon-web-services - AWS Auto Scaling 组是否会在终止 EC2 之前关闭它的操作系统?
- html - 视频不在现场播放,但在其他地方播放
- excel - 如何将两个工作表(它们之间具有不同的数据)合并到一个数据透视表中?
- node.js - Socket IO 套接字属性未保存
- unix - 在 ksh shell 脚本中使用 dbisqlc 捕获 Sybase IQ SQL 执行中的错误
- java - Gradle:对构建和测试使用不同的 jre
- python - 如何在谷歌协作笔记本中显示输出?
- node.js - 如何为其他字段的每个值获取字段的不同值?
- docusignapi - 标记的 DocuSign SOAP API 设置默认值
- angular - 角度路由解析器 rxjs