【问题标题】:How to read from secondary mongo using mongoengine如何使用 mongoengine 从辅助 mongo 读取
【发布时间】:2015-04-16 06:51:37
【问题描述】:

我使用 mongoengine "connect" 方法来访问 mongo db。现在我在 mongodb 服务器上配置了副本集。 为了性能优化,我想将我的所有读取请求路由到具有特定标签的从属/辅助 mongo 服务器。

这是我的连接调用

mongoengine.connect(attrs['DB_NAME'], conn,
read_preference=ReadPreference.SECONDARY_PREFERRED,
tag_sets=[{'loc': 'nm'}, {}],
replicaSet='replset',
host=attrs['HOST'], port=attrs['PORT'],
username=attrs['USERNAME'], password=attrs['PASSWORD'],
max_pool_size=attrs['MAX_POOL_SIZE'])

执行时出错

mongoengine.connection.ConnectionError:无法连接到数据库 默认 : 172.22.67.38:27017 不是副本集replset的成员

【问题讨论】:

  • 可能你的 mongo replSet 配置不正确,尝试连接到 mongo shell 并输入 rs.status()。然后请向我们展示输出
  • 感谢方舟!你说得对,我的 mongo 服务器没有用正确的副本集标记。

标签: mongodb pymongo mongoengine


【解决方案1】:

这就是我能够使用 pymongo 2.8 和 mongoengine 0.8.7 连接到 mongodb 以获得辅助读取偏好的方式。

from pymongo.read_preferences import ReadPreference

mongoengine.connect(<db_name>, <db_alias>,
    read_preference=ReadPreference.SECONDARY_PREFERRED,
    tag_sets=[{'loc': 'nm'}, {}],
    replicaSet='replset',
    host='mongodb://<username>:<password>@172.22.67.38:27017/<db_name>', port=attrs['PORT'],
    max_pool_size=100)

【讨论】:

  • 如何覆盖查询的读取首选项?我正在尝试&lt;collection_name&gt;.objects().read_preference(ReadPreference.SECONDARY_PREFERRED) 但是,它似乎不起作用。查询总是转到主节点。使用 pymongo 2.7.2 和 mongoengine 0.8.7
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-22
  • 1970-01-01
  • 1970-01-01
  • 2017-11-17
相关资源
最近更新 更多