Я использую laravel 5.2 и имею архитектуру многосерверного автоматического масштабирования. Я хочу иметь сеанс и кэш в централизованном месте. Я хочу использовать AWS эластичную боль для того же.
Я настроил эластичный кластер Redis, имеющий следующие параметры:
Группа параметров: default.redis.3.2.cluster.on
Осколки: 3
Всего узлов: 9
В конфигурации сеанса laravel я установил redis в качестве драйвера сеанса.
В файле database.php, где установлена конфигурация redis, я использовал следующее:
REDIS_HOST = my_aws_elasticache_configuration_endpoint
REDIS_PASSWORD = нуль
REDIS_PORT = 6379
,
Когда я пытаюсь использовать его, я получаю следующую ошибку:
MOVED 13841 some_ip_address_of_aws: 6379
Я попытался использовать локальный Redis, и это сработало, поэтому predis работает правильно. Я пытался проверить решения в Интернете, но не смог найти решение. Я считаю, что конечная точка конфигурации пытается перенаправить соединение redis на доступный URL-адрес узла из 9 имеющихся у меня узлов. Тем не менее, я ожидал, что AWS должен делать это внутренне, а не создавать исключения. Может кто-нибудь мне помочь?
Наконец-то я получил ответ: нам нужно включить режим кластера в настройках базы данных и установить новый параметр кластера на 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)],
],
Других решений пока нет …