jjzjj

MongoDB ReplicaSet - 当只剩下 PRIMARY 时,PRIMARY 角色降为 SECONDARY

coder 2023-10-28 原文

我正在研究使用 MongoDB ReplicaSet 实现高可用性。

但是刚刚发现在3个节点的ReplicaSet中,如果PRIMARY mongod是唯一剩下的(也就是另外2个mongod实例死亡或者被关闭),然后在几秒后它切换角色到SECONDARY 并不再接受写入。这使得副本集的值(value)低于单个实例。

我知道并理解 PRIMARY 选举,但是 PRIMARY 角色被固定到一个服务器(通过使用 priority 设置为 10)和(例如由于网络问题)其他服务器成为无法访问,为什么主服务器就放弃了?!

在 Windows (mongodb-win32-x86_64-2008plus-2.4.8) 和 Linux (CentOS) 上使用 2.4.8 以及在 Linux 上使用 2.0.x 进行测试

赏金开始:

如果副本集在 PRIMARY 感到孤独时放弃,有什么替代方案可以确保 100% 的可用性?或者可能需要针对该案例进行特殊配置。当前的实现使得 ReplicaSet 在出现网络问题时变得脆弱。

更新:

唉,我之前没有说过#3 宕机的场景(剩下 PRIMARY 和 SECONDARY) 过了一会儿,SECONDARY 下降了。然后 PRIMARY 真的只是“放弃”,因为已经知道 #3 有一段时间不可用了。这实际上是在我的测试环境中测试的。

var rsconfig = {"_id":"rs4","members":[{"_id":0,"host":"localhost:27041","priority":10},{"_id":1,"host":"localhost:27042"},{"_id":2,"host":"localhost:27043","arbiterOnly":true}]}
printjson(rsconfig)
rs.initiate(rsconfig)

我们最初想把 SECONDARY 和#3(也就是 ARBITER)放在同一台服务器上, 但是由于标题的问题,我们不能使用这样的配置。

感谢 Alan Spencer 首先解释了 MongoDB 采用的逻辑。

最佳答案

这是预料之中的,因为大多数成员都关闭了 MongoDB 不假定最后剩下的成员是一致的。

当您拥有大多数成员时,有几个选项:http://docs.mongodb.org/manual/tutorial/reconfigure-replica-set-with-unavailable-members/

关于MongoDB ReplicaSet - 当只剩下 PRIMARY 时,PRIMARY 角色降为 SECONDARY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20001056/

