•   MongoDB教程
  • MongoDB快速入门
  • MongoDB历史
  • MongoDB特点
  • MongoDB数据库的优点
  • MongoDB安装配置(Windows)
  • MongoDB安装配置(Ubuntu)
  • MongoDB安装配置(RedHat/CentOS)
  • MongoDB数据建模
  • MongoDB创建数据库
  • MongoDB删除数据库
  • MongoDB创建集合
  • MongoDB删除集合
  • MongoDB数据类型
  • MongoDB插入文档
  • MongoDB查询文档
  • MongoDB更新文档
  • MongoDB删除文档
  • MongoDB投影(选择字段)
  • MongoDB限制记录数
  • MongoDB排序记录
  • MongoDB索引
  • MongoDB聚合
  • MongoDB复制
  • MongoDB分片
  • MongoDB备份与恢复
  • MongoDB部署
  • Java连接MongoDB操作
  • Python连接MongoDB操作
  • PHP连接MongoDB操作
  • Ruby连接MongoDB操作
  • 高级部分
  • MongoDB关联关系
  • MongoDB数据库引用
  • MongoDB覆盖查询
  • MongoDB分析查询
  • MongoDB原子操作
  • MongoDB高级索引
  • MongoDB索引限制
  • MongoDB ObjectId
  • MongoDB Map Reduce
  • MongoDB文本搜索
  • MongoDB正则表达式
  • MongoDB GridFS
  • MongoDB固定循环集合
  • MongoDB自动递增序列
  • 用户及安全
  • MongoDB安全检查表
  • MongoDB认证
  • MongoDB用户
  • MongoDB添加用户
  • MongoDB启用身份验证
  • MongoDB管理用户和角色
  • MongoDB更改用户密码和自定义数据

MongoDB复制

复制是跨多个服务器同步数据的过程。复制提供冗余,并通过不同数据库服务器上的多个数据副本增加数据可用性。 复制保护数据库免受单个服务器的丢失。 复制还允许从硬件故障和服务中断中恢复。 使用其他数据副本,可以将其专用于灾难恢复,报告或备份。

为什么复制?

  • 保持数据安全
  • 数据的高可用性(24 * 7)
  • 灾难恢复
  • 维护无停机(如备份,索引重建,压缩)
  • 读取缩放(额外的副本可读)
  • 副本集对应用程序是透明的

MongoDB复制的工作原理

MongoDB通过使用副本集来实现复制。副本集是托管相同数据集的一组 mongod 实例。 在一个副本中,一个节点是接收所有写操作的主节点。所有其他实例(例如辅助节点)都应用主节点的操作,以便它们具有相同的数据集。 副本集可以只有一个主节点。

  • 副本集是一组两个或多个节点(通常最少需要3个节点)。
  • 在副本集中,一个节点是主节点,其余节点是次要节点。
  • 所有数据从主节点复制到辅助节点。
  • 在自动故障切换或维护时,选择为主节点建立,并选择新的主节点。
  • 恢复故障节点后,它再次加入副本集,并作为辅助节点。

显示了MongoDB复制的典型图,客户端应用程序始终与主节点进行交互,然后主节点将数据复制到辅助节点。

副本集功能

  • N个节点的集群
  • 任何一个节点都可以是主节点
  • 所有写入操作都转到主节点操作
  • 自动故障切换
  • 自动恢复
  • 共识一般选举

设置副本集

在本教程中,我们将独立的 MongoDB 实例转换为副本集。要转换为副本集,以下是步骤 -

  • 关机正在运行 MongoDB 服务器。
  • 通过指定 - replSet选项启动 MongoDB服 务器。 以下是--replSet的基本语法 -
mongod --port "PORT" --dbpath "YOUR_DB_DATA_PATH" --replSet "REPLICA_SET_INSTANCE_NAME"

示例

mongod --port 27017 --dbpath "D:\set up\mongodb\data" --replSet rs0
  • 它在端口27017上启动名称为rs0的 mongod 实例。
  • 现在启动命令提示符并连接到这个 mongod 实例。
  • 在Mongo客户端中,发出命令rs.initiate()以启动新的副本集。
  • 要检查副本集配置,可使用命令rs.conf()。 要检查复制集的状态,请使用命令rs.status()。

将会员添加到副本集

要将成员添加到副本集,请在多台计算机上启动 mongod 实例。 现在启动一个 mongo 客户端并发出一个命令rs.add()。

语法

rs.add()命令的基本语法如下:

>rs.add(HOST_NAME:PORT)

示例

假设您的 mongod 实例名称是 mongod1.net,它在端口 27017 上运行。要将此实例添加到副本集,请在 Mongo 客户端中发出命令 rs.add()。

>rs.add("mongod1.net:27017")
>

只能在连接到主节点时,将 mongod 实例添加到副本集。要检查是否连接到主服务器,请在 mongo 客户端中发出命令db.isMaster()。

rs0:PRIMARY> db.isMaster()
{
        "hosts" : [
                "ubuntu:27017"
        ],
        "setName" : "rs0",
        "setVersion" : 1,
        "ismaster" : true,
        "secondary" : false,
        "primary" : "ubuntu:27017",
        "me" : "ubuntu:27017",
        "electionId" : ObjectId("7fffffff0000000000000001"),
        "lastWrite" : {
                "opTime" : {
                        "ts" : Timestamp(1498896581, 1),
                        "t" : NumberLong(1)
                },
                "lastWriteDate" : ISODate("2017-07-01T08:09:41Z")
        },
        "maxBsonObjectSize" : 16777216,
        "maxMessageSizeBytes" : 48000000,
        "maxWriteBatchSize" : 1000,
        "localTime" : ISODate("2017-07-01T08:09:50.365Z"),
        "maxWireVersion" : 5,
        "minWireVersion" : 0,
        "readOnly" : false,
        "ok" : 1
}
rs0:PRIMARY>

上一篇:MongoDB聚合下一篇:MongoDB分片