1. 首页 > MongoDB教程 > 正文

MongoDB教程FG002-MongoDB社区版安装与生产初始化配置实战

本文档风哥主要介绍MongoDB社区版安装与生产初始化配置,包括MongoDB安装基础概念、安装方式、系统要求、安装前准备、安装规划、安装后配置、RPM包安装、二进制安装、初始化配置、安装实战案例、初始化配置实战、验证测试实战等内容,风哥教程参考MongoDB官方文档Installation Guides内容编写,适合DBA人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。

Part01-基础概念与理论知识

1.1 MongoDB安装基础概念

MongoDB是一个开源的文档数据库,提供高性能、高可用性和自动扩展能力。在安装MongoDB之前,需要了解一些基础概念:

MongoDB安装相关概念:

  • 社区版(Community Edition):免费开源版本,适合大多数应用场景
  • 企业版(Enterprise Edition):商业版本,提供更多高级功能和支持
  • mongod:MongoDB服务器进程
  • mongos:查询路由器,用于分片集群
  • mongo/mongosh:命令行工具,用于与MongoDB交互

1.2 MongoDB安装方式

MongoDB提供多种安装方式,根据不同的操作系统和需求选择合适的安装方式:

# MongoDB安装方式

## 包管理器安装
– RPM包(Red Hat/CentOS/Oracle Linux)
– DEB包(Ubuntu/Debian)
– Homebrew(macOS)

## 二进制安装
– 下载预编译的二进制包
– 手动配置和安装

## 容器安装
– Docker容器
– Kubernetes

## 云服务
– MongoDB Atlas
– AWS DocumentDB
– Azure Cosmos DB

1.3 MongoDB系统要求

MongoDB的系统要求取决于部署规模和使用场景,以下是推荐的系统要求:

# MongoDB系统要求

## 操作系统
– Red Hat Enterprise Linux/CentOS/Oracle Linux 7.0+
– Ubuntu 18.04 LTS+
– Debian 9.0+
– SUSE Linux Enterprise Server 12+
– macOS 10.14+
– Windows Server 2016+

## 硬件要求
– 内存:至少4GB RAM,生产环境建议16GB+
– CPU:至少2核,生产环境建议4核+
– 存储:至少10GB可用空间,生产环境建议SSD
– 网络:千兆网络接口

## 软件依赖
– libcurl
– openssl
– liblzma
– libssl

风哥提示:在生产环境中,建议使用64位操作系统和足够的硬件资源,以确保MongoDB的性能和稳定性。学习交流加群风哥微信: itpux-com

Part02-生产环境规划与建议

2.1 MongoDB安装前准备

在安装MongoDB之前,需要进行以下准备工作:

# 安装前准备

## 系统检查
– 检查操作系统版本
– 检查硬件资源
– 检查网络连接

## 系统优化
– 关闭透明大页
– 关闭NUMA
– 调整文件描述符限制
– 调整内核参数

## 目录规划
– 数据目录:/mongodb/fgdata
– 日志目录:/mongodb/log
– 配置目录:/mongodb/conf
– 安装目录:/mongodb/app

## 用户规划
– 创建MongoDB用户和组
– 设置适当的权限

2.2 MongoDB安装规划

根据业务需求和部署规模,制定MongoDB安装规划:

# 安装规划

## 部署模式
– 单节点部署:适合开发和测试环境
– 副本集部署:适合生产环境,提供高可用性
– 分片集群部署:适合大规模数据和高并发场景

## 版本选择
– 稳定版:最新的稳定版本
– LTS版:长期支持版本

## 安装方式选择
– 包管理器安装:简单方便,适合大多数场景
– 二进制安装:灵活可控,适合需要定制的场景
– 容器安装:适合容器化部署环境

## 网络规划
– 端口配置:默认27017
– 防火墙规则:允许MongoDB端口访问
– 网络拓扑:根据部署模式设计网络架构

2.3 MongoDB安装后配置

安装MongoDB后,需要进行以下配置:

# 安装后配置

## 基本配置
– 创建配置文件
– 设置数据目录和日志目录
– 配置网络参数
– 设置安全选项

## 服务管理
– 配置系统服务
– 设置开机自启
– 配置服务监控

## 安全配置
– 启用认证
– 创建管理员用户
– 配置访问控制
– 启用SSL/TLS

## 性能优化
– 调整内存使用
– 配置存储引擎
– 优化查询性能
– 设置合理的缓存大小

