db.currentOp()
現在実行中のクエリを確認するために、mongodb ReplicaSet のさまざまなメンバーに対してコマンドを実行しようとしています。
私がデータを取得するのはマスターだけで、すべてのセカンダリは次のように応答します。
array(3) {
'errmsg' =>
string(10) "not master"
'note' =>
string(16) "from execCommand"
'ok' =>
double(0)
}
テストコード:
<?php
$servers = array();
$servers['primary'] = new MongoClient('mongodb://primary:27017');
$servers['secondary1'] = new MongoClient('mongodb://secondary1:27017');
$servers['secondary2'] = new MongoClient('mongodb://secondary2:27017');
foreach ($servers as $name => $client) {
echo $name . ':' . PHP_EOL. PHP_EOL;
/* @var $client \MongoClient */
$admin = $client->selectDB('admin');
var_dump($admin->execute('db.currentOp()'));
echo PHP_EOL;
}
Mongo シェルを使用してセカンダリに接続するとdb.currentOP()
、問題なくシェルで実行できます。
RoboMongo ( http://robomongo.org/ ) を使用してセカンダリに接続するとdb.currentOP()
、問題なくシェルで実行できます。
MongoVue ( http://www.mongovue.com/ ) を使用してセカンダリに接続すると、サーバー ページで実行中のクエリを確認できます。
それで、私は何か間違ったことをしていますか、それともphpでセカンダリに対してこのコマンドを実行することはサポートされていませんか?
他の言語のように見えるため、セカンダリからデータを取得することが可能です。
これを何らかの形でphpから実行するためのヒントをいただければ幸いです。
テスト環境
MongoDB サーバー: 2.2.2 (プライマリ 1 つ、セカンダリ 2 つの ReplicaSet)
PHP: 5.4.9 / 5.3.5
MongoDB PHP ドライバー: 1.4.4 / 1.3.0 on ubuntu 13.04 / debian
解決:
<?php
$servers = array();
$servers['primary'] = new MongoClient('mongodb://primary:27017');
$servers['secondary1'] = new MongoClient('mongodb://secondary1:27017');
$servers['secondary2'] = new MongoClient('mongodb://secondary2:27017');
foreach ($servers as $name => $client) {
echo $name . ':' . PHP_EOL. PHP_EOL;
/* @var $client \MongoClient */
$admin = $client->selectDB('admin');
var_dump($admin->selectCollection('$cmd.sys.inprog')->findOne());
echo PHP_EOL;
}