1. CentOS 7环境下MongoDB安装全指南
作为一款流行的NoSQL数据库,MongoDB在Web应用和大数据处理领域有着广泛应用。最近在部署一个数据分析项目时,我需要在CentOS 7服务器上配置MongoDB 4.4版本。虽然官方文档提供了基本指引,但在实际安装过程中还是遇到了不少需要特别注意的细节。下面就把完整的安装过程和踩坑经验分享给大家。
提示:本文基于CentOS 7.9最小化安装环境,所有操作都需要root权限或sudo执行。建议先使用
yum update更新系统到最新状态。
1.1 环境准备与依赖检查
在开始安装前,我们需要确保系统满足MongoDB的基本要求:
# 检查系统版本 cat /etc/redhat-release # 检查内存(建议至少2GB) free -h # 检查存储空间(建议至少10GB) df -hMongoDB官方提供了两种安装方式:通过配置yum仓库安装和直接下载rpm包安装。我推荐使用第一种方式,因为这样更方便后续的版本升级和管理。
2. 通过Yum仓库安装MongoDB
2.1 配置MongoDB官方仓库
首先创建MongoDB的repo文件:
vi /etc/yum.repos.d/mongodb-org-4.4.repo添加以下内容(以4.4版本为例):
[mongodb-org-4.4] name=MongoDB Repository baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.4/x86_64/ gpgcheck=1 enabled=1 gpgkey=https://www.mongodb.org/static/pgp/server-4.4.asc保存后执行仓库更新:
yum makecache2.2 安装MongoDB服务
执行安装命令:
yum install -y mongodb-org这个命令会安装以下组件:
- mongodb-org-server:核心服务程序
- mongodb-org-mongos:分片路由服务
- mongodb-org-shell:命令行客户端
- mongodb-org-tools:包括mongodump等工具
注意:不要单独安装某个组件,这样可能导致版本不兼容。官方建议始终安装mongodb-org元数据包。
3. MongoDB基础配置
3.1 目录结构与权限设置
MongoDB默认使用以下目录:
- 数据目录:/var/lib/mongo
- 日志目录:/var/log/mongodb
我们需要确保这些目录存在且权限正确:
mkdir -p /var/lib/mongo /var/log/mongodb chown -R mongod:mongod /var/lib/mongo /var/log/mongodb chmod 755 /var/lib/mongo /var/log/mongodb3.2 配置文件调整
编辑主配置文件:
vi /etc/mongod.conf几个关键配置项建议修改:
storage: dbPath: /var/lib/mongo journal: enabled: true systemLog: destination: file logAppend: true path: /var/log/mongodb/mongod.log net: port: 27017 bindIp: 0.0.0.0 # 如需远程访问,改为0.0.0.0 security: authorization: enabled # 启用认证(生产环境必须)重要:如果修改了bindIp,务必配置防火墙或安全组规则,只允许可信IP访问27017端口。
4. 服务管理与基本操作
4.1 启动与停止服务
使用systemctl管理MongoDB服务:
# 启动服务 systemctl start mongod # 设置开机启动 systemctl enable mongod # 检查状态 systemctl status mongod # 停止服务 systemctl stop mongod # 重启服务 systemctl restart mongod4.2 验证安装
连接MongoDB shell验证安装:
mongo在shell中执行以下命令查看版本信息:
db.version()4.3 创建管理员用户
在生产环境中,必须创建至少一个管理员用户:
use admin db.createUser({ user: "admin", pwd: "yourStrongPassword", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] })创建后需要重新启动MongoDB使认证生效:
systemctl restart mongod5. 常见问题排查
5.1 服务启动失败
如果遇到服务无法启动,首先检查日志:
journalctl -u mongod -n 50 --no-pager常见问题及解决方案:
| 错误现象 | 可能原因 | 解决方案 |
|---|---|---|
| 无法绑定端口 | 端口被占用或权限不足 | 检查27017端口是否空闲,或修改mongod.conf中的端口 |
| 数据目录权限错误 | mongod用户无写入权限 | 执行chown mongod:mongod /var/lib/mongo -R |
| 认证失败 | 密码错误或用户不存在 | 检查用户名密码,确认authSource参数正确 |
5.2 性能调优建议
对于生产环境,建议调整以下内核参数:
# 增加文件描述符限制 echo "mongod soft nofile 64000" >> /etc/security/limits.conf echo "mongod hard nofile 64000" >> /etc/security/limits.conf # 调整透明大页设置 echo "never" > /sys/kernel/mm/transparent_hugepage/enabled echo "never" > /sys/kernel/mm/transparent_hugepage/defrag6. 进阶配置选项
6.1 启用分片集群
如果需要配置分片集群,需要修改配置文件:
sharding: clusterRole: "configsvr" # 或"shardsvr"/"mongos"6.2 启用TLS加密
生成证书后配置TLS:
net: tls: mode: requireTLS certificateKeyFile: /path/to/mongodb.pem CAFile: /path/to/ca.pem6.3 配置副本集
编辑配置文件添加副本集配置:
replication: replSetName: "rs0"初始化副本集:
rs.initiate({ _id: "rs0", members: [ { _id: 0, host: "primary.example.com:27017" }, { _id: 1, host: "secondary1.example.com:27017" }, { _id: 2, host: "secondary2.example.com:27017" } ] })7. 备份与恢复策略
7.1 使用mongodump备份
mongodump --uri="mongodb://admin:password@localhost:27017" --out=/backup/mongodb7.2 使用mongorestore恢复
mongorestore --uri="mongodb://admin:password@localhost:27017" /backup/mongodb7.3 定时备份脚本示例
创建/usr/local/bin/mongodb-backup.sh:
#!/bin/bash DATE=$(date +%Y%m%d) BACKUP_DIR="/backup/mongodb/$DATE" mkdir -p $BACKUP_DIR mongodump --uri="mongodb://admin:password@localhost:27017" --out=$BACKUP_DIR find /backup/mongodb -type d -mtime +7 -exec rm -rf {} \;添加到crontab:
0 2 * * * /usr/local/bin/mongodb-backup.sh8. 监控与维护
8.1 启用免费监控
db.enableFreeMonitoring()8.2 使用MongoDB Atlas监控
注册Atlas账户后获取监控代理:
curl -sSL https://www.mongodb.com/try/download/compass -o mongodb-compass.rpm yum localinstall mongodb-compass.rpm8.3 日常维护命令
// 查看数据库状态 db.serverStatus() // 查看当前操作 db.currentOp() // 终止长时间运行的操作 db.killOp(opid)9. 性能优化技巧
9.1 索引优化
// 创建索引 db.collection.createIndex({ field: 1 }) // 查看索引 db.collection.getIndexes() // 删除索引 db.collection.dropIndex("index_name")9.2 查询优化
使用explain分析查询:
db.collection.find({ field: "value" }).explain("executionStats")9.3 内存配置
在/etc/mongod.conf中调整:
storage: wiredTiger: engineConfig: cacheSizeGB: 4 # 根据服务器内存调整10. 安全加固措施
10.1 网络隔离
net: bindIp: 127.0.0.1,10.0.0.100 # 只绑定特定IP10.2 启用审计日志
auditLog: destination: file format: JSON path: /var/log/mongodb/audit.log10.3 定期轮换日志
# 日志轮转配置 vi /etc/logrotate.d/mongodb /var/log/mongodb/*.log { daily rotate 30 compress delaycompress missingok notifempty sharedscripts postrotate /bin/kill -SIGUSR1 $(cat /var/run/mongodb/mongod.pid 2>/dev/null) 2>/dev/null || true endscript }在实际部署过程中,我发现MongoDB的性能对文件系统选择非常敏感。在CentOS 7上,使用XFS文件系统相比ext4可以获得更好的写入性能。另外,如果服务器有多个磁盘,将journal目录放在单独的磁盘上也能显著提升性能。