- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个非常简单的 PyMongo 配置,连接到两个主机:
from pymongo import MongoClient
host = os.getenv('MONGODB_HOST', '127.0.0.1')
port = int(os.getenv('MONGODB_PORT', 27017))
hosts = []
for h in host.split(','):
hosts.append('{}:{}'.format(h, port))
cls.client = MongoClient(host=hosts, replicaset='replicatOne')
MONGODB_HOST
由两个ip的列表组成,例如“primary_mongo,secondary_mongo”
它们被配置为副本集。
我注意到的问题是,在当前配置中,如果 secondary_mongo 出现故障,我的整个代码将停止工作。
我相信向 MongoClient
提供主机列表会告诉它“使用有效的主机,从第一个开始”,但看起来这是不正确的。
出了什么问题,如何确保 MongoClient
首先正确连接到 primary_mongo
,如果失败,则转到 secondary_mongo
?
最佳答案
为了拥有一个完全运行的 MongoDB ReplicaSet,您必须有一个 PRIMARY 成员。只有在所有成员中获得多数票的情况下才能选举出主要成员。 2 中的 1 并不是大多数,因此如果一个节点发生故障,您的 MongoDB ReplicaSet 就会宕机。
当您连接到 MongoDB 时,您可以连接到 ReplicaSet,例如
mongo "mongodb://localhost:27037,localhost:27137,localhost:27237/?replicaSet=repSet"
或者直接连接,例如
mongo "mongodb://localhost:27037,localhost:27137"
当您连接到 ReplicaSet 并且 PRIMARY 出现故障(或者由于某种原因降级为 SECONDARY 时)并且另一个成员成为 PRIMARY 时,通常客户端会自动重新连接到新的 PRIMARY。但是,连接到 ReplicaSet 需要 PRIMARY 成员,即大多数成员必须可用。
当您直接连接时,您还可以连接到 SECONDARY 成员并以只读/只读模式使用 MongoDB。但是,如果连接的成员出现故障,您将没有任何故障转移/重新连接功能。
您可以在其中一个节点上创建一个 ARBITER 成员。然后,如果另一个节点出现故障,应用程序仍然完全可用。请记住,通过此设置,您只能丢失“第二个”主机,而不会丢失其中任何一个。在最好的情况下,您可以在独立的第三方位置配置 ARBITER。
来自MongoDB: The Definitive Guide by Shannon Bradshaw, Eoin Brazil, Kristina Chodorow :第 III 部分 - 复制,第 9 章 - 设置副本集:
How to Design a Set
To plan out your set, there are certain replica set concepts that you must be familiarwith. The next chapter goes into more detail about these, but the most important is thatreplica sets are all about majorities: you need a majority of members to elect a primary,a primary can only stay primary so long as it can reach a majority, and a write is safewhen it’s been replicated to a majority. This majority is defined to be “more than half ofall members in the set,” as shown in Table 9-1.
Note that it doesn’t matter how many members are down or unavailable, as majority isbased on the set’s configuration.
For example, suppose that we have a five-member set and three members go down, asshown in Figure 9-1. There are still two members up. These two members cannot reacha majority of the set (at least three members), so they cannot elect a primary. If one ofthem were primary, it would step down as soon as it noticed that it could not reach a majority. After a few seconds, your set would consist of two secondaries and three unreachable members.
Many users find this frustrating: why can’t the two remaining members elect a primary?The problem is that it’s possible that the other three members didn’t go down, and thatit was the network that went down, as shown in Figure 9-2. In this case, the three members on the left will elect a primary, since they can reach a majority of the set (threemembers out of five).
In the case of a network partition, we do not want both sides of the partition to elect aprimary: otherwise the set would have two primaries. Then both primaries would bewriting to the data and the data sets would diverge. Requiring a majority to elect or stayprimary is a neat way of avoiding ending up with more than one primary.
It is important to configure your set in such a way that you’ll usually be able to have oneprimary. For example, in the five-member set described above, if members 1, 2, and 3are in one data center and members 4 and 5 are in another, there should almost alwaysbe a majority available in the first data center (it’s more likely to have a network breakbetween data centers than within them).
关于mongodb - MongoClient 连接到多个主机来处理故障转移?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69658590/
const { MongoClient, ObjectID } = require('mongodb'); const debug = require('debug')('mongodb-connec
当我启动我的一些服务时,它会报告此类警告并且服务会停止: /usr/lib64/python2.6/site-packages/pymongo/topology.py:75: UserWarning:
我不喜欢新的 mongo,MongoDB 在 PHP7 中需要几个库。 PHP 5 中的 MongoClient(已弃用)更加舒适和轻便! 我决定启动一个脚本并比较两个版本,结果非常令人惊讶: Mon
我正在尝试实现 MongoDB 连接处理程序,但遇到了一个问题,我的 Database即使我的 MongoClient() 调用成功,调用也会返回 None。 #mongoconn.py from p
我对 MongoDB 有点陌生,我对 MongoClient 类感到困惑,因为在不同的包中有两个( com.mongodb.client.MongoClient 和 com.mongodb.Mongo
我正在尝试熟悉从 C# 程序写入 MongoDB。我已经按照 http://mongodb.github.io/mongo-csharp-driver/1.11/getting_started/ 的建
我正在使用 Celery 和 MongoEngine 作为我的 Django 应用程序的一部分。 当 celery @shared_task 通过 mongoengine 模型类访问 mongodb
我有一个非常简单的 PyMongo 配置,连接到两个主机: from pymongo import MongoClient host = os.getenv('MONGODB_HOST', '127.
这个问题已经有答案了: MongoDB - Java | How to manage the connection (1 个回答) 已关闭 5 年前。 我正在用 Java 开发一个应用程序,该应用程序
我有一个副本集设置,其中包含 1 个主节点 (mongo1.test.com)、1 个辅助节点 (mongo2.test.com) 和 1 个仲裁节点 (mongo3.test.com)。当我使用 M
我是 NodeJS 新手,也是 JS can-kicker 第一次尝试 DI。以下是我在决定问我之前看过的问题,因为它们显示相同的错误:[1] [2] 运行我的入口点产生: this.client =
使用 java MongoClient 库,如何在集合中查找文档并仅返回特定的对象?我知道这对于 1 个对象 是可能的,但不确定多个。 对于 1 个对象: DBCursor cursor = db.g
这是我的服务器告诉我的内容: MongoClient.connect('mongodb://:@ds235778.mlab.com:35778/satr-wars-quotes', (err, cli
我有一个使用 MongoDB 作为数据库的 ASP.Net MVC 应用程序。网站和数据库位于不同的服务器上。 目前,我有一个看起来像这样的类: public class Mongo { pr
我无法做到这一点: from pymongo import MongoClient 我明白了: >>> import pymongo >>> from pymongo import MongoClie
我正在尝试让这段代码运行: tilbud; ?> 每次我遇到同样的错误: Fatal error: Class 'MongoClient' not found in C:\xampp\htdocs\c
我正在努力更好地理解 this documentation关于如何重用 MongoClient 的实例。 我们通过在构造函数中传递连接字符串来创建 MongoClient 实例,this is the
我正在使用 Mongo DB java 驱动程序连接到 mongo 实例。下面是我用来创建 MongoClient 实例的代码。 try { new MongoClient("
什么是 Mongoclient?它在下面的语句中做了什么? var MongoClient = require('mongodb').MongoClient; 最佳答案 您示例中的 MongoClie
假设我有一个副本集,其中包含一个主 P 和三个辅助 S1、S2 和 S3 。假设应用程序使用此 constructor 创建一个 Mongo 客户端。 。 种子列表为{P、S1、S2}。请注意,该列表
我是一名优秀的程序员,十分优秀!