1. CentOS 7环境下MongoDB安装全指南
在Linux服务器环境中部署NoSQL数据库时,MongoDB凭借其灵活的文档存储结构和出色的水平扩展能力,成为许多开发团队的首选方案。作为长期使用CentOS 7的系统管理员,我发现在这个经典的企业级Linux发行版上配置MongoDB确实会遇到一些特有的挑战,特别是当官方源不再维护后,很多新手会陷入依赖包缺失的困境。本文将基于实际运维经验,详细介绍三种不同的安装方式及其适用场景,同时会重点解决安装过程中常见的EPEL源报错问题。
2. 环境准备与基础配置
2.1 系统更新与依赖检查
在开始安装前,建议先执行完整的系统更新。我遇到过不少案例因为漏掉这个步骤导致后续的依赖冲突:
sudo yum update -y sudo yum install -y libcurl openssl检查SELinux状态也很关键,MongoDB的默认配置可能与严格模式下的SELinux策略冲突。临时禁用或设置为宽容模式可以避免后续权限问题:
getenforce # 查看当前状态 sudo setenforce 0 # 临时设置为Permissive模式2.2 解决EPEL源报错问题
最近很多用户反馈在执行yum安装时遇到repomd.xml下载错误,特别是使用默认CentOS镜像源时。这是因为官方已经将CentOS 7的基础源迁移到了vault.centos.org。以下是经过验证的解决方案:
- 备份原有repo文件:
sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak- 使用阿里云镜像源(更稳定):
sudo curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo- 清理并重建缓存:
sudo yum clean all sudo yum makecache注意:如果仍然遇到
[Errno 14]问题,可以尝试将mirrorlist注释掉,直接使用baseurl指向阿里云镜像地址。
3. 官方仓库安装法(推荐方案)
3.1 配置MongoDB官方仓库
MongoDB官方提供了专为RHEL/CentOS 7优化的软件仓库,这是目前最可靠的安装方式。以下是详细步骤:
- 创建repo文件:
sudo tee /etc/yum.repos.d/mongodb-org-4.4.repo <<EOF [mongodb-org-4.4] name=MongoDB Repository baseurl=https://repo.mongodb.org/yum/redhat/7/mongodb-org/4.4/x86_64/ gpgcheck=1 enabled=1 gpgkey=https://www.mongodb.org/static/pgp/server-4.4.asc EOF- 安装最新稳定版(包含所有组件):
sudo yum install -y mongodb-org- 验证安装版本:
mongod --version3.2 关键目录结构说明
安装完成后需要了解几个重要路径:
- 配置文件:
/etc/mongod.conf - 数据目录:
/var/lib/mongo(默认) - 日志文件:
/var/log/mongodb/mongod.log - 系统服务:
/usr/lib/systemd/system/mongod.service
实操技巧:生产环境中建议将数据目录挂载到独立磁盘分区,我在AWS EC2上通常会单独挂载EBS卷到/data目录,然后在配置文件中修改
storage.dbPath参数。
4. 手动安装社区版(适用于内网环境)
4.1 下载与解压二进制包
当服务器无法连接外部网络时,可以下载离线包手动安装。以下是具体步骤:
- 从官网获取最新社区版(以4.4.23为例):
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.4.23.tgz- 解压到指定目录:
tar -zxvf mongodb-linux-x86_64-rhel70-4.4.23.tgz -C /opt sudo mv /opt/mongodb-linux-x86_64-rhel70-4.4.23 /opt/mongodb- 创建必要目录:
sudo mkdir -p /data/db sudo chown -R `whoami` /data/db4.2 配置环境变量与服务
手动安装需要自行配置启动脚本,这是我常用的systemd服务模板:
sudo tee /etc/systemd/system/mongod.service <<EOF [Unit] Description=MongoDB Database Server After=network.target [Service] User=mongodb Group=mongodb ExecStart=/opt/mongodb/bin/mongod --config /etc/mongod.conf PIDFile=/var/run/mongodb/mongod.pid Restart=always [Install] WantedBy=multi-user.target EOF然后重新加载systemd并启动服务:
sudo systemctl daemon-reload sudo systemctl start mongod5. 使用Docker容器部署(开发环境推荐)
5.1 Docker环境准备
对于快速搭建测试环境,Docker是最便捷的方式。首先确保已安装Docker:
sudo yum install -y docker sudo systemctl start docker5.2 运行MongoDB容器
使用官方镜像启动容器(带数据持久化):
sudo docker run --name mongo-dev \ -v /data/mongodb:/data/db \ -p 27017:27017 \ -d mongo:4.4 --auth开发技巧:我习惯在docker-compose中配置MongoDB,可以方便地集成到项目中。下面是一个典型的docker-compose.yml片段:
services: mongodb: image: mongo:4.4 ports: - "27017:27017" volumes: - ./mongo-data:/data/db environment: MONGO_INITDB_ROOT_USERNAME: admin MONGO_INITDB_ROOT_PASSWORD: yourpassword
6. 安全配置与基础优化
6.1 启用身份验证
刚安装的MongoDB默认没有启用访问控制,这是非常危险的。以下是配置步骤:
- 连接mongo shell:
mongo- 创建管理员账户:
use admin db.createUser({ user: "admin", pwd: "yourpassword", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] })- 修改配置文件启用认证:
security: authorization: enabled- 重启服务使配置生效:
sudo systemctl restart mongod6.2 性能调优参数
根据服务器配置调整以下参数(在/etc/mongod.conf中):
storage: wiredTiger: engineConfig: cacheSizeGB: 2 # 建议为物理内存的50-60% systemLog: logAppend: true destination: file path: /var/log/mongodb/mongod.log logRotate: reopen net: port: 27017 bindIp: 127.0.0.1 # 生产环境应限制访问IP7. 常见问题排查指南
7.1 启动失败问题分析
当遇到mongod服务无法启动时,按以下步骤排查:
- 检查日志获取详细错误:
journalctl -xe -u mongod- 常见错误及解决方案:
| 错误现象 | 可能原因 | 解决方案 |
|---|---|---|
| Failed to unlink socket file | 旧进程未完全退出 | 执行sudo rm /tmp/mongodb-27017.sock |
| Permission denied | 数据目录权限问题 | sudo chown -R mongod:mongod /var/lib/mongo |
| Cannot open /proc/meminfo | 容器内权限不足 | 添加--privileged参数运行容器 |
7.2 连接问题处理
如果无法从远程连接MongoDB,检查以下几点:
- 确认防火墙规则:
sudo firewall-cmd --add-port=27017/tcp --permanent sudo firewall-cmd --reload- 检查bindIp配置:
net: bindIp: 0.0.0.0 # 允许所有IP连接(仅限测试环境)- 测试telnet连接:
telnet your_server_ip 270178. 日常维护与管理技巧
8.1 备份与恢复策略
我常用的mongodump备份脚本示例:
#!/bin/bash BACKUP_DIR=/backups/mongodb DATE=$(date +%Y%m%d) mongodump --host localhost --port 27017 \ --username admin --password yourpassword \ --authenticationDatabase admin \ --out $BACKUP_DIR/$DATE对应的恢复命令:
mongorestore --host new_server --port 27017 \ --username admin --password yourpassword \ --authenticationDatabase admin \ /backups/mongodb/202308158.2 监控与性能查看
几个实用的诊断命令:
- 查看当前操作:
db.currentOp()- 检查集合状态:
db.collection.stats()- 查看慢查询(需先开启profiling):
db.setProfilingLevel(1, 50) # 记录超过50ms的操作 db.system.profile.find().sort({$natural:-1}).limit(10)在CentOS 7上稳定运行MongoDB的关键是处理好系统依赖和权限配置。根据我的经验,使用官方仓库安装是最可靠的方式,特别是在处理复杂的依赖关系时。对于需要特定版本或自定义编译选项的场景,手动安装二进制包则更为灵活。无论采用哪种方式,安装后务必立即配置身份验证和网络访问控制,这是保障数据库安全的第一道防线。