生产环境建议:在生产环境中,建议使用副本集部署,至少3个节点,确保高可用性和数据安全性。学习交流加群风哥QQ113257174

Part03-生产环境项目实施方案

3.1 MongoDB RPM包安装

3.1.1 配置MongoDB YUM源

# 配置MongoDB YUM源
$ cat > /etc/yum.repos.d/mongodb-org-5.0.repo << EOF [mongodb-org-5.0] name=MongoDB Repository baseurl=https://repo.mongodb.org/yum/redhat/8/mongodb-org/5.0/x86_64/ gpgcheck=1 enabled=1 gpgkey=https://www.mongodb.org/static/pgp/server-5.0.asc EOF

3.1.2 安装MongoDB

# 安装MongoDB
$ sudo yum install -y mongodb-org

# 验证安装
$ mongod –version
db version v5.0.13
Build Info:
Version: 5.0.13
Git Version: 296987339731707f37e20b20c52a048929b3904e
OpenSSL version: OpenSSL 1.1.1k FIPS 25 Mar 2021
modules:
build environment:
distmod: rhel80
distarch: x86_64
target_arch: x86_64

# 检查MongoDB服务状态
$ sudo systemctl status mongod

3.2 MongoDB二进制安装

3.2.1 下载MongoDB二进制包

# 下载MongoDB二进制包
$ cd /tmp
$ wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel80-5.0.13.tgz

# 解压二进制包
$ tar -zxvf mongodb-linux-x86_64-rhel80-5.0.13.tgz

# 移动到安装目录
$ sudo mv mongodb-linux-x86_64-rhel80-5.0.13 /mongodb/app

3.2.2 创建目录结构

# 创建目录结构
$ sudo mkdir -p /mongodb/fgdata
$ sudo mkdir -p /mongodb/log
$ sudo mkdir -p /mongodb/conf

# 创建MongoDB用户和组
$ sudo groupadd mongodb
$ sudo useradd -g mongodb -s /bin/bash -m mongodb

# 设置权限
$ sudo chown -R mongodb:mongodb /mongodb

3.3 MongoDB初始化配置

3.3.1 创建配置文件

# 创建配置文件
$ cat > /mongodb/conf/mongod.conf << EOF # mongod.conf # for documentation of all options, see: # http://docs.mongodb.org/manual/reference/configuration-options/ # Where and how to store data. storage: dbPath: /mongodb/fgdata journal: enabled: true # where to write logging data. systemLog: destination: file logAppend: true path: /mongodb/log/mongod.log # network interfaces net: port: 27017 bindIp: 0.0.0.0 # how the process runs processManagement: fork: true pidFilePath: /mongodb/app/mongod.pid # security security: authorization: enabled EOF

3.3.2 启动MongoDB服务

# 启动MongoDB服务
$ sudo -u mongodb /mongodb/app/bin/mongod –config /mongodb/conf/mongod.conf
about to fork child process, waiting until server is ready for connections.
forked process: 12345
child process started successfully, parent exiting

# 检查服务状态
$ ps -ef | grep mongod
mongodb 12345 1 0 10:00 ? 00:00:01 /mongodb/app/bin/mongod –config /mongodb/conf/mongod.conf

# 检查端口
$ netstat -tuln | grep 27017
tcp 0 0 0.0.0.0:27017 0.0.0.0:* LISTEN

3.3.3 创建管理员用户

# 连接MongoDB
$ /mongodb/app/bin/mongosh

# 切换到admin数据库
fgedu.net.cn> use admin

# 创建管理员用户
fgedu.net.cn> db.createUser({
… user: “fgedu”,
… pwd: “fgedu123”,
… roles: [ { role: “userAdminAnyDatabase”, db: “admin” }, “readWriteAnyDatabase” ]
… })

# 验证用户创建
fgedu.net.cn> db.getUsers()

# 退出并重新连接(使用认证)
fgedu.net.cn> exit
$ /mongodb/app/bin/mongosh -u fgedu -p fgedu123 –authenticationDatabase admin

风哥提示:初始化配置完成后,一定要创建管理员用户并启用认证,确保MongoDB的安全性。更多学习教程公众号风哥教程itpux_com

Part04-生产案例与实战讲解

4.1 MongoDB安装实战案例

以下是一个生产环境中的MongoDB安装实战案例:

# 生产环境安装案例

## 环境信息
– 操作系统:Oracle Linux 9.3
– 服务器:3台(192.168.1.101, 192.168.1.102, 192.168.1.103)
– MongoDB版本:5.0.13
– 部署模式:副本集

## 安装步骤

