使用mongodump备份AWS 3节点MongoDB副本集时连接失败问题排查
AWS上MongoDB副本集mongodump连接问题排查
问题详情
在AWS部署3节点MongoDB副本集的备份策略时,执行mongodump遇到连接失败问题:
方式一:传统参数执行
执行命令:
mongodump --host="mydb/db1.myapp.co:27017,db2.myapp.co:27017,db3.myapp.co:27017" -o /home/ubuntu/db_backups/1 -d mydb--authenticationDatabase admin --username myself--password mypassword --ssl --sslCAFile=/home/ubuntu/mongotls/rootCA.pem --sslPEMKeyFile=/home/ubuntu/mongotls/mykey.pem
收到错误:
Failed: error connecting to db server: no reachable servers
方式二:URI方式执行
改用URI命令:
mongodump --uri="mongodb://myself:mypass@db1.myapp.co:27017,db2.myapp.co:27017,db3.myapp.co:27017/mydb?replicaSet=mydb&authSource=admin&ssl=true" -o /home/ubuntu/db_backups/ --sslPEMKeyFile=/home/ubuntu/mongotls/mykey.pem --sslCAFile=/home/ubuntu/mongotls/rootCA.pem
无返回信息,但主机尝试连接所有副本节点后立即断开,其中一个副本节点的mongod日志如下:
{"t":{"$date":"2023-02-05T12:54:29.297+00:00"},"s":"I", "c":"NETWORK", "id":22943, "ctx":"listener","msg":"Connection accepted","attr":{"remote":"122.11.24.98:39148","uuid":"ed692df4-8841-4211-8c66-1a8c1ab29b89","connectionId":23027,"connectionCount":12}} {"t":{"$date":"2023-02-05T12:54:29.309+00:00"},"s":"I", "c":"NETWORK", "id":22944, "ctx":"conn23027","msg":"Connection ended","attr":{"remote":"122.11.24.98:39148","uuid":"ed692df4-8841-4211-8c66-1a8c1ab29b89","connectionId":23027,"connectionCount":11}} {"t":{"$date":"2023-02-05T12:54:29.850+00:00"},"s":"I", "c":"NETWORK", "id":22943, "ctx":"listener","msg":"Connection accepted","attr":{"remote":"122.11.24.98:39160","uuid":"881a4b60-6883-4a7b-8fa9-becec0439140","connectionId":23028,"connectionCount":12}} {"t":{"$date":"2023-02-05T12:54:29.882+00:00"},"s":"I", "c":"NETWORK", "id":22944, "ctx":"conn23028","msg":"Connection ended","attr":{"remote":"122.11.24.98:39160","uuid":"881a4b60-6883-4a7b-8fa9-becec0439140","connectionId":23028,"connectionCount":11}}
排查步骤
- 修复命令参数语法错误:第一个命令中
-d mydb--authenticationDatabase缺少空格,正确写法应为-d mydb --authenticationDatabase,参数间的空格缺失会导致解析错误,直接引发连接失败。 - 验证网络连通性:从执行mongodump的主机,用
telnet db1.myapp.co 27017测试端口是否可通;用openssl s_client -connect db1.myapp.co:27017 -CAfile /home/ubuntu/mongotls/rootCA.pem验证SSL连接是否能正常建立,确认AWS安全组、NACL未拦截27017端口流量。 - 检查SSL证书有效性:
- 确认
rootCA.pem和mykey.pem文件权限为600,避免权限过宽导致证书无法正常读取。 - 检查证书是否在有效期内,
mykey.pem是否包含完整的私钥和证书链,且与MongoDB节点信任的CA证书匹配。
- 确认
- 核对副本集配置与URI参数:
- 登录MongoDB节点执行
rs.status(),确认URI中replicaSet=mydb与实际副本集名称一致。 - 若密码包含特殊字符(如
@、:),需对密码进行URL编码后再写入URI,避免认证信息解析错误。
- 登录MongoDB节点执行
- 获取mongodump详细日志:添加
-v参数执行mongodump,获取更详细的连接、认证过程日志,定位具体失败环节:
mongodump --uri="mongodb://myself:mypass@db1.myapp.co:27017,db2.myapp.co:27017,db3.myapp.co:27017/mydb?replicaSet=mydb&authSource=admin&ssl=true" -o /home/ubuntu/db_backups/ --sslPEMKeyFile=/home/ubuntu/mongotls/mykey.pem --sslCAFile=/home/ubuntu/mongotls/rootCA.pem -v
- 确认MongoDB节点配置:检查副本集节点
mongod.conf中的security.authorization是否开启,net.ssl配置是否正确,若net.ssl.mode设置为requireSSL,需确保客户端证书被节点信任。
内容的提问来源于stack exchange,提问作者Taras Myronovich
相关产品推荐
相关产品推荐

