文章目录
服务器重启MongoDB无法启动
背景
数据库服务器的CPU接近告警值了,需要添加CPU资源,于是乎就在恰当的时间对服务器进行关机,待添加完资源后开机,这样就完成了CPU资源的添加。
规划
在添加资源之前首先要咨询开发人员,让开发人员确认,什么时候可以对机器进行重启,时间确定了在18点以后就可以对机器进行重启操作。这时候把准备工作做好
- 重启之前确定何时可以重启
- 重启之前把原来的服务关掉
- 重启后查看应用是否启动成功
- 测试MongoDB是否正常使用
方针路线制定未完成,那就开始执行吧,本来添加资源,加上启动应用10分钟内完全能搞定,但一旦出现问题这是完全保证不了时间的。之前升级也是,理想状态下10分钟~1小时能搞定,最后24小时还是搞不定,这是常有的事,这不今天又遇到了。
实施
停止MongoDB服务
systemctl stop mongod
停止服务器
shutdown -h now
添加CPU资源
我们使用的KVM
之后启动服务器
服务器正常启动
检查应用是否启动,就在这时候问题出现了
shell
[root@ZJPMYCDBS01 ~]# systemctl status mongod
● mongod.service - MongoDB Database Server
Loaded: loaded (/usr/lib/systemd/system/mongod.service; enabled; vendor preset: disabled)
Active: failed (Result: exit-code) since Wed 2023-08-23 18:06:57 CST; 1min 58s ago
Docs: https://docs.mongodb.org/manual
Process: 1800 ExecStart=/usr/bin/mongod $OPTIONS (code=exited, status=14)
Process: 1797 ExecStartPre=/usr/bin/chmod 0755 /var/run/mongodb (code=exited, status=0/SUCCESS)
Process: 1795 ExecStartPre=/usr/bin/chown mongod:mongod /var/run/mongodb (code=exited, status=0/SUCCESS)
Process: 1791 ExecStartPre=/usr/bin/mkdir -p /var/run/mongodb (code=exited, status=0/SUCCESS)
Aug 23 18:06:57 ZJPMYCDBS01 systemd[1]: Starting MongoDB Database Server...
Aug 23 18:06:57 ZJPMYCDBS01 mongod[1800]: about to fork child process, waiting until server is ready for connections.
Aug 23 18:06:57 ZJPMYCDBS01 mongod[1800]: forked process: 1803
Aug 23 18:06:57 ZJPMYCDBS01 mongod[1800]: ERROR: child process failed, exited with 14
Aug 23 18:06:57 ZJPMYCDBS01 mongod[1800]: To see additional information in this output, start without the "--fork" option.
Aug 23 18:06:57 ZJPMYCDBS01 systemd[1]: mongod.service: control process exited, code=exited status=14
Aug 23 18:06:57 ZJPMYCDBS01 systemd[1]: Failed to start MongoDB Database Server.
Aug 23 18:06:57 ZJPMYCDBS01 systemd[1]: Unit mongod.service entered failed state.
Aug 23 18:06:57 ZJPMYCDBS01 systemd[1]: mongod.service failed.
[root@ZJPMYCDBS01 ~]#
我是设置了MongoDB开机启动的,所以无需再次启动
再次查看日志
shell
[root@ZJPMYCDBS01 ~]#journalctl -xe
Aug 23 18:05:29 ZJPMYCDBS01 mongod[1710]: To see additional information in this output, start without the "--fork" option.
Aug 23 18:05:29 ZJPMYCDBS01 systemd[1]: mongod.service: control process exited, code=exited status=14
Aug 23 18:05:29 ZJPMYCDBS01 systemd[1]: Failed to start MongoDB Database Server.
-- Subject: Unit mongod.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit mongod.service has failed.
--
-- The result is failed.
Aug 23 18:05:29 ZJPMYCDBS01 systemd[1]: Unit mongod.service entered failed state.
Aug 23 18:05:29 ZJPMYCDBS01 systemd[1]: mongod.service failed.
Aug 23 18:05:29 ZJPMYCDBS01 polkitd[845]: Unregistered Authentication Agent for unix-process:1696:5112 (system bus name :1.20, object path /org/freedesktop/PolicyKit1/Authentication
Aug 23 18:05:57 ZJPMYCDBS01 polkitd[845]: Registered Authentication Agent for unix-process:1722:7930 (system bus name :1.21 [/usr/bin/pkttyagent --notify-fd 5 --fallback], object pa
Aug 23 18:05:57 ZJPMYCDBS01 systemd[1]: Reloading.
Aug 23 18:05:57 ZJPMYCDBS01 systemd[1]: clickhouse-server.service: Supervising process 1339 which is not our child. We'll most likely not notice when it exits.
Aug 23 18:05:57 ZJPMYCDBS01 polkitd[845]: Unregistered Authentication Agent for unix-process:1722:7930 (system bus name :1.21, object path /org/freedesktop/PolicyKit1/Authentication
Aug 23 18:06:01 ZJPMYCDBS01 chronyd[838]: Source 94.237.64.20 replaced with 39.106.54.244
Aug 23 18:06:03 ZJPMYCDBS01 polkitd[845]: Registered Authentication Agent for unix-process:1741:8541 (system bus name :1.22 [/usr/bin/pkttyagent --notify-fd 5 --fallback], object pa
分析以上日志,查看问题,日志中明显的错误信息是code=exited, status=14
,查看MongoDB的官网可知以下的内容
Code | 原因 |
---|---|
0 | MongoDB 应用程序成功退出时返回。 |
2 | 指定的选项错误或与其他选项不兼容。 |
3 | 当命令行上指定的主机名与主/从模式下的 local.sources 集合中的主机名不匹配时,由 mongod 返回。 |
4 | 数据库版本与 mongod(或 mongod.exe)实例支持的版本不同。实例将干净地退出。 |
5 | 在初始化过程中遇到问题时,由 mongos 返回。 |
12 | 在 Windows 上的 mongod.exe 进程在接收到 Control-C、Close、Break 或 Shutdown 事件时返回。 |
14 | MongoDB 应用程序遇到无法恢复的错误、未捕获的异常或未捕获的信号时返回。系统在未执行干净关闭的情况下退出。 |
20 | 消息:ERROR: wsastartup failed Windows 上的 MongoDB 应用程序在 WSAStartup 函数出现错误后返回,该函数用于初始化网络子系统。 消息:NT Service Error Windows 上的 MongoDB 应用程序由于安装、启动或删除应用程序的 NT 服务时出现故障而返回。 |
48 | 新启动的 mongod 或 mongos 由于错误无法开始侦听传入连接。 |
61 | 如果具有受监视目录的文件系统无响应,由存储节点监视器返回。 |
62 | 当 --dbpath 中的数据文件与当前运行的 mongod 版本不兼容时,由 mongod 返回。 |
100 | 当进程抛出未捕获的异常时,由 mongod 返回。 |
看到以上代码status=14则说明这是异常退出,大概率是有存在锁的,在日志文件中看到了一个lock的文件
但出于对MongoDB的不熟悉,最后网上找到了一个帖子
shell
cd /tmp; ls -l *.sock
chown mongod:mongod mongodb-27017.sock
27017
是端口号
mongodb-27017.sock
这个文件按理说不会发生权限的变动的,我感觉可能是停止的时候没有完全停止,就急于重启机器,或者是重启的时候有数据写入导致的。
再次启动MongoDB问题解决,不得不说高手在民间,网上很多人不显山不漏水决绝问题棒棒滴,感谢这些网络活雷锋。
总结
在上线过程中,未免是会出现这样那样的问题,遇到问题先看看具体的日志信息,根据日志信息来进行下一步操作,按照日志的关键字去网上查,可能有很多人都会遇到同样的问题,大部分都会解决的。不慌不忙、不急不躁沉着应对。