使用Supervisord管理MongoDB分片集群mongos进程时自动重启异常排查
解决MongoDB分片集群中mongos通过Supervisord自动重启失败的问题
我之前也碰到过类似的情况,咱们先从日志里的关键信息入手分析:Supervisord提示exit status 0; not expected,这说明mongos进程是正常退出的,不是崩溃或异常终止——这是排查的核心突破口。
你的Supervisord配置如下:
[program:mongos_router] command=/usr/bin/mongos -f /etc/mongos.conf --pidfilepath=/var/run/mongodb/mongos.pid user=mongod autostart=true autorestart=true startretries=10
问题定位
最常见的原因是:你的mongos配置文件里开启了后台运行模式。当mongos启动时会fork一个子进程,父进程随即正常退出(status 0),而Supervisord监控的是父进程,自然会认为进程已退出,进而不断尝试重启,形成死循环。
解决方案
1. 关闭mongos的后台运行配置
打开/etc/mongos.conf,找到processManagement模块,确保fork设置为false(Supervisord本身就是用来管理前台进程的,不需要mongos自己后台运行):
processManagement: fork: false pidFilePath: /var/run/mongodb/mongos.pid # 可以把pid配置移到这里,避免命令行重复指定
2. 优化Supervisord配置(可选但推荐)
添加日志输出配置,方便后续排查mongos的启动细节,同时确保目录权限正确:
[program:mongos_router] command=/usr/bin/mongos -f /etc/mongos.conf user=mongod autostart=true autorestart=true startretries=10 # 添加日志配置,便于排查问题 stdout_logfile=/var/log/supervisor/mongos_stdout.log stderr_logfile=/var/log/supervisor/mongos_stderr.log stdout_logfile_maxbytes=50MB stderr_logfile_maxbytes=50MB stdout_logfile_backups=5 stderr_logfile_backups=5
3. 修复目录权限
确保mongod用户拥有pid文件目录和日志目录的读写权限:
chown -R mongod:mongod /var/run/mongodb mkdir -p /var/log/supervisor && chown -R mongod:mongod /var/log/supervisor
4. 重启Supervisord并验证
# 重新加载配置文件 supervisorctl reload # 查看mongos进程状态 supervisorctl status mongos_router
如果问题依然存在,可以查看mongos的错误日志/var/log/supervisor/mongos_stderr.log,里面会有mongos启动的详细输出,帮助进一步定位问题。
内容的提问来源于stack exchange,提问作者Albatross
相关产品推荐
相关产品推荐