### 1. 配置YUM源(所有节点)
$ cat > /etc/yum.repos.d/mongodb-org-5.0.repo << EOF [mongodb-org-5.0] name=MongoDB Repository baseurl=https://repo.mongodb.org/yum/redhat/9/mongodb-org/5.0/x86_64/ gpgcheck=1 enabled=1 gpgkey=https://www.mongodb.org/static/pgp/server-5.0.asc EOF ### 2. 安装MongoDB(所有节点) $ sudo yum install -y mongodb-org ### 3. 创建目录结构(所有节点) $ sudo mkdir -p /mongodb/fgdata $ sudo mkdir -p /mongodb/log $ sudo mkdir -p /mongodb/conf $ sudo chown -R mongodb:mongodb /mongodb ### 4. 配置MongoDB(所有节点) $ cat > /mongodb/conf/mongod.conf << EOF # mongod.conf storage: dbPath: /mongodb/fgdata journal: enabled: true systemLog: destination: file logAppend: true path: /mongodb/log/mongod.log net: port: 27017 bindIp: 0.0.0.0 processManagement: fork: true pidFilePath: /mongodb/app/mongod.pid replication: replSetName: rs0 security: authorization: enabled keyFile: /mongodb/conf/keyfile EOF ### 5. 创建keyfile(所有节点) $ openssl rand -base64 756 > /mongodb/conf/keyfile
$ chmod 400 /mongodb/conf/keyfile
$ chown mongodb:mongodb /mongodb/conf/keyfile

### 6. 启动MongoDB(所有节点)
$ sudo systemctl start mongod
$ sudo systemctl enable mongod

### 7. 初始化副本集
$ /mongodb/app/bin/mongosh -u fgedu -p fgedu123 –authenticationDatabase admin
fgedu.net.cn> rs.initiate()
fgedu.net.cn> rs.add(“192.168.1.102:27017”)
fgedu.net.cn> rs.add(“192.168.1.103:27017”)
fgedu.net.cn> rs.status()

4.2 MongoDB初始化配置实战

以下是MongoDB初始化配置的实战案例:

# 初始化配置实战

## 1. 系统参数优化
$ cat > /etc/sysctl.d/mongodb.conf << EOF fs.file-max = 6815744 kernel.sem = 250 32000 100 128 kernel.shmmni = 4096 kernel.shmall = 1073741824 kernel.shmmax = 4398046511104 net.core.somaxconn = 4096 net.ipv4.tcp_max_syn_backlog = 4096 net.ipv4.tcp_fin_timeout = 30 EOF $ sysctl -p /etc/sysctl.d/mongodb.conf ## 2. 关闭透明大页 $ cat > /etc/rc.d/rc.local << EOF #!/bin/bash echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
EOF

$ chmod +x /etc/rc.d/rc.local
$ /etc/rc.d/rc.local

## 3. 调整文件描述符限制
$ cat > /etc/security/limits.d/mongodb.conf << EOF mongodb soft nofile 65536 mongodb hard nofile 65536 EOF ## 4. 配置MongoDB服务 $ cat > /etc/systemd/system/mongod.service << EOF [Unit] Description=MongoDB Database Server Documentation=https://docs.mongodb.org/manual After=network.target [Service] User=mongodb Group=mongodb ExecStart=/mongodb/app/bin/mongod --config /mongodb/conf/mongod.conf PIDFile=/mongodb/app/mongod.pid Restart=always RestartSec=5 [Install] WantedBy=multi-user.target EOF $ systemctl daemon-reload $ systemctl enable mongod $ systemctl start mongod

4.3 MongoDB验证测试实战

以下是MongoDB验证测试的实战案例:

# 验证测试实战

## 1. 连接测试
$ /mongodb/app/bin/mongosh -u fgedu -p fgedu123 –authenticationDatabase admin

## 2. 数据库操作测试
fgedu.net.cn> use fgedudb
switched to db fgedudb

fgedu.net.cn> db.createCollection(“fgedu_collection”)
{ ok: 1 }

fgedu.net.cn> db.fgedu_collection.insertOne({name: “fgedu”, age: 30, email: “fgedu@fgedu.net.cn”})
{
acknowledged: true,
insertedId: ObjectId(“60a7b3c8d9e0f1a2b3c4d5e7”)
}

fgedu.net.cn> db.fgedu_collection.find()
[ { _id: ObjectId(“60a7b3c8d9e0f1a2b3c4d5e7″), name: ‘fgedu’, age: 30, email: ‘fgedu@fgedu.net.cn’ } ]

