草庐IT

Mongodb副本集管理

jiahaijiao 2023-03-28 原文

添加副本集节点

1、副本集最小架构

副本集上一次配置完成,架构如下P-S-A,两个节点提供数据的访问,一个节点为仲裁节点(不存储数据),也是副本集的最小架构。

2、正式环境建议使用:P-S-S架构

3、添加新节点

对于读多写少的业务,可以通过添加复制集节点来均衡读负载,新节点版本应和复制集成员保持一致。添加操作命令在Primary节点执行。数据库操作尽量在业务低峰期操作,如果数据量较大复制会很慢,如果oplog设置过小还会导致数据同步失败,修改oplog大小,也可以停掉一个secondary节点将数据复制到新节点,云主机可以做磁盘镜像方式,然后进行节点的添加,添加为隐藏节点程序不可见,待数据同步完成,在设置为可见节点设置为secondary节点。

命令: rs.add( { host: "mongodb3.example.net:27017", arbiterOnly: true } ) //添加仲裁节点 rs.add( { host: "mongodbd4.example.net:27017", priority: 0 } ) //添加secondary节点,权重为0,

priority为0的节点,如果其它节点出现故障,该节点不能被选举成主节点(副本集节点个数尽量保持奇数)。

3.1、添加延迟备份节点

(如数据误删除,一小时内发现可以使用延迟节点进行恢复)

