Elasticache PHP Redis AWS перемещенное исключение в Laravel

Я использую laravel 5.2 и имею архитектуру автомасштабирования на нескольких серверах. Я хочу иметь сеанс и кеш в централизованном месте. Я хочу использовать для этого же AWS elasticache.

Я установил кластер Redis с эластичной памятью, имеющий следующие параметры:

Группа параметров: default.redis.3.2.cluster.on Шарды: 3 Всего узлов: 9

В конфигурации сеанса laravel я установил redis в качестве драйвера сеанса.

В database.php, где установлена ​​конфигурация redis, я использовал следующее:

REDIS_HOST = my_aws_elasticache_configuration_endpoint REDIS_PASSWORD = null REDIS_PORT = 6379.

Когда я пытаюсь его использовать, я получаю следующую ошибку:

ПЕРЕМЕЩЕНА 13841 some_ip_address_of_aws: 6379

Я пробовал использовать локальный Redis, и это сработало, поэтому predis работает правильно. Я попытался проверить решения в Интернете, но не смог найти решение. Я считаю, что конечная точка конфигурации пытается перенаправить соединение redis на доступный URL-адрес узла из 9 узлов, которые у меня есть. Однако я ожидал, что AWS будет делать это внутренне, а не генерировать исключение. Может кто-нибудь помочь мне?


person Mihir Bhende    schedule 22.09.2017    source источник


Ответы (1)


Наконец-то я получил ответ, нам нужно включить режим кластера в настройках базы данных и установить новую опцию кластера на redis. Вот как выглядит конфигурация redis в database.php:

'redis' => [
    'client' => 'predis',
    'options' => [
        'cluster' => 'redis',
    ],
    'clusters' => [
        'default' => [
            [
                'host' => env('REDIS_HOST', 'localhost'),
                'password' => env('REDIS_PASSWORD', null),
                'port' => env('REDIS_PORT', 6379),
                'database' => 0,
            ],
        ],
    ],
],

Если у вас есть пароль, вы можете заменить массив параметров следующим образом:

 'options' => [
        'cluster' => 'redis',
        'parameters' => ['password' => env('REDIS_PASSWORD', null)],
    ],
person Mihir Bhende    schedule 22.09.2017
comment
Слово мудрым: если вы включите TLS (шифрование при передаче) для Redis, вам также потребуется 'scheme' => env('REDIS_SCHEME', 'tcp') в массиве parameters. Установите в .env. Если вы используете AWS Elasticache, вам также понадобится 'ssl' => ['verify_peer' => false] в массиве options. - person CenterOrbit; 19.03.2018