本文档风哥主要介绍MongoDB systemd服务管理,包括systemd基础概念、MongoDB服务管理基础概念、服务管理核心概念、systemd服务规划、MongoDB服务规划、服务管理规划、systemd服务配置、MongoDB服务配置、服务管理实施方案、systemd服务管理实战案例、MongoDB服务管理实战案例、服务监控与故障处理实战等内容,风哥教程参考MongoDB官方文档Administration内容编写,适合DBA人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。
Part01-基础概念与理论知识
1.1 systemd基础概念
systemd是现代Linux系统的初始化系统和服务管理器,负责启动、管理和监控系统服务。更多视频教程www.fgedu.net.cn
- 单元(Unit):systemd管理的基本单位,包括服务、套接字、设备等
- 服务(Service):系统服务的管理单元
- 目标(Target):一组相关的单元,用于实现特定的系统状态
- 依赖(Dependency):单元之间的依赖关系
- 控制组(CGroup):用于资源管理和限制
1.2 MongoDB服务管理基础概念
MongoDB服务管理包括服务的启动、停止、重启、监控等方面。
## 服务类型
– **单节点服务:** 单个MongoDB实例
– **副本集服务:** 多个MongoDB实例组成的副本集
– **分片集群服务:** 多个分片组成的集群
## 服务状态
– **运行中(Running):** 服务正常运行
– **停止(Stopped):** 服务已停止
– **启动中(Starting):** 服务正在启动
– **停止中(Stopping):** 服务正在停止
– **失败(Failed):** 服务启动失败
## 服务配置
– **配置文件:** MongoDB的配置参数
– **环境变量:** 影响服务运行的环境变量
– **命令行参数:** 启动服务时的命令行参数
## 服务监控
– **状态监控:** 服务的运行状态
– **性能监控:** 服务的性能指标
– **日志监控:** 服务的日志输出
– **健康检查:** 服务的健康状态
1.3 服务管理核心概念
服务管理的核心概念包括服务的生命周期管理、资源管理、依赖管理等。
## 生命周期管理
– **启动(Start):** 启动服务
– **停止(Stop):** 停止服务
– **重启(Restart):** 重启服务
– **重载(Reload):** 重载服务配置
– **状态(Status):** 查看服务状态
## 资源管理
– **内存限制:** 限制服务使用的内存
– **CPU限制:** 限制服务使用的CPU
– **磁盘限制:** 限制服务使用的磁盘空间
– **网络限制:** 限制服务的网络带宽
## 依赖管理
– **依赖关系:** 服务之间的依赖关系
– **启动顺序:** 服务的启动顺序
– **停止顺序:** 服务的停止顺序
– **依赖检测:** 检测依赖是否满足
## 自动管理
– **自动启动:** 系统启动时自动启动服务
– **自动重启:** 服务失败时自动重启
– **自动恢复:** 服务异常时自动恢复
– **健康检查:** 定期检查服务健康状态
Part02-生产环境规划与建议
2.1 systemd服务规划
在生产环境中,需要对systemd服务进行合理规划:
## 服务配置
– 服务文件位置:/etc/systemd/system/
– 服务文件命名:mongodb.service
– 服务文件权限:644
– 服务文件所有者:root
## 服务参数
– 工作目录:/mongodb/app
– 运行用户:mongodb
– 运行组:mongodb
– 环境变量:PATH, MONGODB_HOME等
## 资源限制
– 内存限制:根据服务器配置设置
– CPU限制:根据服务器配置设置
– 打开文件数:65536
– 进程数:无限制
## 自动管理
– 自动启动:enabled
– 自动重启:on-failure
– 重启延迟:10秒
– 启动超时:30秒
## 依赖关系
– 网络服务:network.target
– 文件系统:local-fs.target
– 时间同步:time-sync.target
2.2 MongoDB服务规划
在生产环境中,需要对MongoDB服务进行合理规划:
## 服务架构
– 单节点部署:适用于测试和开发环境
– 副本集部署:适用于生产环境
– 分片集群部署:适用于大规模生产环境
## 服务配置
– 配置文件:/mongodb/conf/mongod.conf
– 数据目录:/mongodb/fgdata
– 日志目录:/mongodb/log
– 运行参数:根据实际需求调整
## 服务监控
– 状态监控:systemctl status mongodb
– 性能监控:mongostat, mongotop
– 日志监控:tail -f /mongodb/log/mongod.log
– 健康检查:定期检查服务状态
## 服务安全
– 运行用户:mongodb
– 文件权限:数据目录755,配置文件644
– 网络访问:限制绑定IP
– 认证授权:启用认证
## 服务维护
– 定期备份:使用cron定时备份
– 定期清理:清理日志和临时文件
– 定期更新:更新MongoDB版本
– 定期优化:优化数据库性能
2.3 服务管理规划
在生产环境中,需要对服务管理进行合理规划:
## 管理策略
– 集中管理:使用systemd统一管理
– 自动化管理:使用脚本自动化管理
– 监控管理:使用监控工具监控服务
– 故障管理:制定故障处理流程
## 管理工具
– systemctl:systemd服务管理工具
– journalctl:日志管理工具
– mongosh:MongoDB管理工具
– 第三方监控工具:Prometheus, Grafana等
## 管理流程
– 服务部署:安装和配置服务
– 服务启动:启动服务并验证
– 服务监控:定期监控服务状态
– 服务维护:定期维护和优化服务
– 服务升级:升级服务版本
– 服务故障:处理服务故障
## 管理文档
– 服务配置文档:记录服务配置
– 服务维护文档:记录维护流程
– 服务故障文档:记录故障处理
– 服务升级文档:记录升级流程
Part03-生产环境项目实施方案
3.1 systemd服务配置
3.1.1 创建systemd服务文件
## 创建服务文件
$ sudo vi /etc/systemd/system/mongodb.service
## 服务文件内容
[Unit]
Description=MongoDB Database Server
Documentation=https://docs.mongodb.org/manual
After=network.target
[Service]
User=mongodb
Group=mongodb
Environment=”PATH=/mongodb/app/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin”
Environment=”MONGODB_HOME=/mongodb/app”
ExecStart=/mongodb/app/bin/mongod –config /mongodb/conf/mongod.conf
ExecStop=/mongodb/app/bin/mongod –config /mongodb/conf/mongod.conf –shutdown
Restart=on-failure
RestartSec=10
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
## 重新加载systemd配置
$ sudo systemctl daemon-reload
## 启用服务
$ sudo systemctl enable mongodb
## 启动服务
$ sudo systemctl start mongodb
## 查看服务状态
$ sudo systemctl status mongodb
3.1.2 配置服务资源限制
## 修改服务文件
$ sudo vi /etc/systemd/system/mongodb.service
## 添加资源限制
[Service]
# 其他配置…
LimitNOFILE=65536
LimitNPROC=65536
LimitCORE=infinity
LimitAS=infinity
## 重新加载systemd配置
$ sudo systemctl daemon-reload
## 重启服务
$ sudo systemctl restart mongodb
## 查看资源限制
$ sudo systemctl show mongodb | grep Limit
3.2 MongoDB服务配置
3.2.1 配置MongoDB配置文件
## 创建配置文件
$ sudo vi /mongodb/conf/mongod.conf
## 配置文件内容
# mongod.conf
storage:
dbPath: /mongodb/fgdata
journal:
enabled: true
ystemLog:
destination: file
logAppend: true
path: /mongodb/log/mongod.log
net:
port: 27017
bindIp: 0.0.0.0
processManagement:
fork: false # systemd管理时设置为false
security:
authorization: enabled
## 重启服务
$ sudo systemctl restart mongodb
## 验证配置
$ /mongodb/app/bin/mongosh -u fgedu -p fgedu123 –authenticationDatabase admin
fgedu.net.cn> db.serverStatus()
3.2.2 配置服务环境变量
## 创建环境变量文件
$ sudo vi /etc/systemd/system/mongodb.service.d/environment.conf
## 环境变量内容
[Service]
Environment=”MONGODB_HOME=/mongodb/app”
Environment=”PATH=/mongodb/app/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin”
Environment=”MONGODB_CONFIG_PATH=/mongodb/conf/mongod.conf”
## 重新加载systemd配置
$ sudo systemctl daemon-reload
## 重启服务
$ sudo systemctl restart mongodb
## 验证环境变量
$ sudo systemctl show mongodb | grep Environment
3.3 服务管理实施方案
3.3.1 服务日常管理
## 启动服务
$ sudo systemctl start mongodb
## 停止服务
$ sudo systemctl stop mongodb
## 重启服务
$ sudo systemctl restart mongodb
## 重载配置
$ sudo systemctl reload mongodb
## 查看服务状态
$ sudo systemctl status mongodb
## 查看服务启用状态
$ sudo systemctl is-enabled mongodb
## 禁用服务
$ sudo systemctl disable mongodb
## 启用服务
$ sudo systemctl enable mongodb
## 查看服务日志
$ sudo journalctl -u mongodb
$ sudo journalctl -u mongodb -f
$ sudo journalctl -u mongodb –since “1 hour ago”
3.3.2 服务监控与告警
## 配置systemd服务监控
$ sudo vi /etc/systemd/system/mongodb.service
## 添加监控配置
[Service]
# 其他配置…
Restart=on-failure
RestartSec=10
StartLimitInterval=60
StartLimitBurst=3
## 重新加载systemd配置
$ sudo systemctl daemon-reload
## 重启服务
$ sudo systemctl restart mongodb
## 配置日志监控
$ sudo vi /etc/rsyslog.d/mongodb.conf
if $programname == ‘mongod’ then /var/log/mongodb/mongod.log
& stop
## 重启rsyslog服务
$ sudo systemctl restart rsyslog
## 配置监控脚本
$ cat > /mongodb/scripts/monitor.sh << 'EOF'
#!/bin/bash
# monitor.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
if ! systemctl is-active --quiet mongodb; then
echo "MongoDB service is not running!"
# 发送告警
# echo "MongoDB service is down" | mail -s "MongoDB Alert" admin@fgedu.net.cn
fi
EOF
$ chmod +x /mongodb/scripts/monitor.sh
$ crontab -e
*/5 * * * * /mongodb/scripts/monitor.sh
Part04-生产案例与实战讲解
4.1 systemd服务管理实战案例
以下是systemd服务管理的实战案例:
## 环境信息
– MongoDB版本:5.0.13
– 操作系统:Oracle Linux 9.3
– 服务文件:/etc/systemd/system/mongodb.service
## 实施步骤
### 1. 创建systemd服务文件
$ sudo vi /etc/systemd/system/mongodb.service
[Unit]
Description=MongoDB Database Server
Documentation=https://docs.mongodb.org/manual
After=network.target
[Service]
User=mongodb
Group=mongodb
Environment=”PATH=/mongodb/app/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin”
Environment=”MONGODB_HOME=/mongodb/app”
ExecStart=/mongodb/app/bin/mongod –config /mongodb/conf/mongod.conf
ExecStop=/mongodb/app/bin/mongod –config /mongodb/conf/mongod.conf –shutdown
Restart=on-failure
RestartSec=10
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
### 2. 配置MongoDB配置文件
$ sudo vi /mongodb/conf/mongod.conf
storage:
dbPath: /mongodb/fgdata
journal:
enabled: true
systemLog:
destination: file
logAppend: true
path: /mongodb/log/mongod.log
net:
port: 27017
bindIp: 0.0.0.0
processManagement:
fork: false
security:
authorization: enabled
### 3. 重新加载systemd配置
$ sudo systemctl daemon-reload
### 4. 启用并启动服务
$ sudo systemctl enable mongodb
$ sudo systemctl start mongodb
### 5. 验证服务状态
$ sudo systemctl status mongodb
● mongodb.service – MongoDB Database Server
Loaded: loaded (/etc/systemd/system/mongodb.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2024-01-01 10:00:00 CST; 1min ago
Docs: https://docs.mongodb.org/manual
Main PID: 12345 (mongod)
Tasks: 20
Memory: 1.0G
CGroup: /system.slice/mongodb.service
└─12345 /mongodb/app/bin/mongod –config /mongodb/conf/mongod.conf
### 6. 管理服务
$ sudo systemctl stop mongodb
$ sudo systemctl start mongodb
$ sudo systemctl restart mongodb
$ sudo systemctl reload mongodb
### 7. 查看服务日志
$ sudo journalctl -u mongodb
$ sudo journalctl -u mongodb -f
4.2 MongoDB服务管理实战案例
以下是MongoDB服务管理的实战案例:
## 环境信息
– MongoDB版本:5.0.13
– 操作系统:Oracle Linux 9.3
– 服务文件:/etc/systemd/system/mongodb.service
## 实施步骤
### 1. 创建MongoDB用户和目录
$ sudo groupadd mongodb
$ sudo useradd -g mongodb -s /bin/bash -m mongodb
$ sudo mkdir -p /mongodb/app /mongodb/fgdata /mongodb/log /mongodb/conf
$ sudo chown -R mongodb:mongodb /mongodb
### 2. 安装MongoDB
$ sudo tar -zxvf mongodb-linux-x86_64-rhel90-5.0.13.tgz -C /mongodb/app –strip-components 1
### 3. 创建systemd服务文件
$ sudo vi /etc/systemd/system/mongodb.service
[Unit]
Description=MongoDB Database Server
Documentation=https://docs.mongodb.org/manual
After=network.target
[Service]
User=mongodb
Group=mongodb
Environment=”PATH=/mongodb/app/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin”
Environment=”MONGODB_HOME=/mongodb/app”
ExecStart=/mongodb/app/bin/mongod –config /mongodb/conf/mongod.conf
ExecStop=/mongodb/app/bin/mongod –config /mongodb/conf/mongod.conf –shutdown
Restart=on-failure
RestartSec=10
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
### 4. 配置MongoDB配置文件
$ sudo vi /mongodb/conf/mongod.conf
storage:
dbPath: /mongodb/fgdata
journal:
enabled: true
systemLog:
destination: file
logAppend: true
path: /mongodb/log/mongod.log
net:
port: 27017
bindIp: 0.0.0.0
processManagement:
fork: false
security:
authorization: enabled
### 5. 重新加载systemd配置
$ sudo systemctl daemon-reload
### 6. 启动服务并创建管理员用户
$ sudo systemctl start mongodb
$ /mongodb/app/bin/mongosh
fgedu.net.cn> use admin
fgedu.net.cn> db.createUser({
… user: “fgedu”,
… pwd: “fgedu123”,
… roles: [ { role: “userAdminAnyDatabase”, db: “admin” }, “readWriteAnyDatabase” ]
… })
### 7. 重启服务并验证
$ sudo systemctl restart mongodb
$ /mongodb/app/bin/mongosh -u fgedu -p fgedu123 –authenticationDatabase admin
fgedu.net.cn> show dbs
### 8. 配置服务自动启动
$ sudo systemctl enable mongodb
4.3 服务监控与故障处理实战
以下是服务监控与故障处理的实战案例:
## 环境信息
– MongoDB版本:5.0.13
– 操作系统:Oracle Linux 9.3
– 服务文件:/etc/systemd/system/mongodb.service
## 实施步骤
### 1. 配置服务监控
$ sudo vi /etc/systemd/system/mongodb.service
[Service]
# 其他配置…
Restart=on-failure
RestartSec=10
StartLimitInterval=60
StartLimitBurst=3
### 2. 重新加载systemd配置
$ sudo systemctl daemon-reload
$ sudo systemctl restart mongodb
### 3. 创建监控脚本
$ cat > /mongodb/scripts/monitor.sh << 'EOF'
#!/bin/bash
# monitor.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# 检查服务状态
if ! systemctl is-active --quiet mongodb; then
echo "$(date): MongoDB service is not running!"
# 尝试重启服务
systemctl restart mongodb
# 再次检查
sleep 5
if ! systemctl is-active --quiet mongodb; then
echo "$(date): Failed to restart MongoDB service!"
# 发送告警
# echo "MongoDB service is down and failed to restart" | mail -s "MongoDB Alert" admin@fgedu.net.cn
else
echo "$(date): MongoDB service restarted successfully!"
fi
fi
# 检查数据库连接
if systemctl is-active --quiet mongodb; then
/mongodb/app/bin/mongosh -u fgedu -p fgedu123 --authenticationDatabase admin --eval "db.adminCommand('ping')"
if [ $? -ne 0 ]; then
echo "$(date): MongoDB database connection failed!"
# 发送告警
# echo "MongoDB database connection failed" | mail -s "MongoDB Alert" admin@fgedu.net.cn
fi
fi
EOF
$ chmod +x /mongodb/scripts/monitor.sh
$ crontab -e
*/5 * * * * /mongodb/scripts/monitor.sh >> /mongodb/log/monitor.log 2>&1
### 4. 故障处理
#### 场景1:服务启动失败
$ sudo systemctl status mongodb
# 查看日志
$ sudo journalctl -u mongodb
# 检查配置文件
$ sudo vi /mongodb/conf/mongod.conf
# 检查数据目录权限
$ ls -la /mongodb/fgdata
#### 场景2:服务运行中但数据库不可用
$ /mongodb/app/bin/mongosh -u fgedu -p fgedu123 –authenticationDatabase admin
# 查看日志
$ tail -f /mongodb/log/mongod.log
# 检查网络连接
$ netstat -tulpn | grep 27017
#### 场景3:服务自动重启
$ sudo journalctl -u mongodb | grep “Restarting”
# 分析重启原因
$ sudo journalctl -u mongodb –since “1 hour ago”
# 优化服务配置
$ sudo vi /mongodb/conf/mongod.conf
Part05-风哥经验总结与分享
5.1 systemd服务管理最佳实践
systemd服务管理的最佳实践建议:
## 服务配置
– 使用标准的服务文件格式
– 合理设置服务参数
– 配置适当的资源限制
– 正确设置依赖关系
## 服务管理
– 使用systemctl命令管理服务
– 定期检查服务状态
– 监控服务日志
– 配置服务自动重启
## 资源管理
– 合理设置内存限制
– 合理设置CPU限制
– 合理设置文件描述符限制
– 监控资源使用情况
## 日志管理
– 配置系统日志
– 定期清理日志文件
– 监控日志中的错误信息
– 使用journalctl管理日志
## 安全管理
– 使用非root用户运行服务
– 正确设置文件权限
– 限制服务的网络访问
– 定期检查服务安全状态
5.2 MongoDB服务管理最佳实践
MongoDB服务管理的最佳实践建议:
## 服务部署
– 使用systemd管理服务
– 合理配置服务参数
– 确保数据目录权限正确
– 配置适当的资源限制
## 服务监控
– 监控服务状态
– 监控数据库性能
– 监控存储空间
– 监控网络连接
## 服务维护
– 定期备份数据
– 定期清理日志
– 定期更新MongoDB版本
– 定期优化数据库性能
## 服务安全
– 启用认证授权
– 限制网络访问
– 定期更新密码
– 监控异常访问
## 服务故障处理
– 建立故障处理流程
– 定期进行故障演练
– 备份故障处理文档
– 及时响应服务故障
5.3 服务管理故障排查
服务管理故障排查的建议:
## 服务启动失败
– 检查配置文件是否正确
– 检查数据目录权限
– 检查端口是否被占用
– 检查日志文件中的错误信息
## 服务运行异常
– 检查服务状态
– 检查日志文件
– 检查数据库连接
– 检查资源使用情况
## 服务自动重启
– 检查重启原因
– 分析日志文件
– 优化服务配置
– 增加资源限制
## 服务性能下降
– 检查数据库性能
– 检查系统资源使用情况
– 优化数据库查询
– 调整服务配置
## 服务无法访问
– 检查网络连接
– 检查防火墙规则
– 检查服务状态
– 检查认证配置
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