有关MongoDB ReplicaSet - 当只剩下 PRIMARY 时,PRIMARY 角色降为 SECONDARY的更多相关文章

  1. ruby - 使用 Sequel 创建记录时出现“Sequel::Error: id is a restricted primary key” - 2

    我有一个基于Sequel和Oracle适配器的模型:classOperation如果我尝试使用Oracle的sequence.nextval作为主键来创建记录:Operation.create(:id=>:nextval.qualify(:Soperations),:payee_id=>12345,:type=>"operation",:origin=>"user-12345",:parameters=>{}.to_s)我有错误:Sequel::Error:idisarestrictedprimarykey。在这种情况下创建记录或将Oracle的序列“映射”到id列的正确方法是什么?或

  2. ruby-on-rails - Rails has_many :through --> Should I keep a primary key column? - 2

    我有'author'和'book'表,加入了has_many:through表'author_book'据我所知,“author_book”表上的:id主键字段没有任何意义……但在我提出这个想法之前,我只是想确认一下。那么,是否有任何理由将“id”列保留在has_many:through表中?提前致谢... 最佳答案 保留它。稍后您会发现唯一标识符以最初并不明显的方式得到返回。与其他敏捷开发原则不同,最好预先解决此类数据质量问题。 关于ruby-on-rails-Railshas_man

  3. ruby-on-rails - 尝试将本地数据库推送到 Heroku 后出现 "ActionView::Template::Error (Unknown primary key for table" - 2

    对于我通过Heroku托管的Ruby-on-Rails应用程序,我最近下载了一个备份,在本地恢复它,然后从外部来源将数据添加到数据库中。一切正常。在使用herokupg:pushHEROKU_DATABASE_URL--app将更新后的数据库推送到Heroku之后该应用程序运行良好,我可以看到新添加的数据。但是今天当我尝试在Heroku上登录该应用程序时,我收到了错误消息。在我的日志文件中,我看到了这个错误:ActionView::Template::Error(Unknownprimarykeyfortable...根据这篇SO帖子:Getting"Unknownprimarykey

  4. ruby - 动态模块 : Querying tables with secondary index - 2

    我正在使用gemaws-sdk-ruby查询看起来像这样的表:hk(Hashkey)|guid(Rangekey)|Timestamp(SecondaryRangeindex)|otherattributesaaaa|50|2013-02-04T12:33:00Z|aaaa|244|2013-04-22T04:54:00Z|aaaa|342|2013-05-18T06:52:00Z|bbbb|243|2013-06-21T13:17:00Z|我想要做的是获取在特定日期之后创建的所有“aaaa”行。例如:AWS.config(access_key_id:'xxx',secret_acce

  5. go - 在辅助路由中提供静态文件 ("/route/secondary/route") Golang - 2

    在我的根句柄(“/”)或客户端句柄(“/clients”)中,静态文件是正确可用的,并且查看chrome上的网络选项卡,我看到这样的服务器请求:localhost:8080/static/file.example但是如果我在辅助句柄(“/Clients/route”)上,不能正常工作,我看到这个:localhost:8080/clients/static/file.exampleStripPrefix不会从请求中删除“客户端”。funcmain(){http.Handle("/static/",http.StripPrefix("/static/",http.FileServer(ht

  6. sql - 为什么我的代码错误(mssql : Violation of PRIMARY KEY constraint 'PK_SMSBlast2' . 无法在对象 'dbo.SMSBlast2' 中插入重复键)? - 2

    我的代码有问题,我正在使用库GORM创建数据或将数据插入到我的restfulapi,打印错误如下所示:(mssql:ViolationofPRIMARYKEYconstraint'PK_SMSBlast2'.无法在其中插入重复键对象'dbo.SMSBlast2'。重复键值为(0)。)主要包import("encoding/json""fmt""github.com/gorilla/mux""github.com/jinzhu/gorm"_"github.com/jinzhu/gorm/dialects/mssql""log""net/http""time")键入SMSBlast结构{序

  7. android - 颜色 Primary Dark 不起作用 - 2

    我之前在color.xml文件中设置了colorprimarydark,状态栏颜色与colorprimarydark的颜色相同!但几个小时前,我制作了一个菜单资源文件,并在我的工具栏中创建了一个搜索按钮!。当我运行我的代码时,我看到原色深色消失了并且不起作用。我进行了很多搜索以了解问题所在,但没有找到任何东西。请指导我解决这个问题。风格.xml:@color/colorPrimary@color/colorPrimaryDark@color/colorAccent样式-v21:true@color/colorNavBartruetruetrue@android:transition/m

  8. windows - 传递给 D3DCompile2 的 "secondary data"是什么? - 2

    随着VisualStudio2012的发布,Microsoft添加了D3DCompile2API,新版本D3DCompile.唯一的区别是D3DCompile2需要一些与某些“辅助数据”相关的附加参数。文档中没有讨论这些数据的性质,谷歌搜索也没有找到任何相关信息。D3DCompile2接受的“辅助数据”是什么,它可能来自哪里以及它的用途是什么? 最佳答案 它的存在是为了让两个不同的DirectCompute着色器使用完全相同的UAV对齐。这有点像hack,所以忽略它,传递nullptr/0,然后继续:)我已经提交了一个错误以确保MS

  9. C++ MFC : How to open immediately a secondary dialog after the first modal dialog was created - 2

    如何在不按任何按钮的情况下从对话框中打开C++MFC中的辅助模式对话框?(如果我在OnInitDialog()中创建一个对话框,第一个对话框将不会出现。) 最佳答案 只需在显示辅助对话框之前调用OnInitDialog中的ShowWindow(SW_SHOW);。 关于C++MFC:Howtoopenimmediatelyasecondarydialogafterthefirstmodaldialogwascreated,我们在StackOverflow上找到一个类似的问题:

  10. windows - 一诺设置 : How to get the primary monitor's resolution? - 2

    我正在尝试使用INNO编写安装程序脚本,但我遇到了一个问题,我需要获取运行安装程序的机器的屏幕分辨率,并使用该值在桌面上创建一个快捷方式决议作为论据之一。我知道如何创建快捷方式,但我不知道如何提取屏幕分辨率以及如何传递该信息(可能存储在自定义变量中)以在桌面快捷方式中使用它。感谢您的宝贵时间:)编辑:我无法更改应用程序,因为我无权这样做。所以请不要建议这样做。 最佳答案 我的解决方案是使用GetSystemMetrics(),它可以在user32.dll中找到。这段代码正是我想要的,并且已经在具有双显示器设置的Windows7Pro

随机推荐