第二章:安装与配置
最后更新: 2024-01-01
作者: MongoDB Team
页面目录
第二章:安装与配置
搭建完整的 MongoDB 环境,支持单机、副本集和分片集群
2.1 系统要求
硬件要求
| 组件 | 最低配置 | 推荐配置 |
|---|---|---|
| CPU | 2 核 | 4 核以上 |
| 内存 | 4 GB | 16 GB 以上 |
| 磁盘 | 10 GB | SSD,100 GB 以上 |
| 网络 | 1 Gbps | 10 Gbps |
支持的操作系统
- Linux: Ubuntu (18.04+), Debian (10+), RHEL/CentOS (7+), Amazon Linux
- Windows: Windows Server 2016+, Windows 10/11
- macOS: 10.14+ (开发环境)
2.2 使用 Docker 安装
单机部署
# 拉取最新 MongoDB 镜像
docker pull mongo:latest
# 运行 MongoDB 容器
docker run -d \
--name mongodb \
-p 27017:27017 \
-v mongodb_data:/data/db \
-e MONGO_INITDB_ROOT_USERNAME=admin \
-e MONGO_INITDB_ROOT_PASSWORD=your_password \
mongo:latest
# 验证运行状态
docker ps | grep mongodb
# 连接到 MongoDB
docker exec -it mongodb mongosh -u admin -p your_password
副本集部署(Docker Compose)
# docker-compose.yml
version: '3.8'
services:
mongo1:
image: mongo:7.0
container_name: mongo1
command: mongod --replSet rs0 --port 27017
volumes:
- mongo1_data:/data/db
ports:
- "27017:27017"
environment:
- MONGO_INITDB_ROOT_USERNAME=admin
- MONGO_INITDB_ROOT_PASSWORD=password
mongo2:
image: mongo:7.0
container_name: mongo2
command: mongod --replSet rs0 --port 27017
volumes:
- mongo2_data:/data/db
ports:
- "27018:27017"
mongo3:
image: mongo:7.0
container_name: mongo3
command: mongod --replSet rs0 --port 27017
volumes:
- mongo3_data:/data/db
ports:
- "27019:27017"
volumes:
mongo1_data:
mongo2_data:
mongo3_data:
# 启动副本集
docker-compose up -d
# 初始化副本集
docker exec -it mongo1 mongosh -u admin -p password --eval '
rs.initiate({
_id: "rs0",
members: [
{ _id: 0, host: "mongo1:27017" },
{ _id: 1, host: "mongo2:27017" },
{ _id: 2, host: "mongo3:27017" }
]
})
'
2.3 APT 安装(Ubuntu/Debian)
添加 MongoDB 仓库
# 安装依赖
sudo apt update
sudo apt install -y gnupg curl
# 添加 MongoDB GPG 密钥
curl -fsSL https://www.mongodb.org/static/pgp/server-7.0.asc | \
sudo gpg -o /usr/share/keyrings/mongodb-server-7.0.gpg \
--dearmor
# 添加仓库
echo "deb [ signed-by=/usr/share/keyrings/mongodb-server-7.0.gpg ] \
http://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/7.0 multiverse" | \
sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list
# 更新并安装
sudo apt update
sudo apt install -y mongodb-org
启动服务
# 启动 MongoDB
sudo systemctl start mongod
# 设置开机自启
sudo systemctl enable mongod
# 检查状态
sudo systemctl status mongod
# 连接到 MongoDB
mongosh
2.4 YUM 安装(RHEL/CentOS)
# 创建 repo 文件
sudo tee /etc/yum.repos.d/mongodb-org-7.0.repo <<EOF
[mongodb-org-7.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/\$releasever/mongodb-org/7.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-7.0.asc
EOF
# 安装
sudo yum install -y mongodb-org
# 启动服务
sudo systemctl start mongod
sudo systemctl enable mongod
2.5 配置文件详解
MongoDB 的主配置文件是 mongod.conf,位于 /etc/mongodb.conf 或 /etc/mongod.conf。
完整配置示例
# /etc/mongod.conf
# MongoDB 配置文件
# 网络配置
net:
port: 27017
bindIp: 127.0.0.1,10.0.0.100
bindIpAll: false
maxIncomingConnections: 65536
wireObjectCheck: true
ipv6: false
# 存储配置
storage:
dbPath: /var/lib/mongodb
journal:
enabled: true
commitIntervalMs: 100
directoryPerDB: true
engine: wiredTiger
wiredTiger:
engineConfig:
cacheSizeGB: 4
journalCompressor: snappy
directoryForIndexes: false
collectionConfig:
blockCompressor: snappy
indexConfig:
prefixCompression: true
# 系统日志
systemLog:
destination: file
path: /var/log/mongodb/mongod.log
logAppend: true
logRotate: reopen
verbosity: 0
component:
accessControl:
verbosity: 0
command:
verbosity: 0
storage:
verbosity: 0
journal:
verbosity: 0
# 进程管理
processManagement:
fork: true
pidFilePath: /var/run/mongodb/mongod.pid
# 安全配置
security:
authorization: enabled
javascriptEnabled: true
# 副本集配置
replication:
replSetName: rs0
oplogSizeMB: 1024
# 分片配置
sharding:
clusterRole: configsvr
# 超时设置
operationProfiling:
mode: slowOp
slowOpThresholdMs: 100
关键配置项说明
| 配置项 | 说明 | 默认值 |
|---|---|---|
net.port |
监听端口 | 27017 |
net.bindIp |
绑定 IP | 127.0.0.1 |
storage.dbPath |
数据目录 | /data/db |
storage.journal.enabled |
启用日志 | true |
storage.engine |
存储引擎 | wiredTiger |
systemLog.destination |
日志目标 | file |
security.authorization |
访问控制 | disabled |
2.6 mongosh 基本操作
连接语法
# 本地连接
mongosh
# 指定主机和端口
mongosh --host 192.168.1.100 --port 27017
# 认证连接
mongosh -u username -p password --authenticationDatabase admin
# 连接副本集
mongosh "mongodb://rs1:27017,rs2:27017/?replicaSet=rs0"
# SSL 连接
mongosh --ssl --sslCAFile /path/to/ca.crt
基本命令
// 查看所有数据库
show dbs
// 切换/创建数据库
use mydb
// 查看当前数据库
db
// 查看当前数据库中的集合
show collections
// 查看帮助
db.help()
db.collection.help()
// 查看数据库状态
db.stats()
db.serverStatus()
用户管理
// 切换到 admin 数据库
use admin
// 创建管理员用户
db.createUser({
user: "admin",
pwd: "strong_password",
roles: [
{ role: "root", db: "admin" }
]
})
// 创建应用用户
db.createUser({
user: "app_user",
pwd: "app_password",
roles: [
{ role: "readWrite", db: "app_database" },
{ role: "dbAdmin", db: "app_database" }
]
})
// 查看所有用户
db.getUsers()
// 修改用户密码
db.changeUserPassword("app_user", "new_password")
// 删除用户
db.dropUser("app_user")
2.7 环境变量
| 变量 | 说明 | 示例 |
|---|---|---|
MONGO_INITDB_ROOT_USERNAME |
Docker 初始用户名 | admin |
MONGO_INITDB_ROOT_PASSWORD |
Docker 初始密码 | password |
MONGO_INITDB_DATABASE |
初始化数据库 | admin |
PATH |
MongoDB bin 目录 | /usr/bin |
2.8 防火墙配置
# Ubuntu/Debian (ufw)
sudo ufw allow 27017/tcp
sudo ufw reload
# RHEL/CentOS (firewalld)
sudo firewall-cmd --permanent --add-port=27017/tcp
sudo firewall-cmd --reload
💡 实践提示
- 生产环境禁用绑定 localhost:正确配置
bindIp,只暴露必要的 IP - 启用访问控制:生产环境必须启用
--auth或配置security.authorization - 配置日志轮转:避免日志文件过大
- 监控资源使用:合理配置 WiredTiger 缓存大小
📚 继续学习