PHP mongodb 设置从secondary读取不生效?

大神们好,我使用PHP去连接副本集群,我设置了读取首选项:

$db = 'xxxxx_day';
$collection = 'xxx_name';
$m = new MongoClient("mongodb://10.1.137.239:27019,10.1.138.77:27019", array('replicaSet'=> 'myreplica')); 
$m->setReadPreference(MongoClient::RP_SECONDARY); //设置只从second读
$db = $m->selectDB($db);
$collection = new MongoCollection($db, $collection);
MongoCursor::$timeout = -1;

$cursor = $collection->find();  
foreach ($cursor as $doc) {
    print_r($doc);
}

希望从副本里读取数据。但我的副本还没打开读权限,也就是 slaveOk=false 的。
但是PHP仍然能从senond里读出数据?为什么。难道那个 $m->setReadPreference(MongoClient::RP_SECONDARY);
不生效?如何确定读取操作就是secondary上来的,另外,PHPmongodb扩展版本是 1.4,按官方文档说法应该是支持所有方法的。
我的副本配置如下:

myreplica:PRIMARY> rs.status()rs.status()
{
        "set" : "myreplica",
        "date" : ISODate("2017-08-22T02:50:27Z"),
        "myState" : 1,
        "members" : [
                {
                        "_id" : 0,
                        "name" : "10.1.137.239:27019",
                        "health" : 1,
                        "state" : 1,
                        "stateStr" : "PRIMARY",
                        "uptime" : 10772642,
                        "optimeDate" : ISODate("2017-08-22T02:50:26.771Z"),
                        "lastGTID" : "GTID(2, 487518886)",
                        "lastUnappliedGTID" : "GTID(2, 487518886)",
                        "minLiveGTID" : "GTID(2, 487518887)",
                        "minUnappliedGTID" : "GTID(2, 487518887)",
                        "oplogVersion" : 4,
                        "highestKnownPrimaryInReplSet" : 2,
                        "self" : true
                },
                {
                        "_id" : 1,
                        "name" : "10.1.138.77:27019",
                        "health" : 1,
                        "state" : 2,
                        "stateStr" : "SECONDARY",
                        "uptime" : 10667333,
                        "optimeDate" : ISODate("2017-08-22T02:50:26.184Z"),
                        "lastGTID" : "GTID(2, 487518853)",
                        "lastUnappliedGTID" : "GTID(2, 487518853)",
                        "minLiveGTID" : "GTID(2, 487518854)",
                        "minUnappliedGTID" : "GTID(2, 487518854)",
                        "oplogVersion" : 4,
                        "highestKnownPrimaryInReplSet" : 2,
                        "lastHeartbeat" : ISODate("2017-08-22T02:50:26Z"),
                        "lastHeartbeatRecv" : ISODate("2017-08-22T02:50:25Z"),
                        "pingMs" : 0,
                        "syncingTo" : "10.1.137.239:27019"
                },
                {
                        "_id" : 2,
                        "name" : "10.1.16.14:27019",
                        "health" : 1,
                        "state" : 7,
                        "stateStr" : "ARBITER",
                        "uptime" : 1621504,
                        "highestKnownPrimaryInReplSet" : 2,
                        "lastHeartbeat" : ISODate("2017-08-22T02:50:26Z"),
                        "lastHeartbeatRecv" : ISODate("2017-08-22T02:50:26Z"),
                        "pingMs" : 3
                }
        ],
        "ok" : 1
阅读 2.8k
1 个回答

我把一个secondary关闭掉,则出现连接报错的情况,以此能说明,是$m->setReadPreference(MongoClient::RP_SECONDARY) 这个seconday连接起的作用吗?
还能有别的方式吗?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题