Наборы реплик
Чтобы подключиться к набору реплик, укажите один или несколько серверов
и используйте параметр "replicaSet"
. Несколько серверов могут быть разделены запятой.
Пример #1 Списки ReplicaSet
<?php
// Использование нескольких серверов (предпочтительно)
$m = new MongoClient("mongodb://rs1.example.com:27017,rs2.example.com:27017/?replicaSet=myReplSetName");
// Использование одного сервера
$m = new MongoClient("mongodb://rs1.example.com:27017", array("replicaSet" => "myReplSetName"));
// Использование нескольких серверов
$m = new MongoClient("mongodb://rs1.example.com:27017,rs2.example.com:27017", array("replicaSet" => "myReplSetName"));
?>
Драйвер PHP запросит перечисленные серверы базы данных, чтобы определить основной.
До тех пор, пока он может подключиться хотя бы к одному серверу из списка и найти основной, подключение будет успешным.
Если он не может установить соединение ни с одним из перечисленных серверов или не может найти основной,
возникнет исключение MongoConnectionException.
Подсказка
Необходимо всегда предоставлять список более чем одному члену ReplicaSet.
Для обеспечения максимальной доступности необходимо использовать хотя бы один сервер
из каждого вашего центра обработки данных.
Внимание
Имена хостов, которые указываются в списке подключения, должны совпадать
с именами хостов в конфигурации набора реплик.
Это связано с тем, что драйвер использует имена хостов только в конфигурации набора реплик
для создания хэша для своих постоянных соединений.
Например, если в списке используется IP-адрес, а для набора реплик заданы имена хостов,
драйвер откажется от подключений из списка, которые отличаются от канонических имен хостов,
указанных в наборе реплик.
По сути, эти неканонические соединения в списке будут воссозданы при каждом запросе,
что значительно уменьшит выгоду от использования постоянных соединений.
Внимание
Драйвер не поддерживает подключение к различным наборам реплик с одинаковым именем.
Это выходит за рамки сценария, поэтому убедитесь, что у вас есть отдельные имена для каждого из ваших наборов реплик.
Это также означает, что вы не можете сделать это:
Пример #2 Неправильное дублирование имени набора реплик
<?php
$m = new MongoClient("mongodb://devserver1,devserver2,devserver3/?replicaSet=repset");
$m = new MongoClient("mongodb://prodserver1,prodserver2,prodserver3/?replicaSet=repset");
?>
Вместо этого вам нужно задать два разных имени для ваших наборов реплик:
Пример #3 Правильное использование двух имен набора реплик
<?php
$m = new MongoClient("mongodb://devserver1,devserver2,devserver3/?replicaSet=devset");
$m = new MongoClient("mongodb://prodserver1,prodserver2,prodserver3/?replicaSet=prodset");
?>
Если основной сервер становится недоступным, будут проведены выборы, и вторичный будет назначен на роль основного
(если не может быть установлено большинство голосов).
В течение этого времени (» 20-60 секунд)
соединение не сможет выполнять какие-либо операции записи, и попытки сделать это приведут к исключению.
Запросы к вторичным серверам все еще смогут выполнять чтение.
Замечание:
По умолчанию, в предпочтениях чтения установлено чтение только с основного сервера.
Во время процесса выборов, основной сервер отсутствует, поэтому чтение не удастся.
Рекомендуется использовать предпочтения чтения MongoClient::RP_PRIMARY_PREFERRED
для приложений,
которым требуется высокая доступность для чтения, тогда чтение будет выполняться на вторичных серверах,
когда основной будет недоступен.
После выбора основного сервера попытка выполнить чтение или запись позволит драйверу обнаружить его.
Драйвер назначит его своим основным подключением к базе данных и продолжит нормальную работу.
Состояние вторичного сервера проверяется каждые 5 секунд
(настраивается с помощью mongo.ping_interval)
или когда следующая операция происходит через 5 секунд.
Он также перепроверит конфигурацию, когда у драйвера возникнут проблемы с подключением к серверу.
Отказы набора реплик проверяются каждые 60 секунд
(настраивается с помощью mongo.is_master_interval)
и каждый раз, когда происходит сбой операции записи при использовании подтвержденных записей.
Предостережение
Вторичные сервера могут отставать от основного в операциях, поэтому ваше приложение должно иметь возможность
обрабатывать устаревшие данные при использовании предпочтений чтения, отличных от MongoClient::RP_PRIMARY
.
Для получения дополнительной информации о наборах реплик
смотрите » документацию.