1. 首页 > MongoDB教程 > 正文

MongoDB教程FG008-MongoDB systemd服务管理实战

本文档风哥主要介绍MongoDB systemd服务管理,包括systemd基础概念、MongoDB服务管理基础概念、服务管理核心概念、systemd服务规划、MongoDB服务规划、服务管理规划、systemd服务配置、MongoDB服务配置、服务管理实施方案、systemd服务管理实战案例、MongoDB服务管理实战案例、服务监控与故障处理实战等内容,风哥教程参考MongoDB官方文档Administration内容编写,适合DBA人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。

Part01-基础概念与理论知识

1.1 systemd基础概念

systemd是现代Linux系统的初始化系统和服务管理器,负责启动、管理和监控系统服务。更多视频教程www.fgedu.net.cn

systemd核心概念:

  • 单元(Unit):systemd管理的基本单位,包括服务、套接字、设备等
  • 服务(Service):系统服务的管理单元
  • 目标(Target):一组相关的单元,用于实现特定的系统状态
  • 依赖(Dependency):单元之间的依赖关系
  • 控制组(CGroup):用于资源管理和限制

1.2 MongoDB服务管理基础概念

MongoDB服务管理包括服务的启动、停止、重启、监控等方面。

# MongoDB服务管理核心概念

## 服务类型
– **单节点服务:** 单个MongoDB实例
– **副本集服务:** 多个MongoDB实例组成的副本集
– **分片集群服务:** 多个分片组成的集群

## 服务状态
– **运行中(Running):** 服务正常运行
– **停止(Stopped):** 服务已停止
– **启动中(Starting):** 服务正在启动
– **停止中(Stopping):** 服务正在停止
– **失败(Failed):** 服务启动失败

## 服务配置
– **配置文件:** MongoDB的配置参数
– **环境变量:** 影响服务运行的环境变量
– **命令行参数:** 启动服务时的命令行参数

## 服务监控
– **状态监控:** 服务的运行状态
– **性能监控:** 服务的性能指标
– **日志监控:** 服务的日志输出
– **健康检查:** 服务的健康状态

1.3 服务管理核心概念

服务管理的核心概念包括服务的生命周期管理、资源管理、依赖管理等。

# 服务管理核心概念

## 生命周期管理
– **启动(Start):** 启动服务
– **停止(Stop):** 停止服务
– **重启(Restart):** 重启服务
– **重载(Reload):** 重载服务配置
– **状态(Status):** 查看服务状态

## 资源管理
– **内存限制:** 限制服务使用的内存
– **CPU限制:** 限制服务使用的CPU
– **磁盘限制:** 限制服务使用的磁盘空间
– **网络限制:** 限制服务的网络带宽

## 依赖管理
– **依赖关系:** 服务之间的依赖关系
– **启动顺序:** 服务的启动顺序
– **停止顺序:** 服务的停止顺序
– **依赖检测:** 检测依赖是否满足

## 自动管理
– **自动启动:** 系统启动时自动启动服务
– **自动重启:** 服务失败时自动重启
– **自动恢复:** 服务异常时自动恢复
– **健康检查:** 定期检查服务健康状态

风哥提示:systemd是现代Linux系统的标准服务管理器,使用systemd管理MongoDB服务可以提高服务的可靠性和管理效率。学习交流加群风哥微信: itpux-com

Part02-生产环境规划与建议

2.1 systemd服务规划

在生产环境中,需要对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服务规划

## 服务架构
– 单节点部署:适用于测试和开发环境
– 副本集部署:适用于生产环境
– 分片集群部署:适用于大规模生产环境

## 服务配置
– 配置文件:/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等

## 管理流程
– 服务部署:安装和配置服务
– 服务启动:启动服务并验证
– 服务监控:定期监控服务状态
– 服务维护:定期维护和优化服务
– 服务升级:升级服务版本
– 服务故障:处理服务故障

## 管理文档
– 服务配置文档:记录服务配置
– 服务维护文档:记录维护流程
– 服务故障文档:记录故障处理
– 服务升级文档:记录升级流程

生产环境建议:在生产环境中,需要根据实际需求和服务器资源,合理规划和配置systemd服务和MongoDB服务,确保服务的可靠性和稳定性。学习交流加群风哥QQ113257174

Part03-生产环境项目实施方案

3.1 systemd服务配置

3.1.1 创建systemd服务文件

# 创建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配置文件

# 配置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

风哥提示:使用systemd管理MongoDB服务可以提高服务的可靠性和管理效率,建议在生产环境中采用这种方式。更多学习教程公众号风哥教程itpux_com

Part04-生产案例与实战讲解

4.1 systemd服务管理实战案例

以下是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服务管理实战案例

## 环境信息
– 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

生产环境建议:在生产环境中,需要建立完善的服务监控和故障处理机制,确保MongoDB服务的稳定运行。from MongoDB视频:www.itpux.com

Part05-风哥经验总结与分享

5.1 systemd服务管理最佳实践

systemd服务管理的最佳实践建议:

# systemd服务管理最佳实践

## 服务配置
– 使用标准的服务文件格式
– 合理设置服务参数
– 配置适当的资源限制
– 正确设置依赖关系

## 服务管理
– 使用systemctl命令管理服务
– 定期检查服务状态
– 监控服务日志
– 配置服务自动重启

## 资源管理
– 合理设置内存限制
– 合理设置CPU限制
– 合理设置文件描述符限制
– 监控资源使用情况

## 日志管理
– 配置系统日志
– 定期清理日志文件
– 监控日志中的错误信息
– 使用journalctl管理日志

## 安全管理
– 使用非root用户运行服务
– 正确设置文件权限
– 限制服务的网络访问
– 定期检查服务安全状态

5.2 MongoDB服务管理最佳实践

MongoDB服务管理的最佳实践建议:

# MongoDB服务管理最佳实践

## 服务部署
– 使用systemd管理服务
– 合理配置服务参数
– 确保数据目录权限正确
– 配置适当的资源限制

## 服务监控
– 监控服务状态
– 监控数据库性能
– 监控存储空间
– 监控网络连接

## 服务维护
– 定期备份数据
– 定期清理日志
– 定期更新MongoDB版本
– 定期优化数据库性能

## 服务安全
– 启用认证授权
– 限制网络访问
– 定期更新密码
– 监控异常访问

## 服务故障处理
– 建立故障处理流程
– 定期进行故障演练
– 备份故障处理文档
– 及时响应服务故障

5.3 服务管理故障排查

服务管理故障排查的建议:

# 服务管理故障排查

## 服务启动失败
– 检查配置文件是否正确
– 检查数据目录权限
– 检查端口是否被占用
– 检查日志文件中的错误信息

## 服务运行异常
– 检查服务状态
– 检查日志文件
– 检查数据库连接
– 检查资源使用情况

## 服务自动重启
– 检查重启原因
– 分析日志文件
– 优化服务配置
– 增加资源限制

## 服务性能下降
– 检查数据库性能
– 检查系统资源使用情况
– 优化数据库查询
– 调整服务配置

## 服务无法访问
– 检查网络连接
– 检查防火墙规则
– 检查服务状态
– 检查认证配置

风哥提示:MongoDB服务管理是数据库运维的重要组成部分,使用systemd管理MongoDB服务可以提高服务的可靠性和管理效率。建议建立完善的服务监控和故障处理机制,确保MongoDB服务的稳定运行。

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息