一、背景介绍
在MongoDB集群环境中,mongos作为路由服务(router service),连接客户端和集群的其他MongoDB分片(shard)服务。mongos收到客户端发出的请求后,将请求转发到对应的MongoDB分片上,再将分片返回的数据重新封装成多个分片的结果返回给客户端。
但是,在实际使用过程中可能会遇到mongos进程崩溃的情况,这时候就需要找到问题所在并解决。本文将分享mongos进程崩溃后无法重启的问题解决方法。
二、问题排查
1. 根据错误日志定位问题
mongos进程崩溃后,首先需要查看mongos的错误日志文件。错误日志文件通常位于mongos启动目录的log文件夹里。通过打开日志文件,可以查看mongos退出的原因,例如:
2021-06-12T15:38:19.613+0800 I CONTROL [mongosMain] ***** SERVER RESTARTED *****
2021-06-12T15:38:19.625+0800 W NETWORK [mongosMain] Failed to connect to 127.0.0.1:27017 after 5000ms milliseconds, giving up.
2021-06-12T15:38:19.625+0800 E QUERY [mongosMain] Error: couldn't connect to server 127.0.0.1:27017, connection attempt failed :
connect@src/mongo/shell/mongo.js:328:13
@(connect):1:6
exception: connect failed
根据上面的错误信息可以看出,mongos进程启动失败的原因是连接到127.0.0.1:27017服务失败。
2. 检查mongodb服务是否正常运行
mongos进程的启动需要依赖mongodb服务是否正常运行。可以通过以下命令检查mongodb服务的状态:
systemctl status mongod.service
如果mongodb服务已经停止或未能正常运行,则需要先解决这个问题。
三、解决方法
1. 关闭mongos并清理mongos.lock文件
如果mongos进程在崩溃后未能正常退出,可能会导致mongos.lock文件未被清理。这时候需要先关闭mongos进程,再清理mongos.lock文件。关闭mongos进程可以使用以下命令:
killall mongos
然后,进入mongos启动目录,删除mongos.lock文件:
cd /mongodb/mongos/
rm mongos.lock
2. 启动mongos进程,并指定配置文件
mongos进程在启动时,需要指定mongos的配置文件。配置文件通常保存mongos的启动参数、连接分片的信息等。在启动mongos进程时,需要带上--config参数,指定mongos.conf配置文件的位置。如果没有指定config文件,则mongos进程会在启动时默认在/mongodb/mongos/目录下寻找mongos.conf文件。
mongos --config /mongodb/mongos/mongos.conf
启动mongos进程后,可以通过访问mongos服务来测试服务是否正常:
mongo 127.0.0.1:27017
可以看到如下的返回结果,说明mongos服务已经正常启动:
MongoDB shell version v4.4.5
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("8c33d2be-5dcc-4b9b-a94f-fef142d66767") }
MongoDB server version: 4.4.5
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
https://docs.mongodb.com/
Questions? Try the MongoDB Community Forums
https://community.mongodb.com/
>
四、总结
mongos作为MongoDB集群环境中重要的路由服务,在遇到进程崩溃无法重启的问题时,需要通过查看错误日志、检查mongodb服务状态等方法,在定位问题后及时清理mongos.lock文件,并指定正确的配置文件重新启动mongos进程。