Red Hat Enterprise Linux 9用户必看:GitHub明星项目MongoDB详解

云信安装大师
90
AI 质量分
10 5 月, 2025
3 分钟阅读
0 阅读

Red Hat Enterprise Linux 9用户必看:GitHub明星项目MongoDB详解

引言

MongoDB作为NoSQL数据库的明星项目,在GitHub上拥有超过25k星标,是处理非结构化数据的绝佳选择。本文将手把手教你如何在Red Hat Enterprise Linux 9(RHEL 9)上安装、配置和使用MongoDB。

准备工作

在开始前,请确保:
– 已安装RHEL 9操作系统
– 拥有sudo权限的用户账户
– 至少2GB可用内存(生产环境建议8GB以上)
– 稳定的网络连接

第一步:添加MongoDB官方仓库

MongoDB不在默认的RHEL仓库中,我们需要手动添加官方仓库:

代码片段
# 创建repo文件
sudo tee /etc/yum.repos.d/mongodb-org-6.0.repo <<EOF
[mongodb-org-6.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/9/mongodb-org/6.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-6.0.asc
EOF

参数说明
baseurl: MongoDB针对RHEL 9的官方仓库地址
gpgcheck=1: 启用GPG签名验证确保软件包安全
gpgkey: MongoDB的官方GPG密钥地址

第二步:安装MongoDB服务

执行以下命令安装最新稳定版:

代码片段
sudo dnf install -y mongodb-org

安装完成后验证版本:

代码片段
mongod --version

常见问题
如果遇到依赖错误,可能是缺少libcurl等基础库,可以运行:

代码片段
sudo dnf install libcurl openssl xz-libs libzstd -y

第三步:启动MongoDB服务

RHEL 9使用systemd管理服务:

代码片段
# 启动服务并设置开机自启
sudo systemctl start mongod
sudo systemctl enable mongod

# 检查服务状态
sudo systemctl status mongod

预期输出应显示”active (running)”状态。

第四步:基本安全配置

默认安装的MongoDB没有启用认证,我们先设置管理员账户:

  1. 连接到MongoDB shell:
代码片段
mongosh
  1. 在MongoDB shell中执行:
代码片段
// 切换到admin数据库
use admin

// 创建管理员用户(请替换yourpassword为强密码)
db.createUser({
  user: "admin",
  pwd: "yourpassword",
  roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
})

// 退出shell
exit
  1. 启用认证:
    编辑配置文件/etc/mongod.conf,找到security:部分修改为:
代码片段
security:
   authorization: enabled 
  1. 重启服务使配置生效:
代码片段
sudo systemctl restart mongod 

MongoDB基本操作示例

让我们通过一个完整的例子演示CRUD操作:

  1. 连接数据库(需要认证):
代码片段
mongosh -u admin -p yourpassword --authenticationDatabase admin 
  1. 创建并使用新数据库
代码片段
use mytestdb 

// JavaScript语法插入文档(类似JSON)
db.users.insertOne({
   name: "张三",
   age: 28,
   skills: ["Java", "Python", "SQL"],
   join_date: new Date()
})

// Python语法风格也可以工作(注意实际仍在JavaScript环境中)
db.users.insert_one({
   name: "李四",
   age: 32,
   skills: ["JavaScript", "Node.js"],
   join_date: new Date()
})
  1. 查询数据
代码片段
// 查找所有文档 
db.users.find()

//带条件的查询(年龄大于30)
db.users.find({ age: { $gt:30 } })

//格式化输出结果 
db.users.find().pretty()
  1. 更新数据
代码片段
//更新张三的年龄为29岁 
db.users.updateOne(
   { name:"张三" },
   { $set:{ age:29 } }
)
  1. 删除数据
代码片段
//删除李四的记录 
db.users.deleteOne({ name:"李四" })

MongoDB Compass图形界面(可选)

对于习惯GUI的用户,可以安装官方图形工具:

  1. 下载RPM包
代码片段
wget https://downloads.mongodb.com/compass/mongodb-compass-1.36.4.x86_64.rpm 
  1. 安装
代码片段
sudo rpm -i mongodb-compass-1.36.4.x86_64.rpm 
  1. 启动
    在应用菜单搜索”MongoDB Compass”或终端运行:
代码片段
mongodb-compass &  

SELinux配置注意事项

RHEL默认启用SELinux,可能需要调整策略:

  1. 检查SELinux状态
代码片段
getenforce  

如果返回”Enforcing”,则需要额外配置。

  1. 允许MongoDB网络访问
代码片段
sudo setsebool -P mongodb_can_connect=1  
sudo semanage port -a -t mongod_port_t -p tcp <自定义端口号>  

Firewalld防火墙配置

如果启用了防火墙,需要开放27017端口:

代码片段
sudo firewall-cmd --add-port=27017/tcp --permanent  
sudo firewall-cmd --reload  

MongoDB性能优化建议

  1. 调整WiredTiger缓存大小
    编辑/etc/mongod.conf中的WiredTiger部分:
代码片段
storage:
   wiredTiger:
      engineConfig:
         cacheSizeGB: <物理内存的50%>
  1. 启用日志压缩
代码片段
storage:
   journal:
      enabled: true   
      compressor: zstd   
  1. 定期维护命令
代码片段
//在mongosh中执行定期维护命令(建议每月一次)
db.repairDatabase()   
db.adminCommand({ compact:'collectionName' })   

MongoDB备份与恢复示例

A) mongodump/mongorestore工具使用

  1. 备份整个数据库:
