在降级之前,主服务器检查被追赶的辅助服务器¶
为了最大程度地减少没有主服务器的时间,rs.stepDown()
如果主服务器
在最近操作时间之后的10秒钟内没有看到辅助服务器,则该方法将失败。您仍然可以强制主服务器降级,但是默认情况下,它将返回错误消息。
另请参见强制成员成为主要成员。
尽管主要版本号已更改,但是MongoDB 2.0是标准的增量生产版本,并且可以替代MongoDB 1.8。
在升级之前,请通读所有发行说明,并确保没有任何更改会影响您的部署。
如果在2.0中创建新索引,则可以降级到1.8,但是必须重新索引新集合。
mongoimport
并且mongoexport
现在正确遵守CSV规范来处理CSV输入/输出。这可能会破坏依赖于先前行为的现有导入/导出工作流。有关更多信息,请参见
SERVER-1097。
日记被默认启用在2.0的64位版本。如果你还是喜欢没有日志的运行,启动mongod
与--nojournal
运行时选项。否则,MongoDB将在启动期间创建日记文件。第一次开始mongod
记录日记时,mongod
创建新文件会出现延迟。此外,您可能会看到写入吞吐量降低。
mongod
¶mongod
实例。将现有的二进制文件替换为2.0.x mongod
二进制文件,然后重新启动MongoDB。通过关闭MongoDB下载页面上的,并用2.0.x二进制文件替换1.8二进制文件,一次升级集合的辅助成员。mongod
为了避免在故障转移时丢失最后的几个更新,您可以暂时停止应用程序(故障转移应该少于10秒),或者可以在应用程序代码中设置写入关注点,以确认每个更新都到达多个服务器。
使用rs.stepDown()
降低主数据库的级别以允许常规故障转移过程。
rs.stepDown()
与replSetStepDown
简单地直接关闭主数据库相比,它提供了更短,更一致的故障转移过程。
主数据库降级后,请关闭其实例并通过将mongod
二进制文件替换为2.0.x二进制文件进行升级。
当进入磁盘时,服务器将在写入不太可能在内存中的数据时产生写锁定。现在存在此功能的初始实现:
有关更多信息,请参见SERVER-2563。
2.0中的特定操作收益为:
_id
MongoDB 2.0会减小默认堆栈大小。当有许多(例如1000个以上)客户端连接时,此更改可以减少总内存使用量,因为每个连接都有一个线程。尽管线程堆栈的某些部分在未使用的情况下可以换出,但是某些操作系统的执行速度很慢,因此可能会出现问题。默认堆栈大小小于系统设置或1MB。
v2.0对索引进行了重大改进 。索引通常小25%,快25%(取决于用例)。从以前的版本升级时,只有创建新索引或为旧索引重新编制索引,才能实现新索引类型的优点。
现在已签名日期,并且最大索引键的大小已从819字节略微增加到1024字节。
默认情况下,所有创建新索引的操作都将产生2.0索引。例如:
repairDatabase
命令将索引转换为2.0索引。要将给定集合的所有索引转换为2.0类型,请调用compact
命令。
创建新索引后,降级到1.8.x将需要重新索引使用2.0创建的所有索引。参见 /tutorial/roll-back-to-v1.8-index。
现在,每个副本集成员都可以拥有一个优先级值,该优先级值包括一个从0到1000(含)之间的浮点。通过优先级,您可以控制希望将集合中的哪个成员作为主要 成员,而可以看到大多数集合的具有最高优先级的成员将被选为主要成员。
例如,假设你有一个副本集有三个成员,A
,B
,和
C
,并假设其优先级设置如下:
A
的优先级是2
。B
的优先级是3
。C
的优先级是1
。在正常操作期间,该设备将始终被选B
为主设备。如果B
不可用,则该集合将被A
选为主要集合。
有关更多信息,请参见
priority
文档。
您现在可以“标记” 副本集成员以指示其位置。您可以使用这些标签来设计 跨数据中心,机架,特定服务器或任何其他体系结构选择的自定义写入规则。
例如,管理员可以定义诸如“非常重要的写入”或
customerData
“审核线索”之类的规则,以复制到某些服务器,机架,数据中心等。然后,在应用程序代码中,开发人员会说:
如果它满足DBA为“非常重要的写入”定义的条件,它将成功。
有关更多信息,请参阅数据中心意识。
驱动程序还可能支持标记识别读取。无需指定slaveOk
,而是slaveOk
使用标记来指定要从中读取数据中心。有关详细信息,请参见
驱动程序文档。
为了最大程度地减少没有主服务器的时间,rs.stepDown()
如果主服务器
在最近操作时间之后的10秒钟内没有看到辅助服务器,则该方法将失败。您仍然可以强制主服务器降级,但是默认情况下,它将返回错误消息。
另请参见强制成员成为主要成员。
--nojournal
命令行选项将其禁用。--journalCommitInterval
存在一个新的运行时选项,用于指定您自己的组提交间隔。默认设置不变。{ getLastError: { j: true } }
{j: true}
{j: true}
ContinueOnError
批量插入的新选项¶continueOnError
在驱动程序中设置大容量插入的选项
,以便大容量插入将继续插入所有剩余的文档,即使插入失败,例如重复的密钥异常或网络中断。该getLastError
命令将报告是否有任何插入失败,而不仅仅是最后一次插入失败。如果发生多个错误,客户端将仅接收最新getLastError
结果。
注意
对于分片群集上的批量插入,getLastError
仅此命令不足以验证成功。应用程序必须在应用程序逻辑中验证批量插入是否成功。
使用new sharded
标志,可以将map / reduce的结果发送到分片集合。与reduce
或
merge
标志结合使用,可以继续将数据添加到来自地图/归约工作的非常大的集合中。
有关更多信息,请参见Map-Reduce和
mapReduce
参考。
在2.0中,当使用身份验证(例如authorization
)运行时
,除以下命令外,所有数据库命令都需要身份验证。