когда я добавляю несколько серверов Solr в качестве конечной точки и использую один клиент Solarium для запуска запроса на любом сервере Solr;
Я добавляю репликацию master / slave в solr. сейчас я чувствую, когда сервер для onecore (master или slave) выходит из строя, клиент / солярий должен использовать доступную конечную точку.
Я получаю эту ОШИБКУ:
Message: Solr HTTP error: HTTP request failed, Failed connect to 127.0.0.1:8983; No error
потому что я останавливаю solr в порту 8983, а solr работает на подчиненном ядре в порту 9000, в этом случае iam ищет соединение с localhost2, если localhost не работает.
Это мой код:
$config = array(
"endpoint" => array("localhost" => array("host"=>"127.0.0.1",
"port"=>"8983", "path"=>"/solr", "core"=>"master",),
"localhost2" => array("host"=>"127.0.0.1",
"port"=>"9000", "path"=>"/solr", "core"=>"slave",)
) );
$client = new Solarium\Client($config);
$ping = $client->createPing();
$client->ping($ping,"localhost2");
$client->getEndpoints();
когда ключ localhost не работает и ключ localhost2 работает в порту 9000, я получаю это сообщение
Ошибка HTTP Solr: HTTP-запрос не выполнен, Ошибка подключения к 127.0.0.1:8983; Нет ошибок
И вывод $ client-> getEndpoints ();
object(Solarium\Client) {
[protected] options => array(
'adapter' => 'Solarium\Core\Client\Adapter\Curl',
'endpoint' => array(
'localhost' => array(
'host' => '*****',
'port' => '*****',
'path' => '/solr',
'core' => 'master'
),
'localhost2' => array(
'host' => '*****',
'port' => '*****',
'path' => '/solr',
'core' => 'slave'
)
)
)
[protected] queryTypes => array(
'select' => 'Solarium\QueryType\Select\Query\Query',
'update' => 'Solarium\QueryType\Update\Query\Query',
'ping' => 'Solarium\QueryType\Ping\Query',
'mlt' => 'Solarium\QueryType\MoreLikeThis\Query',
'analysis-document' => 'Solarium\QueryType\Analysis\Query\Document',
'analysis-field' => 'Solarium\QueryType\Analysis\Query\Field',
'terms' => 'Solarium\QueryType\Terms\Query',
'suggester' => 'Solarium\QueryType\Suggester\Query',
'extract' => 'Solarium\QueryType\Extract\Query',
'get' => 'Solarium\QueryType\RealtimeGet\Query'
)
[protected] pluginTypes => array(
'loadbalancer' => 'Solarium\Plugin\Loadbalancer\Loadbalancer',
'postbigrequest' => 'Solarium\Plugin\PostBigRequest',
'customizerequest' => 'Solarium\Plugin\CustomizeRequest\CustomizeRequest',
'parallelexecution' => 'Solarium\Plugin\ParallelExecution\ParallelExecution',
'bufferedadd' => 'Solarium\Plugin\BufferedAdd\BufferedAdd',
'prefetchiterator' => 'Solarium\Plugin\PrefetchIterator',
'minimumscorefilter' => 'Solarium\Plugin\MinimumScoreFilter\MinimumScoreFilter'
)
[protected] eventDispatcher => object(Symfony\Component\EventDispatcher\EventDispatcher) {
[private] listeners => array()
[private] sorted => array()
}
[protected] pluginInstances => array()
[protected] endpoints => array(
'localhost' => object(Solarium\Core\Client\Endpoint) {
[protected] options => array(
'host' => '*****',
'port' => '*****',
'scheme' => 'http',
'path' => '/solr',
'core' => 'master',
'timeout' => (int) 5,
'key' => 'localhost'
)
},
'localhost2' => object(Solarium\Core\Client\Endpoint) {
[protected] options => array(
'host' => '*****',
'port' => '*****',
'scheme' => 'http',
'path' => '/solr',
'core' => 'slave',
'timeout' => (int) 5,
'key' => 'localhost2'
)
}
)
[protected] defaultEndpoint => 'localhost'
[protected] adapter => null
}
Вот как мне удается переключаться между «конечными точками»:
$endpoints=[
'endpoint' => [
'foo' => [
'host' => '127.0.0.1',
'port' => '9000',
'path' => 'foo',
'core' => 'foo',
'timeout' => 15
],
'baz' => [
'host' => '127.0.0.1',
'port' => '7464',
'path' => 'baz',
'core' => 'baz',
'timeout' => 15
],
]
];
$solrClient = new Solarium\Client($config);
$solrClient->setDefaultEndPoint('baz');
И функция setDefaultEndPoint сделает волшебство
setDefaultEndPoint
`
Других решений пока нет …