前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >蓝鲸7.0-CMDB--MongoDB 备份与同步

蓝鲸7.0-CMDB--MongoDB 备份与同步

作者头像
腾讯蓝鲸助手
发布2023-08-24 11:03:50
6030
发布2023-08-24 11:03:50
举报
文章被收录于专栏:蓝鲸智云蓝鲸智云

本文来自腾讯蓝鲸智云社区用户:fadwalk

前言

蓝鲸的配置平台(CMDB)底层使用的是 Mongodb 作为数据存储,其优点不用多说,相信使用过的小伙伴应该都会觉得设计很灵活方便。

但是蓝鲸的容器版本的 mongo 部署的是单点的版本,这个在测试环境的话单节点问题不大。

但是如果后续在生产环境的话,单个节点的 mongodb 还是不太保险,存在单节点故障的问题。

因此我们考量到生产数据的安全容灾问题,更希望使用mongo集群,并且数据除了有冷备,还要有跨中心的热备功能。

有了这些想法和需求后,接下来我们就开干。

MongoDB 高可用

蓝鲸的mongodb 使用的是bitnami 社区打包的helm chart 版本,之前接触比较少的小伙伴可以了解下。(bitnami.com)https://bitnami.com/

Bitnami是一个开源的软件打包和部署工具,旨在简化应用程序的安装和管理过程。它提供了预配置的软件堆栈、虚拟机和容器映像,包括许多流行的开源应用程序和开发环境,如WordPress、Drupal、Joomla、LAMP(Linux、Apache、MySQL、PHP)等等。

其实在部署的时候,你查看 yaml.gotmpl 会发现 helmfile 文件里面,蓝鲸的每个中间件的 yaml 模板文件都预留了自定义的参数文件路径,用户可以进行自定义配置。

image.png
image.png

/environments/default/mongodb-custom-values.yaml.gotmpl 这个路径是默认没有的,用户如果需要有自定义的配置需要手动创建

创建之后,你可能会问我应该传什么参数,在配置文件里面写什么才能开启MongoDB的复制集群,别急接下来我们就介绍如何去查找参数配置。当我们从蓝鲸下载的安装文件包后,在chart目录下面的很多都是tar.gz 文件包,蓝鲸安装的时候,都会去引用这些都是chart包。

我们可以将 MongoDB 的 chart 包解压,解压之后里面有一个values 的文件,这个文件就是chart包启动的参数配置,我们可以打开看一下里面的参数是怎么写的,

可以看到有 architecture: standalone 这个字段,默认是单点的,还有一种是复制集的模式(这种事有容灾的)。

知道了参数的配置,我们并非要在这里直接去改 values 文件里面的值,容易改乱,上面我们不是介绍了留的那个自定义配置的钩子嘛,我们在那里面去添加。

image.png
image.png

下面的参数是副本集的配置

image.png
image.png
代码语言:txt
复制
vim ./environments/default/mongodb-custom-values.yaml.gotmpl

architecture: replicaset 
replicaCount: 2  # 根据你的需求来设置
nodeSelector: 
  app: mongodb # 这里 将MongoDB的pod调度到 app:mongodb 标签的节点
affinity: {} # 亲和性,根据需要设置
tls: # 客户端的tls 证书,根据需要进行配置。demo 参考上面values 里面的解释
  xxx

在对mongodb单个组件进行操作的时候,建议创建一个只有mongodb的模板文件。

代码语言:txt
复制
bases:
  - env.yaml
---
bases:
  - defaults.yaml
---
commonLabels:
  tier: storage

releases:
  - name: bk-mongodb
    namespace: {{ .Values.namespace }}
    chart: ./charts/mongodb-{{ .Values.version.mongodb }}.tgz
    missingFileHandler: Warn
    version: {{ .Values.version.mongodb }}
    condition: bitnamiMongodb.enabled
    values:
    - ./environments/default/mongodb-values.yaml.gotmpl
    - ./environments/default/mongodb-custom-values.yaml.gotmpl

helmfile -f mongo.yaml.gotmpl sync

这样就只会对mongodb这个组件进行部署。

当然如果你有老的数据的话,升级前最好对数据做一个备份,防止升级为集群模式后数据异常。

查看部署后的 Mongodb的 pod,发现不再是单节点的

image.png
image.png

MongoDB 数据同步

关于mongodb 的数据同步下面提供一下的几种思路,大家可以结合自己的业务,选择合适的去实现落地。

集群内数据同步

这种适合同集群不同节点,或者网络延迟不大的同城数据中心。

在 MongoDB 中,可以通过复制集群(Replica Set)来实现数据的自动同步和冗余备份。复制集群包含多个 MongoDB 实例(节点),其中一个节点被选举为主节点(Primary),其余节点则为次要节点(Secondary)。数据会自动在主节点和次要节点之间进行同步。

要设置 MongoDB 复制集群并实现数据同步,请按照以下步骤进行操作:

部署 MongoDB 实例:在每个节点上安装和配置 MongoDB。确保每个节点的配置文件中包含相同的复制集群名称(replica set name)。

初始化主节点:选择其中一个节点作为初始主节点。在该节点上启动 MongoDB,并使用 rs.initiate() 命令初始化复制集群。

代码语言:txt
复制
rs.initiate()
添加次要节点:连接到主节点的 MongoDB 实例,并使用 rs.add() 命令逐个添加次要节点。

rs.add("<secondary-node-host>:<port>")
例如:

rs.add("secondary1.example.com:27017")
rs.add("secondary2.example.com:27017")

这将将次要节点添加到复制集群中,并开始进行数据同步。

检查复制集群状态:可以使用 rs.status() 命令来查看复制集群的状态,确认节点的角色和数据同步情况。

rs.status()

