发布者:上海IT外包来源:http://www.lanmon.net点击数:1814
蓝盟IT小贴士,来喽!
不要将数据存储在容器中。 这是Docker的官方容器使用技巧之一。 容器可以随时停止或删除。 当容器落入rm时,容器内的数据将丢失。 为了避免数据丢失,用户可以使用装载数据卷来存储数据。 但是,容器的卷设计以Union FS镜像层为中心提供了永久性存储,不能确保数据的安全性。 如果容器突然崩溃,并且数据库未能成功关闭,则可能会导致数据损坏。 另外,在容器内共享数据卷组对物理机的硬件的损伤也较大。
将Docker数据存储在主机上不能保证数据不会丢失。 Docker volumes旨在以Union FS镜像层为中心提供永久性存储,但尚未得到保证。
使用当前存储驱动程序时,Docker仍然存在不可靠的风险。 如果容器崩溃,并且数据库未正确关闭,则可能会损坏数据。
为了解决性能问题,一些同学可能有相应的解决方案
(1)数据库程序和数据的分离
使用Docker运行MySQL时,需要分离数据库程序和数据,将数据存储在共享存储器中,将程序存储在容器中。 如果容器存在异常或MySQL服务异常,则自动启动新容器。 并且提出了不在宿主机上存储数据,宿主机和容器共享卷组,对宿主机损坏的影响很大。
(2)跑轻量级或分布式数据库
在Docker中部署轻量级或分布式数据库时,建议Docker自动启动新容器,而不是停止服务并重新启动容器服务。
(三)合理布局的适用;
对于i/o密集型应用程序和服务,最好将数据库部署到物理计算机或KVM。 目前,TX云TDSQL和蚂蚁Oceanbase直接位于物理计算机上,而不是Docker上。
要了解Docker网络,您需要深入了解网络虚拟化。 也要防备事故。 如果不受支持或未添加工具,则可能需要修复错误。
我们知道数据库需要专用吞吐量和持久吞吐量来实现更高的负载。 我们还发现容器是虚拟机管理程序和主机虚拟机背后的隔离层。 然而,网络对于数据库的复制是重要的,并且需要主从数据库之间的24/7稳定连接。 版本1.9中未解决的Docker网络问题。
总结这些问题,容器化使得数据库容器的管理变得困难。 我知道你是一流工程师,任何问题都能解决。 但是,解决Docker网络问题需要多长时间? 我们应该将数据库放在专用环境中,以节省时间的方式,专注于真正重要的业务目标。在Docker中打包无状态服务很酷,可以组织容器以解决单点故障。 那么数据库呢? 将数据库放置在同一环境中会导致状态发生并扩大系统故障的范围。 下次应用程序实例或应用程序崩溃时,可能会影响数据库。
知识点在Docker中的水平伸缩仅适用于无状态计算服务,而不适用于数据库。
Docker快速扩展的重要特征之一是无状态,有数据状态的不适合直接放置在Docker上。 如果Docker上安装了数据库,则需要单独提供存储服务。
目前,TX云的TDSQL (金融分布式数据库)和背面云的Oceanbase (分布式数据库系统)直接在物理计算机上运行,并且不使用易于管理的Docker。
分享到: