一、安装 MongoDB 6.0
# 1. 添加 MongoDB 6.0 官方源
cat > /etc/yum.repos.d/mongodb-org-6.0.repo << 'EOF'
[mongodb-org-6.0]
name=MongoDB 6.0 Repository
baseurl=https://repo.mongodb.org/yum/redhat/7/mongodb-org/6.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-6.0.asc
EOF
# 2. 安装(会自动安装 mongod + mongosh + 工具集)
yum install -y mongodb-org
# 3. 验证版本
mongod --version
二、准备 /data/mongo 数据目录
假设你之前已将独立硬盘挂载到 /data:
# 1. 创建 MongoDB 数据目录
mkdir -p /data/mongo
# 2. 设置目录所有者(必须)
chown -R mongod:mongod /data/mongo
# 3. 设置目录权限
chmod 755 /data/mongo
三、处理 SELinux(关键步骤)
CentOS 7 默认开启 SELinux,直接改 dbPath 到 /data 会导致启动失败。
方案 A:为 /data/mongo 设置 SELinux 上下文(推荐,生产环境安全)
# 1. 查看当前 SELinux 状态
getenforce
# 如果是 Enforcing,继续下面步骤
# 2. 给 /data/mongo 打上 mongod 需要的安全上下文
semanage fcontext -a -t mongod_var_lib_t "/data/mongo(/.*)?"
# 3. 应用上下文
restorecon -Rv /data/mongo
# 4. 允许 mongod 使用非默认端口(如果后续改了端口)
# setsebool -P mongod_can_netbind 1
如果提示
semanage: command not found,先安装:yum install -y policycoreutils-python
方案 B:临时/永久关闭 SELinux(不推荐生产环境)
# 临时关闭(立即生效,重启失效)
setenforce 0
# 永久关闭(需重启)
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
四、修改 MongoDB 配置文件
# 备份原配置
cp /etc/mongod.conf /etc/mongod.conf.bak
# 修改 dbPath
sed -i 's|dbPath: /var/lib/mongo|dbPath: /data/mongo|' /etc/mongod.conf
# 查看确认
cat /etc/mongod.conf | grep dbPath
五、启动 MongoDB
# 重载 systemd
systemctl daemon-reload
# 启动并设置开机自启
systemctl start mongod
systemctl enable mongod
# 查看状态(确认 Active: active (running))
systemctl status mongod
# 查看日志(如有报错)
tail -n 50 /var/log/mongodb/mongod.log
六、安全配置(创建管理员 + 启用认证)
# 进入 mongo shell
mongosh
在 shell 中执行:
// 切换到 admin 库
use admin
// 创建超级管理员
db.createUser({
user: "admin",
pwd: "你的强密码",
roles: [
{ role: "userAdminAnyDatabase", db: "admin" },
{ role: "dbAdminAnyDatabase", db: "admin" },
{ role: "readWriteAnyDatabase", db: "admin" }
]
})
exit
然后启用认证:
# 编辑配置文件
cat >> /etc/mongod.conf << 'EOF'
security:
authorization: enabled
EOF
# 重启生效
systemctl restart mongod
# 验证认证登录
mongosh -u admin -p --authenticationDatabase admin
七、防火墙配置
# 仅允许内网访问 MongoDB(推荐)
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.0.0/16" port protocol="tcp" port="27017" accept'
# 重载
firewall-cmd --reload
# 查看
firewall-cmd --list-all
八、完整验证清单
| 检查项 | 命令 |
|---|---|
| 服务状态 | systemctl status mongod |
| 数据目录权限 | ls -Zd /data/mongo |
| SELinux 上下文 | ls -Zd /data/mongo(应显示 mongod_var_lib_t) |
| 端口监听 | ss -tlnp | grep 27017 |
| 认证登录 | mongosh -u admin -p --authenticationDatabase admin |
| 查看数据库 | show dbs |
| 日志 | tail -f /var/log/mongodb/mongod.log |
九、常见问题
| 问题 | 原因 | 解决 |
|---|---|---|
Failed to start mongod.service |
SELinux 阻止访问 /data/mongo | 执行方案 A 的semanage + restorecon |
Permission denied |
目录所有者不是 mongod | chown -R mongod:mongod /data/mongo |
mongosh: command not found |
未安装 mongosh | yum install -y mongodb-mongosh |
Data directory /data/mongo not found |
目录未创建 | mkdir -p /data/mongo |