第二章:安装与配置

最后更新: 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

💡 实践提示

  1. 生产环境禁用绑定 localhost:正确配置 bindIp,只暴露必要的 IP
  2. 启用访问控制:生产环境必须启用 --auth 或配置 security.authorization
  3. 配置日志轮转:避免日志文件过大
  4. 监控资源使用:合理配置 WiredTiger 缓存大小

📚 继续学习