知识点:
MongoDB 的核心优势在于灵活的数据模型、水平扩展能力和非结构化数据处理,适合互联网、大数据分析、实时应用等场景。在技术选型时,若业务需求以 “快速迭代、非结构化数据、高并发” 为核心,MongoDB 是优选;若强调强事务或高度结构化查询,可考虑结合关系型数据库使用。
不适合 MongoDB 的场景(对比参考):强事务一致性需求:如银行转账、财务系统(MongoDB 4.0 + 支持分布式事务,但性能较关系型数据库仍有差距)。高度结构化且低变更的数据:如传统企业 ERP 系统中的财务报表(更适合 MySQL、PostgreSQL)。复杂 Join 查询为主的场景:MongoDB 的多文档关联查询性能较低,建议通过数据冗余或应用层处理。
一、实验环境:
master1\node1\node2还原至Prometheus+grafana配置完成
Mangodb镜像导入master1节点
二、Mangodb镜像mongo_exporter.tar \mongo.tar导入master1节点
[root@master1 ~]# ls
anaconda-ks.cfg kube-state-metrics-rbac.yaml node-export.yaml
calico.tar.gz mongo_exporter.tar prometheus-cfg.yaml
calico.yaml mongo.tar prometheus-deploy.yaml
grafana.yaml node_exporter-1.5.0.linux-amd64.tar.gz prometheus-k8s
kubeadm.yaml node-exporter.tar.gz
[root@master1 ~]# ctr -n k8s.io images import mongo.tar
unpacking docker.io/library/mongo:latest (sha256:8217acd3d2f45b3b1a7c971543945ef3f21e87bdcf01109baff2e0ebcf903c84)...done
[root@master1 ~]# ctr -n k8s.io images import mongo_exporter.tar
unpacking docker.io/percona/mongodb_exporter:0.34.0 (sha256:e857a05c5b93d9d6c8a945a6cdf331ff266e207243c3aacd6059f8a12984180c)...done
三、创建data数据目录
[root@master1 ~]# mkdir -p /data/db 创建data数据目录
[root@master1 ~]#
四、安装docker
[root@master1 ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
Docker CE Stable - x86_64 6.4 kB/s | 3.5 kB 00:00
Docker CE Stable - x86_64 7.9 kB/s | 75 kB 00:09
[root@master1 ~]# yum config-manager --add-repo=https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
Adding repo from: https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@master1 ~]# dnf -y install docker-ce
[root@master1 ~]# systemctl enable --now docker
Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /usr/lib/systemd/system/docker.service.
五、查看docker镜像:
[root@master1 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
[root@master1 ~]#
[root@master1 ~]# ls
anaconda-ks.cfg kube-state-metrics-rbac.yaml node-export.yaml
calico.tar.gz mongo_exporter.tar prometheus-cfg.yaml
calico.yaml mongo.tar prometheus-deploy.yaml
grafana.yaml node_exporter-1.5.0.linux-amd64.tar.gz prometheus-k8s
kubeadm.yaml node-exporter.tar.gz
六、载入mongodb的镜像、导入插件的镜像:
[root@master1 ~]# docker load < mongo.tar 载入mongodb的镜像
3abdd8a5e7a8: Loading layer 80.61MB/80.61MB
c3d944ed20ad: Loading layer 13.31kB/13.31kB
3235090eeef2: Loading layer 4.582MB/4.582MB
596debeccadd: Loading layer 3.086MB/3.086MB
e7a4e15ef2a2: Loading layer 1.536kB/1.536kB
66039d310313: Loading layer 3.584kB/3.584kB
a5d5a2b84151: Loading layer 803.2MB/803.2MB
7bf2c57cc3b0: Loading layer 17.41kB/17.41kB
Loaded image: mongo:latest
[root@master1 ~]#
[root@master1 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mongo latest 7ef8fa6da12d 3 months ago 888MB
[root@master1 ~]#
[root@master1 ~]# docker load < mongo_exporter.tar 导入mongo插件的镜像
34add5b8e977: Loading layer 217.6kB/217.6kB
5f8e5d8d99c0: Loading layer 15.18MB/15.18MB
Loaded image: percona/mongodb_exporter:0.34.0
[root@master1 ~]#
[root@master1 ~]# docker images 查看docker镜像
REPOSITORY TAG IMAGE ID CREATED SIZE
mongo latest 7ef8fa6da12d 3 months ago 888MB
percona/mongodb_exporter 0.34.0 ee26c8c9fc40 2 years ago 15.4MB
七、编辑Dockers进程的配置文件、定义 Docker 的运行时
[root@master1 ~]# vim /etc/docker/daemon.json
{
"registry-mirrors":[
"https://mirror.baidubce.com",
"https://9cpn8tt6.mirror.aliyuncs.com",
"https://registry.docker-cn.com",
"https://dockerproxy.com",
"https://mirror.baidubce.com",
"https://docker.m.daocloud.io",
"https://docker.nju.edu.cn",
"https://docker.1panel.live",
"https://hub.rat.dev",
"https://mirror-gcr.onrender.com",
"https://docker.mirrors.sjtug.sjtu.edu.cn",
"https://docker.mirrors.ustc.edu.cn",
"https://reg-mirror.qiniu.com",
"https://registry.docker-cn.com"
]
}
[root@master1 ~]# systemctl restart docker
八、mongo运行mongodb的镜像,生成mongodb的容器,建立端口映射,端口的27017映射到容器27017,并建立目录映射
[root@master1 ~]# docker run -d --name mongodb -p 27017:27017 -v /data/db:/data/db mongo
07e0196d3d8157653c0d9850888970420c3382cee8bbae53bf5204a1a86368e2
mongo运行mongodb的镜像,生成mongodb的容器,建立端口映射,端口的27017映射到容器的27017,并建立目录映射
[root@master1 ~]# docker ps 查看正在运行的容器
CONTAINER ID IMAGE COMMAND CREATED STATUS POR TS NAMES
07e0196d3d81 mongo "docker-entrypoint.s…" 23 seconds ago Up 23 seconds 0.0 .0.0:27017->27017/tcp, [::]:27017->27017/tcp mongodb
[root@master1 ~]#
九、管理员进入mongodb的容器
[root@master1 ~]# docker exec -it mongodb mongosh admin 管理员进入mongodb的容器
Current Mongosh Log ID: 686775f9c53b15152ed861df
Connecting to: mongodb://127.0.0.1:27017/admin?directConnection=true&serverSelectionTimeoutMS=2 000&appName=mongosh+2.5.0
Using MongoDB: 8.0.6
Using Mongosh: 2.5.0
For mongosh info see: https://www.mongodb.com/docs/mongodb-shell/
To help improve our products, anonymous usage data is collected and sent to MongoDB periodically (https: //www.mongodb.com/legal/privacy-policy).
You can opt-out by running the disableTelemetry() command.
------
The server generated these startup warnings when booting
2025-07-04T06:20:27.711+00:00: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted
2025-07-04T06:20:27.711+00:00: For customers running the current memory allocator, we suggest changin g the contents of the following sysfsFile
2025-07-04T06:20:27.711+00:00: We suggest setting the contents of sysfsFile to 0.
2025-07-04T06:20:27.711+00:00: vm.max_map_count is too low
------
admin> use admin 使用数据库管理员
already on db admin
admin> db.createUser({ user: 'admin', pwd:'admin111111', roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] }) 数据库管理员设置密码:111111;角色:管理员任何数据
{ ok: 1 } #启动mongo插件的容器,以管理员账号admin,密码为:admin111111,登录到容器里(如果不设置密码,登陆不了)
admin> exit
十、docker运行mongodb的插件的镜像,生成mongo插件的容器,用管理员账号admin,密码为admin111111,连接到容器里
[root@master1 ~]# docker run -d --name mongodb_exporter -p 30056:9216 percona/mongodb_exporter:0.34.0 --mongodb.uri mongodb://admin:admin111111@192.168.7.180:27017
31dfc384bf8bb4ea24282caa53072ac5adfe2cc165ba41dff3b852b94bb0b1a6
【docker运行mongodb的插件的镜像,生成mongo插件的容器,用管理员账号admin,密码为admin111111,连接到容器里】
[root@master1 ~]#
十一、编辑编辑prometheus-deploy.yaml主配置文件
[root@master1 ~]# ls
anaconda-ks.cfg kube-state-metrics-rbac.yaml node-export.yaml
calico.tar.gz mongo_exporter.tar prometheus-cfg.yaml 导入prometheus-cfg.yaml配置文件(deployment无状态服务:提供网页上应用服务的)
calico.yaml mongo.tar prometheus-deploy.yaml
grafana.yaml node_exporter-1.5.0.linux-amd64.tar.gz prometheus-k8s
kubeadm.yaml node-exporter.tar.gz
[root@master1 ~]# cd prometheus-k8s/ 进入目录
[root@master1 prometheus-k8s]# vim prometheus-cfg.yaml 编辑主配置文件
- job_name: 'mongodb' 添加工作任务mongodb
scrape_interval: 5s 抓取间隔时间5秒
static_configs: 静态配置
- targets: ['192.168.7.180:30056'] 目标:192.168.7.180:30056 mongodb插件的端口号
[root@master1 prometheus-k8s]# kubectl apply -f prometheus-cfg.yaml 应用Prometheus主配置文件
configmap/prometheus-config configured
[root@master1 prometheus-k8s]# kubectl get pods -n monitor-sa -owide
NAME READY STATUS RESTARTS AGE IP NODE N OMINATED NODE READINESS GATES
node-exporter-g49bj 1/1 Running 1 (60m ago) 3d 192.168.7.180 master1 < none> <none>
node-exporter-hffgm 1/1 Running 1 (60m ago) 3d 192.168.7.183 node1 < none> <none>
node-exporter-xflj5 1/1 Running 1 (60m ago) 3d 192.168.7.184 node2 < none> <none>
prometheus-server-6fc5b6f457-sp48r 1/1 Running 1 (60m ago) 2d23h 10.244.104.5 node2 < none> <none>
[root@master1 prometheus-k8s]# kubectl get svc -n monitor-sa 查看监控命名空间的服务
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
prometheus NodePort 10.110.208.180 <none> 9090:31087/TCP 2d23h
[root@master1 prometheus-k8s]# kubectl delete -f prometheus-deploy.yaml 删除prometheus无状态服务的配置文件
deployment.apps "prometheus-server" deleted
[root@master1 prometheus-k8s]# kubectl apply -f prometheus-deploy.yaml 应用prometheus无状态服务的配置文件
deployment.apps/prometheus-server created
[root@master1 prometheus-k8s]# ^C
十二、测试是否搭建成功
