腾讯蓝鲸智云
作者腾讯蓝鲸智云·2024-03-26 15:16
系统运维工程师·腾讯科技(深圳)有限公司

Tencent BlueKing7.0-CMDB--MongoDB 备份与同步

字数 5120阅读 368评论 0赞 0
本文来自腾讯Tencent BlueKing社区用户:fadewalk

前言

Tencent BlueKing的配置平台(CMDB)底层使用的是 Mongodb 作为数据存储,其优点不用多说,相信使用过的小伙伴应该都会觉得设计很灵活方便。
但是Tencent BlueKing的容器版本的 mongo 部署的是单点的版本,这个在测试环境的话单节点问题不大。
但是如果后续在生产环境的话,单个节点的 mongodb 还是不太保险,存在单节点故障的问题。
因此我们考量到生产数据的安全容灾问题,更希望使用mongo集群,并且数据除了有冷备,还要有跨中心的热备功能。
有了这些想法和需求后,接下来我们就开干。

MongoDB 高可用

Tencent BlueKing的mongodb 使用的是bitnami 社区打包的helm chart 版本,之前接触比较少的小伙伴可以了解下。(bitnami.com)[https://bitnami.com/]
Bitnami是一个开源的软件打包和部署工具,旨在简化应用程序的安装和管理过程。它提供了预配置的软件堆栈、虚拟机和容器映像,包括许多流行的开源应用程序和开发环境,如WordPress、Drupal、Joomla、LAMP(Linux、Apache、MySQL、PHP)等等。
其实在部署的时候,你查看 yaml.gotmpl 会发现 helmfile 文件里面,Tencent BlueKing的每个中间件的 yaml 模板文件都预留了自定义的参数文件路径,用户可以进行自定义配置。

--9ebdef7ea0a08b6fa9aee9a4c48a047d.png

--9ebdef7ea0a08b6fa9aee9a4c48a047d.png

/environments/default/mongodb-custom-values.yaml.gotmpl 这个路径是默认没有的,用户如果需要有自定义的配置需要手动创建
创建之后,你可能会问我应该传什么参数,在配置文件里面写什么才能开启MongoDB的复制集群,别急接下来我们就介绍如何去查找参数配置。当我们从Tencent BlueKing下载的安装文件包后,在chart目录下面的很多都是tar.gz 文件包,Tencent BlueKing安装的时候,都会去引用这些都是chart包。
我们可以将 MongoDB 的 chart 包解压,解压之后里面有一个values 的文件,这个文件就是chart包启动的参数配置,我们可以打开看一下里面的参数是怎么写的,
可以看到有 architecture: standalone 这个字段,默认是单点的,还有一种是复制集的模式(这种事有容灾的)。
知道了参数的配置,我们并非要在这里直接去改 values 文件里面的值,容易改乱,上面我们不是介绍了留的那个自定义配置的钩子嘛,我们在那里面去添加。

--9a49c22151d17393b6da4545358b6e15.png

--9a49c22151d17393b6da4545358b6e15.png

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

--52c4141f131d83bef28e1e04f21871f4.png

--52c4141f131d83bef28e1e04f21871f4.png

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的模板文件。

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,发现不再是单节点的

--bc3d9415ab42a439774498685faf4dc4.png

--bc3d9415ab42a439774498685faf4dc4.png

MongoDB 数据同步

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

集群内数据同步

这种适合同集群不同节点,或者网络延迟不大的同城数据中心。
在 MongoDB 中,可以通过复制集群(Replica Set)来实现数据的自动同步和冗余备份。复制集群包含多个 MongoDB 实例(节点),其中一个节点被选举为主节点(Primary),其余节点则为次要节点(Secondary)。数据会自动在主节点和次要节点之间进行同步。
要设置 MongoDB 复制集群并实现数据同步,请按照以下步骤进行操作:
部署 MongoDB 实例:在每个节点上安装和配置 MongoDB。确保每个节点的配置文件中包含相同的复制集群名称(replica set name)。
初始化主节点:选择其中一个节点作为初始主节点。在该节点上启动 MongoDB,并使用 rs.initiate() 命令初始化复制集群。

rs.initiate()
添加次要节点:连接到主节点的 MongoDB 实例,并使用 rs.add() 命令逐个添加次要节点。
rs.add(":")
例如:
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 实例的连接信息和其他选项。

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

例如,如果要备份名为 “mydatabase” 的数据库,并将备份文件保存在当前目录下的 “backup” 文件夹中,可以运行以下命令:
mongodump --host localhost --port 27017 --username myuser --password mypassword --authenticationDatabase admin --db mydatabase --out ./backup
mongodump 命令将开始备份过程,并将数据导出到指定的输出目录中。备份过程可能需要一些时间,具体取决于数据库的大小和网络连接的速度。
备份完成后,你将在指定的输出目录中找到备份文件。备份文件以数据库名称命名,包含数据和索引的 BSON 文件。
这种方式是冷备,可以在每天晚上写个crontab 定时执行。

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

如果你的业务建设的DR容灾机房,希望将生产的Tencent BlueKing的配置平台热同步到备的数据集群(Tencent BlueKing容灾集群的配置平台),对于跨数据中心的异地不建议使用第一种方式那种来做数据同步,防止其他节点同步将主数据中心的节点拖垮。
而且使用第一种的方式会存在跨网络集群,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提供了丰富的配置选项,允许你根据需求定制复制和同步过程。你可以配置过滤规则、映射规则、转换规则等,以满足特定的数据迁移或同步需求。

--d3e84661ccc6e2f952fae30023e0f4e5.png

--d3e84661ccc6e2f952fae30023e0f4e5.png

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

下面是mongoshake的github地址:
MongoShake
第一次使用,如何进行配置?
感兴趣的小伙伴可以点击前往查看。
这里就不过多篇幅介绍mongshake数据同步的细节,相信大家查看文档就能快速上手。

小结

本次主要分享了如何开启Tencent BlueKing中间件中mongodb的集群模式,以及mongodb数据备份容灾的三种方式。
本次分享就到这里啦!下期将介绍Tencent BlueKing中间件–kafka/zookeeper 的高可用配置以及Tencent BlueKing监控平台中的grafana图断点优化思路。
如果你够机智的话,应该通过我上面的介绍已经想到了如何去实现主机Tencent BlueKing集群的kafka的集群优化哈哈哈。

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

0

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广