- 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/
如果我将我的个人 repo 转移到一个组织(由我创建),我将失去所有 见解 例如来自原始 Repo 的流量历史记录、拉取请求、贡献者、 fork 等? 最佳答案 拉取请求被保留:参见“About re
如何为解析 if-then[-else] 案例制定正确的规则?这是一些语法: { module TestGram (tparse) where } %tokentype { String }
如何为解析 if-then[-else] 案例制定正确的规则?这是一些语法: { module TestGram (tparse) where } %tokentype { String }
我读过有关mutex的信息,这些信息由线程拥有,并且只能由拥有的线程使用。在this answer中,该解决方案建议每个进程在发出互斥信号之前,必须拥有互斥锁的所有权。我必须在这里承认自己的愚蠢,不知
我只能从回调函数之一中想到 curl_close() 。 但是 php 抛出了一个警告: PHP 警告:curl_close():尝试从回调中关闭 cURL 句柄。 任何想法如何做到这一点? 最佳答案
带有冲突的语法的精简版本: body: variable_list function_list; variable_list: variable_list variable | /* empty
我创建了新的开发者帐户,然后将应用程序转移到新帐户。然后我在新帐户下创建了相同的标识符。并构建App并上传到AppStore。 I have got the warning with WARNING
我想像这样管理类主任的所有 Activity : 此外所有 Activity 都扩展基本 Activity 以使用公共(public) View 。 在这种情况下,我想处理传输 Activity ,例
使用 C 中的简单链表实现,我如何告诉 Splint 我正在转让 data 的所有权? typedef struct { void* data; /*@null@*/ void* ne
请参阅以下 yacc 代码。如果我删除生产因素:'!' expr,解析冲突消失。这里发生了什么? %{ #include #include %} %token TRUE %token FALSE
是否可以将 props 向下传输到子组件,其中 { ..this.props } 用于更简洁的语法,但是排除某些 props,如 className 或 id? 最佳答案 您可以使用解构来完成这项工作
如果我有以下数据框: date A B M S 20150101 8 7 7.5 0 20150101 10 9 9
我需要将一个 __m128i 变量(比如 v)移动 m 位,以便位移动所有变量(因此,结果变量表示 v*2^m)。执行此操作的最佳方法是什么?! 请注意 _mm_slli_epi64 分别移动 v0
我需要这样调用我的程序: ./program hello -r foo bar 我从 argv[1] 中打招呼,但我在使用值 bar 时遇到问题,我是否也应该将“r:”更改为其他内容? while((
我是新来的 Bison我在转换/减少冲突方面遇到了麻烦...我正在尝试从文件加载到 array data[] : struct _data { char name[50]; char sur
当然有很多关于解决移位/归约错误的文档和方法。 Bison 文档建议正确的解决方案通常是%期待它们并处理它。 当你遇到这样的事情时: S: S 'b' S | 't' 您可以像这样轻松解决它们: S:
我有以下(大量精简的)快乐语法 %token '{' { Langle } '}' { Rangle } '..' { DotDot } '::' { ColonC
我的 Bison 解析器中有很多错误,即使它运行良好,我也想了解这些冲突。代码如下: 词法分析器: id ([[:alpha:]]|_)([[:alnum:]]|_)* %% {id
在我的项目中,我有这样的情况,一个 Activity 应该将值(value)转移到另一个 Activity 。并且根据这个值应该选择需要的菜单元素。我试图在 bundle 的帮助下做到这一点,但我不知
我一直在阅读 NSIndexPaths 以获得 uitableviews 等。但是我很难操纵现有的索引路径。 我想在保留行的同时采用现有的索引路径递增/移动每个部分。因此 indexPath.sect
我是一名优秀的程序员,十分优秀!