MongoDB
更新: 1/18/2025 字数: 0 字 时长: 0 分钟
概述
MongoDB 是一个基于分布式文件存储的开源 NoSQL 数据库。与传统的关系型数据库相比,MongoDB 具有以下特点:
- 文档存储:数据以 BSON(类似 JSON)格式存储,结构灵活
- 高性能:支持索引、聚合等操作,查询效率高
- 高可用性:支持副本集和分片集群,保证数据可靠性
- 水平扩展:通过分片实现数据分布式存储,支持海量数据
- 丰富的查询语言:支持丰富的查询表达式和聚合管道
MongoDB 适用于以下场景:
- 需要灵活数据模型的应用程序
- 需要处理大量非结构化或半结构化数据
- 需要高吞吐量和低延迟的实时应用
- 需要水平扩展的大数据应用
快速部署
本项目的n-full-cli提供MongoDB的docker部署配置样板文件。
- 在准备存放项目的目录下,使用
n-full-cli工具输入命令创建: - 输入命令:
nfull docker - 选择:
MongoDB - 选择:
docker-compose或者docker-swarm(根据自己的docker模式选择)
sh
T nfull docker
|
o ? Please select the configuration you want to pop up / 请选择想要弹出的配置
| ❯ MongoDB
| MySQL
| Redis
| Traefik suite - (traefik+grafana+prometheus+consul+loki+promtail)
|
o ? Please select a docker run mode / 请选择docker运行模式
| ❯ docker-compose
| docker-swarm
|
o configuration file inject in ./docker-compose.yml
|
| You can use 'docker-compose up -d' to start the service以下是docker配置样板文件源码:
yml
version: '3.8'
services:
mongodb:
image: mongo:latest
container_name: mongodb
restart: always
environment:
MONGO_INITDB_ROOT_USERNAME: admin
MONGO_INITDB_ROOT_PASSWORD: admin123
ports:
- "27017:27017"
volumes:
- ./data:/data/db
- ./mongo-keyfile:/data/keyfile/mongo-keyfile
command: mongod --auth --replSet rs0 --keyFile /data/keyfile/mongo-keyfile --bind_ip_all
networks:
- mongo_network
networks:
mongo_network:
driver: bridgeyml
version: '3.8'
services:
mongodb:
image: mongo:latest
environment:
MONGO_INITDB_ROOT_USERNAME: admin
MONGO_INITDB_ROOT_PASSWORD: admin123
ports:
- "27017:27017"
volumes:
- mongodb_data:/data/db
secrets:
- mongo-keyfile
command: mongod --auth --replSet rs0 --keyFile /run/secrets/mongo-keyfile --bind_ip_all
deploy:
mode: replicated
replicas: 1
restart_policy:
condition: on-failure
delay: 5s
max_attempts: 3
update_config:
parallelism: 1
delay: 10s
networks:
- swarm_network
networks:
swarm_network:
driver: overlay
secrets:
mongo-keyfile:
external: true
volumes:
mongodb_data:
driver: local启动
启动docker前需要先创建mongo-keyfile密钥文件,在docker-compose.yml或者docker-swarm.yml同级目录下:
sh
# 创建密钥文件
openssl rand -base64 756 > ./mongo-keyfile
# 设置权限
chmod 600 ./mongo-keyfile
# 启动mongodb
docker compose up -d如果使用docker-swarm,在创建将mongo-keyfile密钥文件之后,还需要将mongo-keyfile文件创建为Docker Secret:
sh
# 创建密钥文件
openssl rand -base64 756 > ./mongo-keyfile
# 设置权限
chmod 600 ./mongo-keyfile
# 将 mongo-keyfile 文件创建为 Docker Secret
docker secret create mongo-keyfile ./mongo-keyfile
# 启动mongodb
docker stack deploy -c docker-swarm.yml mongo_stack初始化副本集
首次启动需要初始化副本集:
sh
# 使用mongosh工具连接到数据库
> mongosh "mongodb://admin:admin123@localhost:27017/?authSource=admin"
# 初始化副本集
> rs.initiate({
_id: 'rs0',
members: [
{
_id: 0,
host: 'localhost:27017'
}
]
})mongosh工具安装:mongodb-shell
提示
- 配置中默认使用
MongoDB的副本集模式,以便支持数据库事务 - 如果使用
docker-swarm,运行前请先确认swarm_network网络是否存在- 创建
swarm_network网络命令:docker network create --driver overlay --attachable swarm_network - 运行
docker-swarm.yml命令:docker stack deploy -c docker-swarm.yml mongodb
- 创建