代码片段
mongodump --uri="mongodb://admin:<yourpassword>@localhost:27017" --out=/backup/mongodb/
  1. 恢复数据库:
代码片段
mongorestore --uri="mongodb://admin:<yourpassword>@localhost:27017" /backup/mongodb/

B) BSON格式热备份(需停机)

1.停止服务:

代码片段
sudo systemctl stop mongod   

2.复制数据目录:

代码片段
rsync -av /var/lib/mongo /backup/mongo_backup   

3.重启服务:

代码片段
sudo systemctl start mongod   

RHEL特定优化技巧

1.调整系统限制(编辑/etc/security/limits.conf):

代码片段
* soft nofile    64000   
* hard nofile    64000   
* soft nproc     64000   
* hard nproc     64000    
soft memlock     unlimited    
hard memlock     unlimited    

2.禁用透明大页(推荐):

编辑/etc/default/grub添加:

代码片段
transparent_hugepage=never    

然后更新grub:

代码片段
grub2-mkconfig -o /boot/grub2/grub.cfg    
reboot    

3.使用XFS文件系统(最佳实践):

如果/data目录单独挂载,建议格式化为XFS:

代码片段
mkfs.xfs /dev/sdX    
mount -o noatime,nobarrier /dev/sdX /data    
chown mongod.mongod /data    
systemctl restart mongod    

MongoDB监控方案

A)内置工具

1.服务器状态:

在mongosh中执行:

代码片段
db.serverStatus()    
db.stats()    
show dbs     
show collections     
show users     
show roles     
show profile     
show logs     
show log global     
show log startupwarnings      
show log rs      
show log sharding      
show log all       
getLog '*'        
getLog 'startupWarnings'        
getLog 'global'        
getLog 'rs'        
getLog 'sharding'        
getLog 'all'         
printReplicationInfo()          
printShardingStatus()          
printSlaveReplicationInfo()          
printCollectionStats()          
printIndexStats()          
printShardingDistribution()          
printShardingSizes()          
printShardingBalancerStatus()          
printShardingChunks("database.collection")           
printShardingDatabases()           
printShardingCollections("database")            
printShardingTags("database.collection")             

//查看慢查询(需先设置)
db.setProfilingLevel(1,50) //记录超过50ms的操作      
db.system.profile.find().limit(10).sort({ts:-1}).pretty()      

//查看当前连接数      
db.serverStatus().connections      

//查看内存使用情况      
db.serverStatus().mem      
``

B)第三方工具推荐

1.Prometheus + Grafana监控方案:

安装exporter组件:

代码片段
wget https://github.com/percona/mongodb_exporter/releases/download/v0.*.*/mongodb_exporter-0.*.*.linux-amd64.tar.gz    

tar zxvf mongodb_exporter*.tar.gz    
./mongodb_exporter --mongodb.username=admin --mongodb.password=<yourpassword> &    

#然后在Prometheus中添加job监控此exporter端口(默认9216)    

#Grafana导入3119号Dashboard即可获得专业监控视图    
``

2.Percona PMM(全功能监控):

参考Percona官方文档安装PMM Server和Client组件。


通过本文详细的步骤指导,您应该已经在RHEL9上成功部署了生产可用的MongoDB环境。记住定期备份数据和更新补丁是运维的关键。如需更高级的功能如分片集群或副本集部署,可以参考MongoDB官方文档进行扩展配置。

原创 高质量