在输出中,你将看到有关每个节点的详细信息,包括节点的角色、健康状况和复制进度等。

数据备份(冷备)

在 MongoDB 中,可以使用 mongodump 工具进行备份数据。mongodump 工具可以将 MongoDB 数据库中的数据导出为 BSON 文件(二进制 JSON),以便后续进行恢复或迁移。

以下是使用 mongodump 进行数据备份的基本步骤:

打开命令行终端或命令提示符窗口。

运行 mongodump 命令,并指定要备份的 MongoDB 实例的连接信息和其他选项。

代码语言:txt
复制
mongodump --host <hostname> --port <port> --username <username> --password <password> --authenticationDatabase <authDatabase> --db <database> --out <outputDirectory>

<hostname>:MongoDB 实例的主机名或 IP 地址。
<port>:MongoDB 实例的端口号,默认为 27017。
<username>:连接 MongoDB 实例所需的用户名。
<password>:连接 MongoDB 实例所需的密码。
<authDatabase>:用于进行身份验证的数据库名称。
<database>:要备份的数据库名称。
<outputDirectory>:指定备份文件的输出目录。

例如,如果要备份名为 "mydatabase" 的数据库,并将备份文件保存在当前目录下的 "backup" 文件夹中,可以运行以下命令:

mongodump --host localhost --port 27017 --username myuser --password mypassword --authenticationDatabase admin --db mydatabase --out ./backup

mongodump 命令将开始备份过程,并将数据导出到指定的输出目录中。备份过程可能需要一些时间,具体取决于数据库的大小和网络连接的速度。

备份完成后,你将在指定的输出目录中找到备份文件。备份文件以数据库名称命名,包含数据和索引的 BSON 文件。

这种方式是冷备,可以在每天晚上写个crontab 定时执行。

跨集群复制集同步(热同步)

如果你的业务建设的DR容灾机房,希望将生产的蓝鲸的配置平台热同步到备的数据集群(蓝鲸容灾集群的配置平台),对于跨数据中心的异地不建议使用第一种方式那种来做数据同步,防止其他节点同步将主数据中心的节点拖垮。

而且使用第一种的方式会存在跨网络集群,mongodb的节点添加困难,当然有的小伙伴可能会使用hostnetwork 将mongodb的端口映射到主机节点(这种方式我试过,主数据中心的主mongodb添加后无法获取状态),而且这种相当于是跨数据中心的mongodb集群,对网络延迟要求会比较的高。

其实理解mongodb的原理的小伙伴应该都知道mongodb的主从复制其实是通过oplog来实现的(类似mysql的binlog),如果我们借助oplog将主数据中心的mongodb的oplog 写到容灾数据中心的mongodb集群节点,那么就可以实现主备数据中心的mongodb的数据同步。你可能会说我不会去同步oplog,有没有现成的工具,当然有的哈。

这里介绍一下MongoShake这款开源工具(阿里云开源的,感谢开源社区)。

简介:MongoShake是一个用于MongoDB数据复制和同步的开源工具。它提供了高性能和可靠的数据迁移、备份和同步解决方案。

下面是一些关键特点和用途:

数据复制和同步:MongoShake可以在不同的MongoDB实例之间进行数据复制和同步。它支持单向复制和双向同步,可以确保源和目标之间的数据一致性。

高性能和可靠性:MongoShake使用多线程和批量操作来提高数据传输的性能。它还具有断点续传和故障恢复功能,确保在网络中断或其他故障情况下能够恢复传输过程。

数据迁移:MongoShake可以帮助你将数据从一个MongoDB集群或复制集合迁移到另一个集群或复制集合。它提供了简单的命令行工具和配置文件,可以轻松配置和管理数据迁移过程。

数据备份:MongoShake可以用作备份工具,将MongoDB数据库的数据备份到其他位置或存储介质。你可以定期运行备份任务,并将备份数据用于灾难恢复或数据恢复。

实时同步:MongoShake支持实时同步,可以将源数据库的更改实时地同步到目标数据库。这对于构建高可用性系统和数据实时分析非常有用。

灵活性和可配置性:MongoShake提供了丰富的配置选项,允许你根据需求定制复制和同步过程。你可以配置过滤规则、映射规则、转换规则等,以满足特定的数据迁移或同步需求。

image.png
image.png

这篇文章有介绍如何使用mongoshake进行mongodb的数据同步 MongoShake——基于MongoDB的跨数据中心的数据复制平台

下面是mongoshake的github地址:

MongoShake

第一次使用,如何进行配置?

感兴趣的小伙伴可以点击前往查看。

这里就不过多篇幅介绍mongshake数据同步的细节,相信大家查看文档就能快速上手。

小结

本次主要分享了如何开启蓝鲸中间件中mongodb的集群模式,以及mongodb数据备份容灾的三种方式。

本次分享就到这里啦!下期将介绍蓝鲸中间件--kafka/zookeeper 的高可用配置以及蓝鲸监控平台中的grafana图断点优化思路。

如果你够机智的话,应该通过我上面的介绍已经想到了如何去实现主机蓝鲸集群的kafka的集群优化哈哈哈。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • MongoDB 高可用
  • MongoDB 数据同步
    • 集群内数据同步
      • 数据备份(冷备)
        • 跨集群复制集同步(热同步)
        • 小结
        相关产品与服务
        云数据库 MongoDB
        腾讯云数据库 MongoDB(TencentDB for MongoDB)是腾讯云基于全球广受欢迎的 MongoDB 打造的高性能 NoSQL 数据库,100%完全兼容 MongoDB 协议,支持跨文档事务,提供稳定丰富的监控管理,弹性可扩展、自动容灾,适用于文档型数据库场景,您无需自建灾备体系及控制管理系统。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档