微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 VPC 连接器的 Google App Engine 无法与 MongoDB 连接

如何解决使用 VPC 连接器的 Google App Engine 无法与 MongoDB 连接

当我使用 VPC 连接器和带有副本集的 MongoDB 在 Google App Engine 上部署 Python 应用程序时,我收到以下错误

MongoDB 在 Google Compute Engine 上。

pymongo.errors.ServerSelectionTimeoutError: \
Could not reach any servers in [('mongodb-v44',27017)]. \
Replica set is configured with internal hostnames or IPs?,\
Timeout: 30s,Topology Description: <TopologyDescription id: \ 
5ff5a4121251453cdcc1ff41,topology_type: replicasetnoprimary,\ 
servers: [<ServerDescription ('mongodb-v44',27017) \ 
server_type: UnkNown,\ 
rtt: None,error=AutoReconnect('mongodb-v44:27017: \
a [Errno -2] Name or service not kNown')>]>"

Python 代码

mongo_connection = mongoengine.connect(
    db=os.getenv('DB_NAME'),host=os.getenv('DB_HOST_URL'),port=int(os.getenv('DB_PORT')),username=os.getenv('DB_USERNAME'),password=os.getenv('DB_PASSWORD'),authentication_source='admin',replicaset=os.getenv('REPLICA_SET'),read_preference=ReadPreference.PRIMARY_PREFERRED
)

try:
    info = mongo_connection.server_info()  # Forces a call.
except Exception:
    raise Exception("mongo server is down.")

解决方法

确认该成员的副本集的主机名是从应用程序进行访问。

步骤:

  1. 检查rs.config()

  2. 检查成员的主机名cfg.members[0].host = FQDN

  3. 确认FQDN是从应用程序访问。

,

要快速调试问题并解决问题,请在处理错误消息时尽可能明确。目前,您正在捕获“所有”Exception,并且这些反模式很难调试。

而不是使用一般的 Exception

except Exception:
    raise Exception("mongo server is down.")

您可以通过某种方式捕获错误消息:

except Exception as err:
    print("MongoDB error:",err)

或者更好的是,您可以编写自己的 Exception 来改进您的调试:

class MongodbError(Exception):
    """Exception Base class"""
    pass

class ServerTimeoutError(MongodbError):
    pass

class MongoServerLostConnection(MongodbError):
    pass

try:
    do_something()
except MongodbError as err:
    manage_mongo_error(err)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。