Резервні ApacheSolr сервери для Drupal

21.02.2011
Reserve ApacheSolr servers for Drupal
Автор:

По перше, що таке Apache Solr?

Apache Solr - це розширювана пошукова платформа з відкритим вихідним кодом для проекту Apache Lucene

Чому Apache Solr

Основними критеріями вибору цієї платформи для нас стало те, що Apache Solr оптимізований для роботи з великою нагрузкою і що реплікація вже в складі ядра платформи, а це дає великі можливості для масштабування.

При розробці одного з проектів ми зіткнулись з питанням «А що буде якщо наш основний Solr сервер раптом перестане відповідати? Вся система пошуку на сайті вмирає?».

Інколи в таких ситуаціях можна переключатися на пошук ядра Друпала (такій функціонал є в базовому складі модуля Друпала Apache Solr Search Integration), але на великих проектах таке не можливо в силу того що це створить смертельну нагрузку на базу данних - такий варіант відкидаємо зразу. 

Як варіант у випадку падіння основного SOLR-сервера адміністратор ASAP піднімає новий (ну або з slave-сервера робить master) і прописує новий коннект в Друпалі.

Але тут є 2 проблеми. По-перше адміністратор не може бути онлайн 24 години на добу, а по-друге якщо підняти новий сервер то переіндексація матеріалів може зайняти декілька десятків годин...

Наше рішення в цій ситуації:

1)  В settings.php додаємо настпні рядки:

$conf['apachesolr_servers'] = array( 
  'main'   => array( 
    'apachesolr_host' => '1.2.3.4', // ip 
    'apachesolr_path' => '/solr', 
    'apachesolr_port' => 8081, 
  ), 
  'reserve' => array( 
    'apachesolr_host' => '2.3.4.5', // ip 
    'apachesolr_path' => '/solr', 
    'apachesolr_port' => 8080, 
  ), 
  // we can add an unlimited number of connections 
);

Тут «main» і «reserve» це просто імена сполук для програміста, вони ні на що не впливають.

Як варіант якщо не використовується реплікація SOLR на кілька серверів, але є необхідність у створенні резервного сервера, то можна дублювати інформацію з основного сервера на резервний простим rsync'ом директорій. Для цього досить додати у crontab правило:

*/5 * * * * root cd /opt/solr && rsync -ave ssh solr_backup_server:/opt/solr/example/

2 ) Створимо друпал-модуль який на хук крон перевірятиме з'єднання до SOLR -серверу і у випадку невдачі буде перемикати його на один з резервних серверів.

/** 
 * Implementation of hook_cron(). 
 */ 
function your_module_name _cron() { 
    $servers = variable_get('apachesolr_servers', NULL);
    if (!$servers || !module_exists('apachesolr')) { 
        return; 
    } 
     
    // check ApacheSolr server connection 
    foreach ($servers as $name => $server) { 
        $solr = apachesolr_get_solr($server['apachesolr_host'], $server['apachesolr_port'], $server['apachesolr_path']);
        $ping = @$solr->ping(variable_get('apachesolr_ping_timeout', 4)); 
        if ($ping) { 
            variable_set('apachesolr_host', $server['apachesolr_host']);
            variable_set('apachesolr_path', $server['apachesolr_path']);
            variable_set('apachesolr_port', $server['apachesolr_port']);
            break; 
        } 
        // also for example you can send letter to someone and inform that something is wrong
    } 
} 

У нашому випадку модуль Elysia Cron налаштований так що б ця перевірка здійснювалася кожні 3 хвилини.

Що в результаті?

Максимальний час відсутності пошуку на сайті в випадки падінні SOLR - сервера - всього кілька хвилин без будь-якого втручання програмістів і адміністраторів.

Голосів: 1 Рейтинг: 5

Також по темі

1

На серверах з nginx в якості фронтенду і Apache в якості бекенду часто можна побачити таку помилку. Зазвичай думають, що проблема в nginx і починають його пиляти....

2

Facebook Developer Blog опублікував хорошу новину: тепер можна отримати адресу та мобільний телефон користувача.

3

При розробці сайту з нерухомості, клієнт попросив імпортували в таксономію базу даних всіх міст світу. В результаті ми написали свій модуль, заточений під великі обсяги даних.

4

В блозі розглянемо дуже корисний модуль, який дозволяє вставляти FileField поля прямо в текстовий редактор.

5

Рано чи пізно кожен розробник наштовхується на ситуацією, коли сайт "падає" і його доводиться "піднімати. Причин цьому може бути безліч.

Subscribe to our blog updates