一、安装 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