Подключение к удаленному серверу REDIS в laravel

Я сделал претендента на Instagram, который должен иметь возможность обрабатывать видеоконверсии (FFMPEG) на другом сервере из-за проблем с процессором.

Оба моих сервера подключены к одной и той же базе данных.

В настоящее время у меня работает локальный сервер Redis, поэтому я могу переводить задачи в фоновый режим, используя конфигурацию Redis по умолчанию/конфигурацию очереди/базу данных.

Все это работает до сих пор, теперь я хочу перейти к следующему шагу и настроить мост для передачи интенсивных задач на выделенный сервер только для выполнения задач по обработке видео.




Подводя итог тому, что я хочу

1.Отправьте задание с SERVER1 и отправьте его в SERVER2 REDIS QUEUE для обработки.




Соединение SERVER1 (по умолчанию) (конфигурация/очередь) для Redis

'redis' => [
        'driver' => 'redis',
        'connection' => 'default',
        'queue' => env('REDIS_QUEUE', 'default'),
        'retry_after' => 90,
        'block_for' => null,
    ],

Очередь SERVER1 (по умолчанию) (конфигурация/база данных)

'default' => [
        'url' => env('REDIS_URL'),
        'host' => env('REDIS_HOST', '127.0.0.1'),
        'password' => env('REDIS_PASSWORD', null),
        'port' => env('REDIS_PORT', '6379'),
        'database' => env('REDIS_DB', '0'),
    ],

Что я пытался

Подключение к серверу 2

'videoProcessingRedis' => [
        'driver' => 'redis',
        'connection' => 'videoRedisQueue',
        'queue' => env('REDIS_QUEUE', 'default'),
        'retry_after' => 90,
        'block_for' => null,
    ],

Очередь СЕРВЕР 2

'videoRedisQueue' => [
        'url' => env('REDIS_URL'),
        'host' => env('REDIS_HOST', 'https://website.ca/'),
        'password' => env('REDIS_PASSWORD', null),
        'port' => env('REDIS_PORT', '6379'),
        'database' => env('REDIS_DB', '0'),
    ],

Вакансии/ConvertVideoForHLS

 public function __construct(video $video)
{
    $this->onConnection('videoProcessingRedis');
    $this->onQueue('videoRedisQueue');
    $this->video = $video;
}

С указанным выше набором попыток я не получаю никаких ошибок, однако я не могу просмотреть задание или даже увидеть, что оно было создано. даже используя очередь php artisan:listen и очередь php artisan:listen videoProcessingRedis, я ничего не вижу, ничего в таблице failed_jobs и ничего в мой supervisor.log, так что я предполагаю, что он как-то связан с тем, что он просто отскакивает от хоста?

Идея 1

Установите сервер Redis SERVER2 как общедоступный.

1. установите параметр привязки в файле /etc/redis/redis.conf

до

bind 127.0.0.1

после

bind 0.0.0.0
  1. после установки привязки (разрешение всего доступа) я бы добавил ограничение порта на 6379 только с IP-адресом SERVER1 для возможности подключения

Ограничения порта на 6379


person kuramura143    schedule 30.12.2020    source источник
comment
Есть ли у кого-нибудь советы о том, как еще это сделать? заранее спасибо   -  person kuramura143    schedule 30.12.2020


Ответы (1)


При работе с несколькими серверами в очереди Redis необходимо убедиться, что переменная APP_NAME обеих сред имеет одинаковое значение. Если они разные, то работник не увидит задания.

Чтобы проверить, работает ли ваше соединение, вы можете запустить redis-cli -h {ip-of-server-2} с сервера 1.

person user3763120    schedule 20.01.2021