阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

在Docker和Kubernetes上运行MongoDB微服务

268次阅读
没有评论

共计 2605 个字符,预计需要花费 7 分钟才能阅读完成。

导读Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

 在 Docker 和 Kubernetes 上运行 MongoDB 微服务

本文介绍了利用 Docker 和 Kubernetes 搭建一套具有冗余备份集合的 MongoDB 服务,从容器对 CI 和 CD 引发的改变入手,讨论了容器技术对 MongoDB 带来的挑战和机会,然后实战如何部署一套稳定的 MongoDB 服务,非常的干货~

介绍

想尝试在笔记本电脑上运行 MongoDB 么? 希望通过执行一个简单的命令,然后就有一个轻量级、自组织的沙盒么? 并可再通过一条命令就可以移除所有的痕迹么?

需要在多个环境中运行相同的应用程序栈? 创建自己的容器镜像,使得开发、测试、操作和支持团队启动一份完全相同的环境。
容器正在改变整个软件生命周期; 它覆盖了从最初的技术试验到通过开发、测试、部署和支持的概念证明。
阅读微服务:容器和编排白皮书(https://www.mongodb.com/collateral/microservices-containers-and-orchestration-explained)。

编排工具管理着多个容器如何创建、升级和高可用。编排同样管理着容器如何连接,并利用多个微服务容器创建稳定的应用服务。
丰富的功能、简单的工具、强大的 API 让容器和编排得到 DevOps 团队的青睐。DevOps 工程师将它们整合到持续集成 (CI) 和持续交付 (CD) 工作流中。

本篇文章将探索在尝试运行和编排 MongoDB 容器时遇到的问题,并描述如何克服这些问题。

对于 MongoDB 的思考

采用容器和编排运行 MongoDB 带来了一些新的思考:
MongoDB 数据库节点是有状态的。若一个容器挂了,并且被重新编排,数据丢失是不能接受的 (虽然它可以从其他节点中恢复数据,但是很费时)。为解决这个问题,Kubernetes 中的卷抽象(Volume abstraction) 特性将用于映射 MongoDB 数据文件夹到一个持久化地址,避免容器的失败或重编排。

同一组 MongoDB 数据库备份节点之间需要通信,即使是在重编排之后。同一冗余备份集合的节点必须知道全部其他节点的地址,但是当某个容器重编排之后,它的 IP 地址会变化。例如,所有 Kubernetes 内的容器共享一个 IP 地址,当 pod 被重编排之后这个地址就会改变。在 Kubernetes 中,这个问题可以通过联系 Kubernetes 服务与 MongoDB 节点来解决,采用 Kubernetes 的 DNS 服务提供主机名给重编排之后的服务。

一旦每个独立的 MongoDB 节点 (每个节点在单独容器中) 启动起来,备份集合必须初始化,并把每个节点加入进来。这需要编排工具提供额外的逻辑。特别是备份集合中只有一个 MongoDB 节点时,必须执行 rs.initiate 和 rs.add 命令。
如果编排框架提供自动化重编排容器功能(如 Kubernetes 的特性),那么这可以提高 MongoDB 的容灾性,节点会在挂掉之后自动重新创建,恢复到完整冗余水平且不需要人工干预。

当编排框架掌控所有容器的状态时,它并不管理容器内的应用或者备份数据。这就意味着采用一个有效的管理和备份方案很重要,如 MongoDB Cloud Manager,包括 MongoDB Enterprise Advanced 和 MongoDB Professional 两部分。考虑到需要创建镜像,可采用你倾向的 MongoDB 版本和 MongoDB Automation Agent。

利用 Docker 和 Kubernetes 实现 MongoDB 冗余备份

如前一节所述,MongoDB 这类分布式数据库在利用编排框架 (如 Kubernetes) 进行部署时需要额外考虑。本节将对这部分细节进行分析,并介绍如何实现。

首先,我们在一个单独的 Kubernetes 集群 (同一个数据中心内,并不存在物理上的冗余备份) 中创建整个 MongoDB 冗余集合。如果跨多个数据中心进行创建,其步骤也差异不大,后续将会介绍。
备份中的每个成员都运行在独自的 pod 中,只暴露其 IP 地址和端口。固定的 IP 地址对于外部应用和其他冗余备份节点非常重要,它决定了哪些 pod 将被重新部署。

下图展示了其中一个 pod 与关联的冗余控制器和服务的关系。

在 Docker 和 Kubernetes 上运行 MongoDB 微服务

深入这些配置中描述的资源,内容如下:

阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

代金券:在阿里云专用满减优惠券

下图展示了冗余备份及中的另一个成员信息:

在 Docker 和 Kubernetes 上运行 MongoDB 微服务

90% 的配置是相同的,只有几处不同:

阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

代金券:在阿里云专用满减优惠券

第三个冗余备份成员的配置仿照上述的模式进行,下图展示了完整的冗余配置集合:

在 Docker 和 Kubernetes 上运行 MongoDB 微服务

注意,即使配置如图 3 一样,在一个三个或者多个节点的 Kubernetes 集群上,Kubernetes 可能会调度两个或者多个 MongoDB 冗余备份成员在同一个宿主机上。这是因为 Kubernetes 将三个 pod 视为三个独立的服务。

为了增加冗余,需要创建一个额外的 headless 服务。该服务不具备提供外部服务的能力,甚至没有外部 IP 地址,但是它用于通知 Kubernetes 这三个 MongoDB Pod 是属于同一个服务,于是 Kubernetes 会将它们调度在不同的节点上。

在 Docker 和 Kubernetes 上运行 MongoDB 微服务

具体的配置文件和相关操作命令可以从《启动微服务:容器 & 调度说明白皮书》中找到。其中包含了三个特殊的步骤确保合并三个 MongoDB 到一个功能中,即本文中描述的冗余备份。

多个可用区域 MongoDB 冗余集合

所有冗余部件均运行在同一个 GCE 集群上时具有很高的风险,在同一个 zone 的集群也一样。如果发生一个重大事件导致可用 zone 离线,那么 MongoDB 冗余集合也就不可用。如果需要地理上的冗余备份,那么三个 pod 需要运行在不同的 zone 内。

只需要很少的改动就可以创建这样一个冗余备份集合。每一个集群需要独自的 Kubernetes YAML 文件来定义 pod、冗余控制器和服务。然后,就可以完成一个 zone 的集群创建、持久化存储和 MongoDB 节点。

下图展示了运行在不同 zone 上的冗余结合:

在 Docker 和 Kubernetes 上运行 MongoDB 微服务

阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

代金券:在阿里云专用满减优惠券

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-07-24发表,共计2605字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19348
评论数
4
阅读量
7801836
文章搜索
热门文章
开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南 大家好,我是星哥。之前介绍了腾讯云的 Code...
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板 1Panel:小白轻松构建 Web 服务与面板加固指南 哈喽,我是星哥,经常有人问我不...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
如何免费使用强大的Nano Banana Pro?附赠邪修的用法

如何免费使用强大的Nano Banana Pro?附赠邪修的用法

如何免费使用强大的 Nano Banana Pro?附赠邪修的用法 前言 大家好,我是星哥,今天来介绍谷歌的 ...
开源神器组合!1Panel面板+Halo助你轻松打造个人/企业内容中心

开源神器组合!1Panel面板+Halo助你轻松打造个人/企业内容中心

开源神器组合!1Panel 面板 +Halo 助你轻松打造个人 / 企业内容中心 前言 大家好,我是星哥,之前...
三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

  三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Andr...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你 为什么要用宝塔跑分? 宝塔跑分其实就是对 CPU、内存、磁盘、IO 做...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
星哥带你玩飞牛NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手!

星哥带你玩飞牛NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手!

星哥带你玩飞牛 NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手! 作为动漫爱好者,你是否还在为...
星哥带你玩飞牛NAS硬件02:某鱼6张左右就可拿下5盘位的飞牛圣体NAS

星哥带你玩飞牛NAS硬件02:某鱼6张左右就可拿下5盘位的飞牛圣体NAS

星哥带你玩飞牛 NAS 硬件 02:某鱼 6 张左右就可拿下 5 盘位的飞牛圣体 NAS 前言 大家好,我是星...
还在找免费服务器?无广告免费主机,新手也能轻松上手!

还在找免费服务器?无广告免费主机,新手也能轻松上手!

还在找免费服务器?无广告免费主机,新手也能轻松上手! 前言 对于个人开发者、建站新手或是想搭建测试站点的从业者...
手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板 前言 大家好,我是星哥。星哥发现很多新手刚接触服务器时,都会被“选购...
零成本上线!用 Hugging Face免费服务器+Docker 快速部署HertzBeat 监控平台

零成本上线!用 Hugging Face免费服务器+Docker 快速部署HertzBeat 监控平台

零成本上线!用 Hugging Face 免费服务器 +Docker 快速部署 HertzBeat 监控平台 ...