rs.add( { "_id" : <num>, //指定一个id "host" : <hostname:port>, //新节点的ip:端口 "priority" : 0, //该节点权重为0 "slaveDelay" : <seconds>, //延迟复制,延迟Primary节点多少秒 "hidden" : true //设置为隐藏节点(程序员不可见) }) >rs.add({_id:5,host:'10.0.1.9:27040',"slaveDelay":3600,"priority":0,"hidden":true,"buildIndexes":true}); //添加新节点延迟复制1小时,权重为0,该节点程序不可见,索引也进行同步

3.2、修改现有复制集节点信息

cfg = rs.conf() cfg.members[1].priority = 0 //权重设置为0 cfg.members[1].hidden = true //设置为隐藏节点 rs.reconfig(cfg)
需要注意的是cfg.members[1]这个1 和节点_id:1不是一回事,不要混淆,因为_id数字可以自定义的。 如下查看节点信息:从0开始数,0是顺序为1的节点,1是顺序为2的节点, cfg.members[1].priority = 0,是设置节点 "host" : "192.168.5.49:27017",

test:PRIMARY> rs.conf() { "_id" : "test", "version" : 1, "protocolVersion" : NumberLong(1), "members" : [ { "_id" : 0, "host" : "192.168.5.74:27017", "arbiterOnly" : false, "buildIndexes" : true, "hidden" : false, "priority" : 90, "tags" : { }, "slaveDelay" : NumberLong(0), "votes" : 1 }, { "_id" : 1, "host" : "192.168.5.49:27017", "arbiterOnly" : false, "buildIndexes" : true, "hidden" : false, "priority" : 90, "tags" : { }, "slaveDelay" : NumberLong(0), "votes" : 1 }, { "_id" : 2, "host" : "192.168.5.3:27017", "arbiterOnly" : true, "buildIndexes" : true, "hidden" : false, "priority" : 0, "tags" : { }, "slaveDelay" : NumberLong(0), "votes" : 1 } ],

4、查看副本集复制是否有延迟

test:PRIMARY> db.printReplicationInfo() configured oplog size: 23214.042724609375MB log length start to end: 17722secs (4.92hrs) oplog first event time: Fri Aug 27 2021 11:41:14 GMT+0800 (CST) oplog last event time: Fri Aug 27 2021 16:36:36 GMT+0800 (CST) now: Fri Aug 27 2021 16:36:38 GMT+0800 (CST) test:PRIMARY> db.printSlaveReplicationInfo() source: 192.168.5.74:27017 syncedTo: Fri Aug 27 2021 16:38:36 GMT+0800 (CST) 0 secs (0 hrs) behind the primary //和主节点同步没有延迟 test:PRIMARY>

5、更改同步源

新添加节点默认的同步源为Primary节点,也可以手动设置从其它节点进行数据同步,可以设置从secondary节点进行数据同步,连接到新添加的节点,

test:SECONDARY> use admin test:SECONDARY> db.getMongo().setSlaveOk() //默认不可读 mongo> db.adminCommand( { replSetSyncFrom: "192.168.5.49:27017" }) //设置新节点的同步源为

6、移除复制集节点

移除节点操作需要谨慎,如正常运行的节点需要移除,先进行节点stop在进行移除。

test:PRIMARY> rs.remove("192.168.5.49:27018") { "ok" : 1, "operationTime" : Timestamp(1630056399, 1), "$clusterTime" : { "clusterTime" : Timestamp(1630056399, 1), "signature" : { "hash" : BinData(0,"58s85u53HFuEjB9vF2Ex1J/BDXk="), "keyId" : NumberLong("7000949962682925057") } } } test:PRIMARY>

有关Mongodb副本集管理的更多相关文章

  1. ruby - i18n Assets 管理/翻译 UI - 2

    我正在使用i18n从头开始​​构建一个多语言网络应用程序,虽然我自己可以处理一大堆yml文件,但我说的语言(非常)有限,最终我想寻求外部帮助帮助。我想知道这里是否有人在使用UI插件/gem(与django上的django-rosetta不同)来处理多个翻译器,其中一些翻译器不愿意或无法处理存储库中的100多个文件,处理语言数据。谢谢&问候,安德拉斯(如果您已经在ruby​​onrails-talk上遇到了这个问题,我们深表歉意) 最佳答案 有一个rails3branchofthetolkgem在github上。您可以通过在Gemfi

  2. ruby-on-rails - 获取 inf-ruby 以使用 ruby​​ 版本管理器 (rvm) - 2

    我安装了ruby​​版本管理器,并将RVM安装的ruby​​实现设置为默认值,这样'哪个ruby'显示'~/.rvm/ruby-1.8.6-p383/bin/ruby'但是当我在emacs中打开inf-ruby缓冲区时,它使用安装在/usr/bin中的ruby​​。有没有办法让emacs像shell一样尊重ruby​​的路径?谢谢! 最佳答案 我创建了一个emacs扩展来将rvm集成到emacs中。如果您有兴趣,可以在这里获取:http://github.com/senny/rvm.el

  3. ruby-on-rails - 事件管理员日期过滤器日期格式自定义 - 2

    是否有简单的方法来更改默认ISO格式(yyyy-mm-dd)的ActiveAdmin日期过滤器显示格式? 最佳答案 您可以像这样为日期选择器提供额外的选项,而不是覆盖js:=f.input:my_date,as::datepicker,datepicker_options:{dateFormat:"mm/dd/yy"} 关于ruby-on-rails-事件管理员日期过滤器日期格式自定义,我们在StackOverflow上找到一个类似的问题: https://s

  4. ruby - (Ruby || Python) 窗口管理器 - 2

    我想用这两种语言中的任何一种(最好是ruby​​)制作一个窗口管理器。老实说,除了我需要加载某种X模块外,我不知道从哪里开始。因此,如果有人有线索,如果您能指出正确的方向,那就太好了。谢谢 最佳答案 XCB,X的下一代API使用XML格式定义X协议(protocol),并使用脚本生成特定语言绑定(bind)。它在概念上与SWIG类似,只是它描述的不是CAPI,而是X协议(protocol)。目前,C和Python存在绑定(bind)。理论上,Ruby端口只是编写一个从XML协议(protocol)定义语言到Ruby的翻译器的问题。生

  5. ruby-on-rails - 事件管理员和自定义方法 - 2

    这是我在ActiveAdmin中的自定义页面ActiveAdmin.register_page"Settings"doaction_itemdolink_to('Importprojects','settings/importprojects')endcontentdopara"Text"endcontrollerdodefimportprojectssystem"rakedataspider:import_projects_ninja"para"OK"endendend我想做的是,当我单击“导入项目”按钮时,我想在Controller中执行rake任务。但是我无法访问该方法。可能是什

  6. ruby-on-rails - (Ruby,Rails) 基于角色的身份验证和用户管理...? - 2

    我正在寻找用于Rails的优质管理插件。似乎大多数现有的插件/gem(例如“restful_authentication”、“acts_as_authenticated”)都围绕着self注册等展开。但是,我正在寻找一种功能齐全的基于管理/管理角色的解决方案——但不是简单地附加到另一个非基于角色的解决方案。如果我找不到,我想我会自己动手......只是不想重新发明轮子。 最佳答案 RyanBates最近做了两个关于授权的railscast(注意身份验证和授权之间的区别;身份验证检查用户是否如她所说的那样,授权检查用户是否有权访问资源

  7. Linux磁盘分区中物理卷(PV)、卷组(VG)、逻辑卷(LV)创建和(LVM)管理 - 2

    文章目录一基础定义二创建逻辑卷2-1准备物理设备2-2创建物理卷2-3创建卷组2-4创建逻辑卷2-5创建文件系统并挂载文件三扩展卷组和缩减卷组3-1准备物理设备3-2创建物理卷3-3扩展卷组3-4查看卷组的详细信息以验证3-5缩减卷组四扩展逻辑卷4-1检查卷组是否有可用的空间4-2扩展逻辑卷4-3扩展文件系统五删除逻辑卷5-1备份数据5-2卸载文件系统5-3删除逻辑卷5-4删除卷组5-5删除物理卷六LVM逻辑卷缩容6-1缩容注意事项6-2标准缩容步骤一基础定义LVM,LogicalVolumeManger,逻辑卷管理,Linux磁盘分区管理的一种机制,建立在硬盘和分区上的一个逻辑层,提高磁盘分

  8. ruby-on-rails - 使用用户或管理员模型和 Basecamp 样式子域设计登录 - 2

    我为Devise用户和管理员提供了不同的模型。我也在使用Basecamp风格的子域。除了我需要能够以用户或管理员身份进行身份验证的一些Controller和操作外,一切都运行良好。目前我有authenticate_user!在我的application_controller.rb中设置,对于那些只有管理员才能访问的Controller和操作,我使用skip_before_filter跳过它。不幸的是,我不能简单地指定每个Controller的身份验证要求,因为我仍然需要一些Controller和操作才能被用户或管理员访问。我尝试了一些方法都无济于事。看来,如果我移动authentica

  9. ruby-on-rails - 具有管理 namespace 的 Rails 3 中的 I18n - 2

    我正在根据Rails指南的建议开发Rails应用程序,以创建包含翻译的文件夹树和文件。我的文件夹树与此类似:|-defaults|---es.rb|---en.rb|-models|---book|-----es.rb|-----en.rb|-views|---defaults|-----es.rb|-----en.rb|---books|-----es.rb|-----en.rb|---users|-----es.rb|-----en.rb|---navigation|-----es.rb|-----en.rbconfig/locales/views/books/en.yml中的内容

  10. Ruby 文件句柄管理(打开的文件太多) - 2

    我在ruby​​(2.0.0p39474)中执行非常快速的文件访问,并不断收到异常Toomanyopenfiles看过thisthread,here,以及各种其他来源,我很清楚操作系统限制(在我的系统上设置为1024)。我执行此文件访问的代码部分是互斥的,并采用以下形式:File.open(filename,'w'){|f|Marshal.dump(value,f)}其中filename会根据调用该部分的线程快速变化。据我了解,此表单在block后放弃其文件句柄。我可以使用ObjectSpace.each_object(File)验证打开的File对象的数量.这报告最多有100个常驻内

随机推荐