## 3. 副本集状态测试
fgedu.net.cn> rs.status()
{
set: ‘rs0’,
date: ISODate(‘2026-04-07T02:00:00Z’),
myState: 1,
term: NumberLong(1),
syncingTo: ”,
syncSourceHost: ”,
syncSourceId: -1,
heartbeatIntervalMillis: NumberLong(2000),
majorityVoteCount: 2,
writeMajorityCount: 2,
votingMembersCount: 3,
writableVotingMembersCount: 3,
optimes: {
lastCommittedOpTime: { ts: Timestamp({ t: 1617782400, i: 1 }), t: NumberLong(1) },
lastCommittedWallTime: ISODate(‘2026-04-07T02:00:00Z’),
readConcernMajorityOpTime: { ts: Timestamp({ t: 1617782400, i: 1 }), t: NumberLong(1) },
appliedOpTime: { ts: Timestamp({ t: 1617782400, i: 1 }), t: NumberLong(1) },
durableOpTime: { ts: Timestamp({ t: 1617782400, i: 1 }), t: NumberLong(1) },
lastAppliedWallTime: ISODate(‘2026-04-07T02:00:00Z’),
lastDurableWallTime: ISODate(‘2026-04-07T02:00:00Z’)
},
lastStableRecoveryTimestamp: Timestamp({ t: 1617782400, i: 1 }),
electionCandidateMetrics: {
lastElectionReason: ‘electionTimeout’,
lastElectionDate: ISODate(‘2026-04-07T01:59:00Z’),
electionTerm: NumberLong(1),
lastCommittedOpTimeAtElection: { ts: Timestamp({ t: 0, i: 0 }), t: NumberLong(-1) },
lastSeenOpTimeAtElection: { ts: Timestamp({ t: 1617782340, i: 1 }), t: NumberLong(-1) },
numVotesNeeded: 2,
priorityAtElection: 1,
electionTimeoutMillis: NumberLong(10000),
newTermStartDate: ISODate(‘2026-04-07T01:59:00Z’),
wMajorityWriteAvailabilityDate: ISODate(‘2026-04-07T01:59:01Z’)
},
members: [
{
_id: 0,
name: ‘192.168.1.101:27017’,
health: 1,
state: 1,
stateStr: ‘PRIMARY’,
uptime: 3600,
optime: { ts: Timestamp({ t: 1617782400, i: 1 }), t: NumberLong(1) },
optimeDate: ISODate(‘2026-04-07T02:00:00Z’),
syncingTo: ”,
syncSourceHost: ”,
syncSourceId: -1,
infoMessage: ”,
electionTime: Timestamp({ t: 1617778740, i: 1 }),
electionDate: ISODate(‘2026-04-07T01:59:00Z’),
configVersion: 3,
configTerm: 1,
self: true,
lastHeartbeatMessage: ”
},
{
_id: 1,
name: ‘192.168.1.102:27017’,
health: 1,
state: 2,
stateStr: ‘SECONDARY’,
uptime: 3540,
optime: { ts: Timestamp({ t: 1617782400, i: 1 }), t: NumberLong(1) },
optimeDurable: { ts: Timestamp({ t: 1617782400, i: 1 }), t: NumberLong(1) },
optimeDate: ISODate(‘2026-04-07T02:00:00Z’),
optimeDurableDate: ISODate(‘2026-04-07T02:00:00Z’),
lastHeartbeat: ISODate(‘2026-04-07T02:00:00Z’),
lastHeartbeatRecv: ISODate(‘2026-04-07T02:00:00Z’),
pingMs: NumberLong(1),
lastHeartbeatMessage: ”,
syncingTo: ‘192.168.1.101:27017’,
syncSourceHost: ‘192.168.1.101:27017’,
syncSourceId: 0,
infoMessage: ”,
configVersion: 3,
configTerm: 1
},
{
_id: 2,
name: ‘192.168.1.103:27017’,
health: 1,
state: 2,
stateStr: ‘SECONDARY’,
uptime: 3540,
optime: { ts: Timestamp({ t: 1617782400, i: 1 }), t: NumberLong(1) },
optimeDurable: { ts: Timestamp({ t: 1617782400, i: 1 }), t: NumberLong(1) },
optimeDate: ISODate(‘2026-04-07T02:00:00Z’),
optimeDurableDate: ISODate(‘2026-04-07T02:00:00Z’),
lastHeartbeat: ISODate(‘2026-04-07T02:00:00Z’),
lastHeartbeatRecv: ISODate(‘2026-04-07T02:00:00Z’),
pingMs: NumberLong(1),
lastHeartbeatMessage: ”,
syncingTo: ‘192.168.1.101:27017’,
syncSourceHost: ‘192.168.1.101:27017’,
syncSourceId: 0,
infoMessage: ”,
configVersion: 3,
configTerm: 1
}
],
ok: 1,
‘$clusterTime’: {
clusterTime: Timestamp({ t: 1617782400, i: 1 }),
signature: {
hash: Binary(Buffer.from(‘0000000000000000000000000000000000000000’, ‘hex’), 0),
keyId: NumberLong(0)
}
},
operationTime: Timestamp({ t: 1617782400, i: 1 })
}

