我创建了一个包含 3 个成员的副本集,这样我就可以在不影响主数据库性能的情况下使用其中一个成员进行读取操作。
为了实现这一点,主数据库系统被配置为主要的,另一个是优先级为 0 的辅助系统,以便在发生中断时不会接管主要角色,第三个是帮助打破平局的仲裁者MongoDB 成员数量为奇数的要求。
在玩这个设置时,我注意到如果我杀死仲裁者和我的次要成员,主要成员就会变成次要成员。这将影响主数据库的读写访问,因为它的角色已经改变。要解决此问题,我必须重新启动主数据库并将其从副本集中删除,直到我的辅助数据库和/或仲裁器恢复在线。
虽然两个系统出现故障或出现网络问题的可能性很低,但我已将此漏洞引入主数据库。有没有办法避免这个问题。我想到的一个想法是在另一台机器上添加另一个仲裁器,但是我不确定这是否可行,然后是否可以使集合平衡。
最佳答案
当次要副本和仲裁副本被杀死时,主要副本成为次要副本,因为它没有获得多数选票(在这种情况下只有 1/3,不到 50%)成为主要副本。目的是防止在网络中断期间多个副本成为主副本以保持数据一致性。
在这种情况下添加另一个仲裁者无济于事,因为您将只有 2/4 的选票,不超过 50%。这就是为什么我们不需要偶数个副本集的原因。在这种情况下,您可以添加两个仲裁器以获得奇数。
如果您真的不希望次要成为主要(例如,次要用于只读)并防止主要成为次要,您可以将次要和仲裁者的投票数设置为 0(参见 http://docs.mongodb.org/manual/reference/replica-configuration/#local.system.replset.members[n].votes ).在这种情况下,您可以删除仲裁器,因为它变得无用了。
cfg = rs.conf()
cfg.members[0].votes = 1 // the primary (by default votes = 1)
cfg.members[1].votes = 0 // the secondary
cfg.members[2].votes = 0 // the arbiter
rs.reconfig(cfg)
另一种解决方案是您可以将 3 票投给主选票。 The total number of votes is then 5, and the primary always win the election with at least 3/5 votes.但这自 2.6 版以来已被弃用,该版本不允许投票高于 1。
cfg = rs.conf()
cfg.members[0].votes = 3 // the primary
cfg.members[1].votes = 1 // the secondary
cfg.members[2].votes = 1 // the arbiter
rs.reconfig(cfg)
关于MongoDB、副本集和防止主节点成为辅助节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26167440/
我在app/helpers/sessions_helper.rb中有一个帮助程序文件,其中包含一个方法my_preference,它返回当前登录用户的首选项。我想在集成测试中访问该方法。例如,这样我就可以在测试中使用getuser_path(my_preference)。在其他帖子中,我读到这可以通过在测试文件中包含requiresessions_helper来实现,但我仍然收到错误NameError:undefinedlocalvariableormethod'my_preference'.我做错了什么?require'test_helper'require'sessions_hel
我有一个Controller,我想为这个Controller创建一个助手,我可以在不包含它的情况下使用它。我尝试像这样创建一个与Controller同名的助手classCars::EnginesController我创建的助手是moduleCars::EnginesHelperdefcheck_fuellogger.debug("chekingfuel")endend我得到的错误是undefinedlocalvariableormethod`check_fuel'for#有没有我遗漏的约定? 最佳答案 如果你真的想在Controll
我有一个ActiveRecord对象,我想在不对模型进行永久验证的情况下阻止它被保存。您过去可以使用errors.add执行类似的操作,但它看起来不再有效了。user=User.lastuser.errors.add:name,"namedoesn'trhymewithorange"user.valid?#=>trueuser.save#=>true或user=User.lastuser.errors.add:base,"myuniqueerror"user.valid?#=>trueuser.save#=>true如何在不修改用户对象模型的情况下防止将用户对象保存在Rails3.2中
Ruby中防止SQL注入(inject)的好方法是什么? 最佳答案 直接使用ruby?使用准备好的语句:require'mysql'db=Mysql.new('localhost','user','password','database')statement=db.prepare"SELECT*FROMtableWHEREfield=?"statement.execute'value'statement.fetchstatement.close 关于ruby-防止SQL注入(inject
我正在学习Rails,我注意到Rails不断地使用诸如link_to之类的辅助方法,而不是仅仅使用普通的html。现在我可以理解为什么他们会使用他们会使用一些辅助方法,但我不明白为什么他们更喜欢辅助方法而不是直接编码html。为什么Rails更喜欢辅助方法而不是您必须手动编写html?为什么Rails团队做出这样的设计选择? 最佳答案 在Rails应用程序中,通常使用URL方法和内容方法生成链接,例如这绝对比将它们放入中更易于管理手动标记。">(您正在使用路由器生成这些URL,对吗?如果您硬编码/users/1并决定稍后将其设为/u
文章目录1.任务背景2.任务目标3.相关知识点4.任务实操4.1安装配置JDK4.2启动FISCOBCOS4.3下载解压WeBASE-Front4.4拷贝sdk证书文件4.5启动节点4.6访问节点4.7检查运行状态5.任务总结1.任务背景FISCOBCOS其实是有控制台管理工具,用来对区块链系统进行各种管理操作。但是对于初学者来说,还是可视化界面更友好,本节就来介绍WeBASE管理平台,这是一款微众银行开源的自研区块链中间件平台,可以降低区块链使用的门槛,大幅提高区块链应用的开发效率。微众银行是腾讯牵头设立的民营银行,在国内民营银行里还是比较出名的。微众银行参与FISCOBCOS生态建设,一定
基本上我想选择一个节点(div),其中它的子节点(h1,b,h3)包含指定的文本。Childtext1Childtext2...Childtext3我期待的是/html/div/而不是/html/div/h1我在下面有这个,但不幸的是返回了child,而不是div的xpath。expression="//div[contains(text(),'Childtext1')]"doc.xpath(expression)我期待的是/html/div/而不是/html/div/h1那么有没有一种方法可以简单地使用xpath语法来做到这一点? 最佳答案
我在生产环境(CentOS5.6)中遇到此错误,但在开发环境(Ubuntu11.04)中运行良好。在这两种环境中,该应用程序都使用Ruby1.9.3和Rails3.0.9,并由passenger和nginx提供服务。我的Mechanizegem版本是2.3。未找到代码转换器(UTF-8)此代码的最后一行触发它:mech=Mechanize.newpage=mech.get("http://myurl.com/login.php?login_name=a&password=b")form=page.form_with(:name=>"loginForm")form.field_with(
这个问题在这里已经有了答案:Nokogiri:SelectcontentbetweenelementAandB(3个答案)关闭2年前。我正在从url中抓取文本的div,并想删除具有backtotop类的段落下方的所有内容。我在stackoverflow上看到了一段遍历代码片段,看起来很有希望,但我不知道如何将它合并,所以@el只包含第一个p.backtotop之前的所有内容分区我的代码:@doc=Nokogiri::HTML(open(url))@el=@doc.css("div")[0]end遍历片段:doc=Nokogiri::HTML(code)stop_node=doc.css
这几天我一直在为这个问题苦苦挣扎。我有一个正在为其构建一些API的应用程序,并且上述错误总是在第一次运行时使我的应用程序崩溃。重新加载应用程序时错误消失,但仍然很烦人。以下是关于此错误的一些类似问题:AcopyofxxxhasbeenremovedfromthemoduletreebutisstillactiveArgumentError:AcopyofApplicationControllerhasbeenremovedfromthemoduletreebutisstillactive这两个链接都没有解决我面临的问题。这是完整的堆栈跟踪:ArgumentError(AcopyofAp