复制集合

要链接到一个复制,需要指定复制中的一个或多个成员,并使用 "replicaSet" 选项指定复制的名字。多个服务器用逗号分割。

Example #1 链接到一个复制

<?php
// Using multiple servers as the seed list (prefered)
$m = new MongoClient("mongodb://rs1.example.com:27017,rs2.example.com:27017/?replicaSet=myReplSetName"));

// Using one server as the seed list
$m = new MongoClient("mongodb://rs1.example.com:27017", array("replicaSet" => "myReplSetName"));

// Using multiple servers as the seed list
$m = new MongoClient("mongodb://rs1.example.com:27017,rs2.example.com:27017", array("replicaSet" => "myReplSetName"));
?>

驱动会查询数据库服务器列表,然后找出主服务器。如果可以成功的链接到指定的服务器至少一个,并且可以找到主服务器,链接就会成功。如果它无法链接指定的任何一个服务器,或者找不到主服务器,会抛出一个 MongoConnectionException 类型的异常

Tip

你应该始终指定多个复制中的服务器。为了达到最大的可用性,你指定的服务器列表应该包含每一个数据中心的服务器至少一台。

如果主服务器变为不可用,会有一台次要服务器通过投票算法自动提升为主服务器(除非“投票”无法选出主服务器)。在一段时间里 (» 20-60 秒),链接无法进行写操作,此时写入会导致一个异常。 到次要服务器的链接仍然可以提供读取功能。

Note:

默认的 读取偏好 是只从主服务器读取。在自动选择新的主服务器的时间里,读取操作也会失败。

对于要求很高的读取可用性的应用,推荐使用 MongoClient::RP_PRIMARY_PREFERRED 读取偏好来确保主服务器出现问题的时候能正确的从次要服务器中读取。

当新的主服务器被选出后,尝试读写操作时,驱动会检测新的主服务器。然后链接到它,继续提供正常的功能。

次要服务器的健康状态每5秒(可以通过 mongo.ping_interval 调整),或5秒后的下一个操作执行时检查一次。驱动会在连接服务器出现错误时重新检查配置。

复制集会每60秒(可以通过 mongo.is_master_interval 调整),或在w=1的写入操作发生错误的时候检查故障并尝试恢复。

Caution

次要服务器中的操作相比主服务器有一定延迟,因此如果使用 MongoClient::RP_PRIMARY 之外的读取偏好,你的程序就必须能够正确处理过时的数据。

要了解更多关于复制集的信息,参考 » core documentation.

更新日志

版本 说明
1.0.9 添加了复制集支持,和自动错误恢复。
add a note add a note

User Contributed Notes 1 note

up
2
wpigott at nospam dot example dot com
12 years ago
When using the mongodb connection string on a replica set, make sure you DO NOT PUT A SPACE between the servers.

IE. mongodb://db1.example.com:27017, db2.example.com:27017 will throw an error, but mongodb://db1.example.com:27017,db2.example.com:27017 will work correctly.
To Top