## 4. 性能测试
fgedu.net.cn> var start = new Date()
fgedu.net.cn> for (let i = 0; i < 10000; i++) { ... db.fgedu_collection.insertOne({id: i, name: "test" + i, value: Math.random() * 1000}) ... } fgedu.net.cn> var end = new Date()
fgedu.net.cn> print(“插入时间: ” + (end – start) + “毫秒”)
插入时间: 1200毫秒

fgedu.net.cn> var start = new Date()
fgedu.net.cn> db.fgedu_collection.find({id: {$gt: 5000}}).limit(1000)
fgedu.net.cn> var end = new Date()
fgedu.net.cn> print(“查询时间: ” + (end – start) + “毫秒”)
查询时间: 15毫秒

生产环境建议:在生产环境中,需要进行全面的验证测试,确保MongoDB服务正常运行,并且性能满足业务需求。from MongoDB视频:www.itpux.com

Part05-风哥经验总结与分享

5.1 MongoDB安装最佳实践

MongoDB安装的最佳实践建议:

# MongoDB安装最佳实践

## 系统选择
– 使用64位操作系统
– 选择稳定的Linux发行版
– 确保操作系统补丁更新

## 硬件配置
– 使用SSD存储
– 足够的内存(至少16GB)
– 多核CPU
– 高速网络

## 安装方式
– 生产环境推荐使用包管理器安装
– 开发环境可以使用二进制安装
– 容器环境使用Docker

## 目录规划
– 数据目录与日志目录分离
– 使用独立的磁盘分区
– 合理规划目录结构

## 安全配置
– 启用认证
– 创建强密码
– 限制网络访问
– 启用SSL/TLS

5.2 MongoDB初始化最佳实践

MongoDB初始化的最佳实践建议:

# MongoDB初始化最佳实践

## 系统优化
– 关闭透明大页
– 关闭NUMA
– 调整文件描述符限制
– 优化内核参数

## 配置文件
– 使用YAML格式配置文件
– 合理设置数据目录和日志目录
– 配置适当的网络参数
– 启用日志轮转

## 服务管理
– 使用systemd管理服务
– 设置开机自启
– 配置服务监控
– 定期检查服务状态

## 安全管理
– 创建管理员用户
– 配置基于角色的访问控制
– 定期更新密码
– 审计日志

## 性能优化
– 调整WiredTiger缓存大小
– 配置合理的索引
– 优化查询语句
– 监控性能指标

5.3 MongoDB安装常见问题解决

MongoDB安装常见问题的解决方案:

# 常见问题及解决方案

## 端口被占用
– 症状:启动MongoDB时报错”Address already in use”
– 解决方案:
– 检查是否有其他MongoDB进程在运行
– 使用不同的端口
– 停止占用端口的进程

## 权限问题
– 症状:启动MongoDB时报错”Permission denied”
– 解决方案:
– 检查目录权限
– 确保MongoDB用户有适当的权限
– 检查SELinux或防火墙设置

## 内存不足
– 症状:启动MongoDB时报错”Out of memory”
– 解决方案:
– 增加服务器内存
– 调整MongoDB内存使用参数
– 关闭其他占用内存的服务

## 数据目录问题
– 症状:启动MongoDB时报错”Failed to create directory”
– 解决方案:
– 检查数据目录是否存在
– 确保MongoDB用户有写权限
– 检查磁盘空间

## 副本集初始化失败
– 症状:初始化副本集时报错
– 解决方案:
– 检查网络连接
– 确保所有节点都已启动
– 检查keyfile配置
– 检查防火墙设置

风哥提示:MongoDB安装和初始化是一个关键的过程,需要仔细规划和执行。在遇到问题时,要及时查看日志文件,定位问题原因,并采取相应的解决方案。

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息