Балансировка между процессами на разных серверах

Имеется 4 сервера, на каждом из серверов запущено по 4 php процесса (демона), которые рассылают смс нотификации. На данном этапе проблема заключается в том что скрипты работают только на том сервере которому на данный момент присвоен VIP. То есть вся нагрузка от процессов падает на 1 сервер. Как реализовать балансировщик так чтобы рассылка распределялась между всеми процессами на разных серверах, и в случае падения сервера,распределялась между оставшимися.

Привожу ниже кусок кода из скрипта демона

while (true)
{
    $params = array('limit' => $limitRecords);
    
    $requests = $request->getRequests($params);
    
    if (!$requests)
    {
        sleep(3);
    }
    else
    {
        $requestsTotal = count($requests);
        
        foreach ($requests as $req)
        {
            $cmdNewProcess = "/usr/bin/php " . __DIR__  . "/request_sender.php " . $req['phone_number'] . " " . $req['notification_text'];
            exec($cmdNewProcess . " > /dev/null &");
        }
        
        sleep($sleepInterval);
    }
}

Ответы (1 шт):

Автор решения: Daniel Protopopov

Можете использовать любую библиотеку или систему распределённой очереди, например beanstalkD. Запускаете сервер, затем рабочих, и назначаете задачи, которые будут отданы рабочим. Аналогично можно использовать GearmanServer с GearmanWorker

→ Ссылка