本文详细介绍了在docker容器中部署数据库的弊端,帮助大家更好地了解和学习、训练docker容器和数据库,让有兴趣的盆友掌握。
序言
Docker在过去两年里非常流行,开发人员讨厌他们不能将所有的应用程序和手机软件部署在Docker容器中,但您确定也要将数据库部署在容器中吗?
这个问题不是空。由于你可以在网上找到很多种 *** 作指南和教程视频,我整理了一些数据库不适合容器化的原因,供你参考。另外,希望大家在应用的时候能够谨慎一些。
到目前为止,将数据库容器化是非常不科学的,但容器化的优势坚信所有开发者都会从中受益,我们期待随着技术发展趋势出现更多的极端解决方案。
Docker不应该部署数据库的七个理由
1。数据安全风险
不需要将数据存储在容器中,这是Docker官网上使用容器的提示之一。容器可以随时随地被终止或删除。当rm丢弃容器时,容器中的数据可能会丢失。为了更好地防止数据丢失,客户可以应用数据卷初始化来存储数据。但是容器的卷设计方案是围绕UnionFS的镜像系统层显示长期存储,数据安全性没有保证。如果容器突然崩溃,数据库没有正常关闭,很可能会破坏数据。此外,容器内资源数据卷组的共享对物理机的硬件配置也是有害的。
即使你需要把Docker数据放在服务器上存储,它仍然不能保证你不丢失数据。Dockervolumes的设计方案侧重于UnionFS镜像系统层来展现长期存储,但仍然缺乏保障。
用现在的存储驱动软件,Docker还是有不靠谱的风险。如果容器崩溃,数据库没有正确关闭,很可能会破坏数据。
2。特征问题
众所周知,MySQL属于关系数据库,IO规定很高。一台物理机运行几次,IO就会积累,造成IO短板,大大降低MySQL的读写能力。
在一次docker应用十大问题的仪式上,某国有商业银行的系统架构师也明确表示:“数据库特性的缺点一般出现在IO上。如果按照Docker的想法,那么存储上会出现几个Docker最后的IO需求。目前,互联网技术的数据库大多是无共享的框架。很有可能这不是转Docker的要素。”
目的一些学生可能有相应的计划来处理成绩问题:
(1)数据库程序流与数据分离。
如果用Docker运行MySQL,数据库程序流和数据必须分离,数据存放在共享资源存储中,程序流存放在容器中。如果容器异常或者MySQL服务异常,自动启动新的升级容器。此外,建议不必将数据存储在主机中,主机和容器共享资源卷组,这对主机的破坏是有害的。
(2)运行轻量级或分布式系统数据库。
Docker部署了一个轻量级或者分布式的系统数据库,Docker本身强烈建议挂起服务,自动启动新的容器,而不是再次重启容器服务。
(3)布局调整与应用
对于具有高IO需求的应用程序或服务,将数据库部署在物理机或KVM中更合适。目前TXCloud的TDSQL和阿里巴巴的Oceanbase都是马上部署在物理设备中,而不是Docker。
3。网络问题
要了解Docker互联网,必须对互联网虚拟化技术有很深的了解。一定要提前做好准备,以适应突发情况。很有可能你不得不在没有应用或者附加特殊工具的情况下进行bug恢复。
我们知道:数据库必须是专用的和长期的货运量,才能完成更高的负荷。您还知道,容器是虚拟机管理进程和服务器虚拟机背后的隔离层。众所周知,互联网对于数据库复制尤为重要,其中主从数据库之间的24/7平滑连接是必不可少的。未处理的Docker网络问题在1.9版本中仍然没有得到处理。
将这些问题放在一起,容器化使得管理数据库容器变得困难。因为你是顶尖的技术工程师,你可以处理所有的问题。然而,你需要花多少时间来处理Docker网络问题?把数据库放在专用的自然环境中不是更简单更强大吗?节省时间和精力,专注于真实和关键业务流程的总体目标。
4。情况
在Docker中封装无状态服务很帅,可以完成编辑容器,处理服务器宕机问题。但是数据库呢?如果把数据库放在同一个自然环境中,可能会出现状况,使系统异常的类别更高。下次您的应用软件实例或应用软件崩溃时,很可能会损害数据库。
知识要点:在Docker中,级别可伸缩性只用于无状态测量服务,不用于数据库。
Docker快速扩张的一个关键特点就是无状态,所有可用的数据都不应该立即放入Docker。如果Docker中安装了数据库,存储服务必须独立呈现。
目前TXCloud的TDSQL(金融行业分布式数据库)和阿里云服务器的Oceanbase(分布式系统数据库系统软件)都是在物理设备上即时运行,而不是在Docker上,方便应用和管理。
5。资源保护
论资源保护水平,Docker比不上vmKVM。Docker使用Cgroup来限制资源,只限制资源消耗的最高值,不能阻止其他程序进程占用自己的资源。如果其他连接占用物理机资源,可能会危及MySQL在容器中读写能力的高效率。
您必须拥有的隔离级别越多,资源成本就越大。与专用的自然环境相比,Docker的一大优势是非常容易水平伸缩。众所周知,在Docker中,水平伸缩服务只用于无状态测量服务,数据库并不适用。
你还没有看到对数据库的所有保护,那么你为什么要把它放在容器中呢?
6。云服务平台不适用
大多数人只是基于现有的云开始新的项目。云简化了vm虚拟机实际 *** 作和更换的多样性,所以不需要在晚上或者周日没人上班的时候检查新的硬件配置。当我们可以快速启动一个实例时,为什么还要担心这个实例工作的自然环境呢?
这就是为什么人们会花很多钱给云服务提供商。当我们为实例放置数据库容器时,上面提到的便利就不存在了。由于数据不匹配,新实例不容易与当前实例兼容。如果想把实例应用限制在单机服务,应该让DB应用非容器化的自然环境。你只需要保留测量服务层的可扩展工作能力。
7。数据库 *** 作的自然环境要求
随处可见DBMS容器和其他服务运行在同一个服务器上。众所周知,这种服务的硬件配置规定大相径庭。
数据库(尤其是关系数据库)对IO的要求更高。通用数据库模块应用特殊的自然环境,以更好地防止高并发资源的市场竞争。如果将数据库放在容器中,它将消耗新项目的资源。因为您必须为这个实例配备许多额外的资源。在云计算平台上,如果你必须运行34G内存,你启动的实例必须运行64G内存。实际上,这种资源并没有得到充分的利用。
怎么解决?您可以分层设计方案,并应用固定资源在不同级别启动几个实例。水平伸缩总是比垂直伸缩强。
摘要
上述问题是否意味着数据库不必部署在容器中?
回答:不尽然。
我们可以将对数据丢失不敏感的业务流程(检索和嵌入)数字化,使用数据库块增加实例数量,从而增加货运量。
Docker适合运行轻量级或分布式系统数据库。当docker服务挂起时,它会自动启动一个新的容器,而不是再次重启容器服务。
数据库分布式数据库和集装化系统软件可以全自动伸缩,容灾备份,转换,内置多个连接点,也可以进行集装化。
以上是在docker容器中部署数据库的弊端的详细内容。关于Docker不适合数据库部署的大量资料,请关心其他相关文章!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)