以单机模式启动成员

  1. > mongod --port 30000 --dbpath /var/lib/db

维护时启动单机模式,维护完毕后,以最原始的参数启动它。启动后,它会自动与副本集中的其它成员进行同步,将维护期间落下的操作全部复制过来。

副本集配置

创建副本集

  1. > var config = {
  2. "_id":setName,
  3. "members":[
  4. {"_id":0,"host":host1},
  5. {"_id":1,"host":host2},
  6. {"_id":2,"host":host3}
  7. ]
  8. };
  9. > rs.initiate(config);

修改副本集成员

连接到主节点添加新成员

  1. > rs.add("spock:27017");

移除成员

  1. > rs.remove("spock:27017");

修改副本集成员时,有几个限制:

  • 不能修改成员的 “_id” 字段。

  • 不能修将接收 rs.reconfig 命令的成员的优先级设为 0 。

  • 不能将仲裁者成员变成非仲裁者成员,反之亦然。

  • 不能将 “bulidIndexes”:false 的成员修改为 “bulidIndexes”:true。

创建比较大的副本集

副本集最多只能拥有 12 个成员,其中只有 7 个成员拥有投票权。这是为了减少心跳请求的网络流量和选举花费的时间。如果需要创建 7 个以上成员的副本集,只有 7 个成员可以拥有投票权,需要将其他成员的投票数量设为 0 :

  1. > rs.add({"_id":7,"host":"server-7:27017","votes":0});

强制重新配置

如果无法满足“大多数”要求的话,无法选举出新的节点,这时需要重新配置副本集。

  1. > rs.reconfig(config,{"force":true});

如果修改了某些成员的主机名,应该关闭所有副本集,以单机模式启动,手动修改 local.system.replset 文档,然后重启。

修改成员状态

把主节点变为备份节点

  1. > rs.stepDown();

主节点变为备份节点,维持 60 秒。这段时间没哟新的主节点被选举出来,这个节点可以重新参与选举。

阻止选举

在 1000 秒内不能选举

  1. > rs.freeze(1000);

维护模式

强制进入维护模式

  1. > db.adminCommand({"replSetMaintenanceMode":true});

从维护模式中恢复

  1. > db.adminCommand({"replSetMaintenanceMode":false});

监控复制

获取状态

查看每个成员当前的所有信息

  1. > rs.status();

复制图谱

MongoDB 根据 ping 时间选择同步源。一个成员向另一个成员发送心跳请求,就知道心跳请求所耗费的时间。选择同步源时,会选择距离自己较近数据比自己新的成员,不一定要从主节点复制。

禁用复制链

强制要求所有的成员都从主节点复制。只需要将 “allowChaining” 设为 false 即可。

计算延迟

备份节点与主节点之间的延迟程度,即最后一次操作的时间戳的差。

  1. > db.printReplicationInfo();

调整 oplog 大小

  1. 当服务器时是主节点,让它退位,以便让其他成员的数据能够尽快更新到与它一致。

  2. 关闭当前服务器。

  3. 将当前服务器以单机服务模式启动。

  4. 临时将 oplog 中的最后一条 insert 操作保存到其他集合中。

  5. 删除当前的 oplog。

  1. > db.oplog.rs.drop();
  1. 创建一个新的 oplog。
> db.createCollection("oplog.rs",{"capped":true,"size":10000});
  1. 将最后一条操作记录写回 oplog。
> var temp = db.tempLastOp.findOne();
> db.oplog.rs.insert(temp);
> db.oplog.rs.findOne() // 确保成功
  1. 将当前服务器作为副本集成员重新启动。

从延迟备份节点中恢复数据

  1. 关闭所有其他成员。

  2. 删除其他成员数据目录中的所有数据,确保每个成员的数据目录都是空的。

  3. 重启所有成员,然后它们会自动从延期备份节点中复制数据。

创建索引

你可能每次只想在一个成员创建索引,降低对应用程序的影响。

  1. 关闭一个备份节点服务器。

  2. 将这个服务器以单机模式启动。

  3. 在单机模式下创建索引。

  4. 索引创建完成后,将服务器作为副本集成员重新启动。

  5. 对副本集中的每个备份节点重复第 ① 至 ④ 步。

现在副本集的所有成员都成功创建了索引。下面需要给主节点创建索引。你可以在“空闲期”时给主节点创建索引,或者让主节点退化为备份节点,对这个服务器执行上诉四个步骤。

主从模式

这种模式下,MongoDB 不会自己做故障转移,而且需要声明主节点和从节点。当需要多于 11 个备份节点,或者是需要复制单个数据库。

参考

[1] MongoDB权威指南