本文来自腾讯蓝鲸智云社区用户: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 模板文件都预留了自定义的参数文件门路,用户能够进行自定义配置。
/environments/default/mongodb-custom-values.yaml.gotmpl
这个门路是默认没有的,用户如果须要有自定义的配置须要手动创立
创立之后,你可能会问我应该传什么参数,在配置文件外面写什么能力开启 MongoDB 的复制集群,别急接下来咱们就介绍如何去查找参数配置。当咱们从蓝鲸下载的安装文件包后,在 chart 目录上面的很多都是 tar.gz 文件包,蓝鲸装置的时候,都会去援用这些都是 chart 包。
咱们能够将 MongoDB 的 chart 包解压,解压之后外面有一个 values 的文件,这个文件就是 chart 包启动的参数配置,咱们能够关上看一下外面的参数是怎么写的,
能够看到有 architecture: standalone 这个字段,默认是单点的,还有一种是复制集的模式(这种事有容灾的)。
晓得了参数的配置,咱们并非要在这里间接去改 values 文件外面的值,容易改乱,下面咱们不是介绍了留的那个自定义配置的钩子嘛,咱们在那外面去增加。
上面的参数是正本集的配置
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,发现不再是单节点的
MongoDB 数据同步
对于 mongodb 的数据同步上面提供一下的几种思路,大家能够联合本人的业务,抉择适合的去实现落地。
集群内数据同步
这种适宜同集群不同节点,或者网络提早不大的同城数据中心。
在 MongoDB 中,能够通过复制集群(Replica Set)来实现数据的主动同步和冗余备份。复制集群蕴含多个 MongoDB 实例(节点),其中一个节点被选举为主节点(Primary),其余节点则为主要节点(Secondary)。数据会主动在主节点和主要节点之间进行同步。
要设置 MongoDB 复制集群并实现数据同步,请依照以下步骤进行操作:
部署 MongoDB 实例:在每个节点上装置和配置 MongoDB。确保每个节点的配置文件中蕴含雷同的复制集群名称(replica set name)。
初始化主节点:抉择其中一个节点作为初始主节点。在该节点上启动 MongoDB,并应用 rs.initiate() 命令初始化复制集群。
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 实例的连贯信息和其余选项。
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 提供了丰盛的配置选项,容许你依据需要定制复制和同步过程。你能够配置过滤规定、映射规定、转换规则等,以满足特定的数据迁徙或同步需要。
这篇文章有介绍如何应用 mongoshake 进行 mongodb 的数据同步 MongoShake——基于 MongoDB 的跨数据中心的数据复制平台
上面是 mongoshake 的 github 地址:
MongoShake
第一次应用,如何进行配置?
感兴趣的小伙伴能够点击返回查看。
这里就不过多篇幅介绍 mongshake 数据同步的细节,置信大家查看文档就能疾速上手。
小结
本次次要分享了如何开启蓝鲸中间件中 mongodb 的集群模式,以及 mongodb 数据备份容灾的三种形式。
本次分享就到这里啦!下期将介绍蓝鲸中间件 –kafka/zookeeper 的高可用配置以及蓝鲸监控平台中的 grafana 图断点优化思路。
如果你够机智的话,应该通过我下面的介绍曾经想到了如何去实现主机蓝鲸集群的 kafka 的集群优化哈哈哈。