[REDIS] Laravel + predis + 레디 스 클러스터 - 127.0.0.1:6379로 이동 / 연결 없음
REDISLaravel + predis + 레디 스 클러스터 - 127.0.0.1:6379로 이동 / 연결 없음
나는 세션 (predis 사용)에 사용되는 레디 스와 laravel (5.3) 응용 프로그램이 있습니다. 모든 것은 한 내가 (설정 / database.php에서 기본 접근법을 사용하여) 하나의 레디 스 노드를 사용하여 작동합니다. 최대한 빨리 시간의 50 %와 같은 이동 오류가 발생하기 시작하고 있지만 나는 레디 스 클러스터로 전환로 (어떻게 든되지 나는이 predis에 의해 관리되어야한다는 것을 이해 인터넷 검색을 기반으로하지만).
나는 true로 클러스터 매개 변수를 변경 시도,하지만 난 이상한 오류
No connection could be made because the target machine actively refused it. [tcp://127.0.0.1:6379]
내가 사용이 푸른에 배포 된 것을 클러스터 레디 스 (그리고 .env의 파일을 통해 구성) 및 단일 노드를 사용하는 경우 매개 변수는 아무 문제없이 사용할 수 있지만.
구성
여기에 내가 가지고 있다는 laravel 구성입니다 (언급 한 바와 같이 이전, 그것은 표준 기본입니다)
'redis' => [
'client' => 'predis',
'cluster' => false,
'default' => [
'host' => env('REDIS_HOST', 'localhost'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => 0,
],
],
레디 스를 들어, 나는 푸른 레디 스 캐시 클러스터 프리미엄 P1,이 개 파편이 사용 (여기에 설명 된대로).
업데이트 2
지금까지 나는 또한 설정의 다음과 같은 변화를 시도했다 :
모든 시간은 내가 이전 오류를 얻고있다 ...
내 레디 스 버전은 3.2이며, predis / predis 1.1.1 패키지
predis에 대한 설정 작업 1.1 이상
'redis' => [
'cluster' => true,
'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)],
],
],
큰 모든 도움을 주셔서 감사합니다 :)
해결법
-
==============================
1.레디 스 구성에서 여러 레디 스 인스턴스에 여러 연결을 설정할 수 있습니다. 클러스터 옵션은 이러한 여러 정의 연결을 처리하는 방법을 Laravel을 알려줍니다.
레디 스 구성에서 여러 레디 스 인스턴스에 여러 연결을 설정할 수 있습니다. 클러스터 옵션은 이러한 여러 정의 연결을 처리하는 방법을 Laravel을 알려줍니다.
클러스터가 false로 설정되어있는 경우, Laravel 각 연결에 대한 개별 \ Predis \ 클라이언트 인스턴스를 생성합니다. 각 연결은 개별적으로 액세스 할 수 있으며, 다른 연결에 어떤 관계가 없습니다.
클러스터가 true로 설정되어있는 경우, Laravel는 정의 된 모든 연결을 사용하여 집계 \ Predis \ 클라이언트 인스턴스를 생성합니다. 다른 구성으로, 이것은 "가짜"클러스터의 일종이다. 그것은 키 스페이스를 배포하는 클라이언트 측 샤딩을 사용하고 적절한 키로드 밸런싱을 보장하기 위해 외부 모니터링 및 유지 보수가 필요할 수 있습니다.
당신이로 실행중인 문제는, 그러나,이다 그 키 스페이스의 자동 샤딩을 처리 푸른 구현 (아마도) 실제 서버 측 레디 스 클러스터. 이 경우, 노드는 서로에 대해 알고 서로 이야기하고 아래로 이동하고있다. 이동 응답에서 온 ASK 곳이다.
Predis 라이브러리는 자동으로 이러한 응답을 처리 할 수 있지만, 당신이 그것을 말할 때만은 필요가있다. 이 경우, 당신은 클러스터링을 처리해야하는 Predis 클라이언트에게 필요하고 이것은 레디 스 구성에 대한 옵션 배열을 통해 Laravel하여 수행됩니다.
레디 스 설정에서 옵션 키는 연결 (즉, 기본값)이 아닌 아이의 형제해야한다. 또한, 옵션 키 => 값 쌍으로 지정한다.
그래서, 구성은 다음과 같은 모양입니다 :
'redis' => [ 'cluster' => true, 'default' => [ 'host' => env('REDIS_HOST', 'localhost'), 'password' => env('REDIS_PASSWORD', null), 'port' => env('REDIS_PORT', 6379), 'database' => 0, ], 'options' => [ 'cluster' => 'redis', ], ],
레디 스의 설정에 따라 클러스터 키를 여러 노드를 처리 할 수 집계 Predis \ 클라이언트 인스턴스를 생성 Laravel을 말할 것이다, 및 옵션 배열에서 클러스터 키는 핸들 서버 측 클러스터링이 아닌 클라이언트 측을 필요로하는 해당 인스턴스를 말할 것이다 클러스터링.
(인증 포함) 원래 연결 매개 변수는 이사를하고 -ASK 응답을 통해 발견 된 새로운 노드에 연결을 공유되지 않습니다. 그래서, 당신은 이전에 이사를 응답에서 가져온 오류는 이제 단지 NOAUTH 오류로 변환됩니다. 그러나 서버 측 '클러스터'구성은 새로 발견 된 노드와 함께 사용하기에 매개 변수의 목록을 정의하는 '매개 변수'형제 자매 수 있습니다. 새로운 노드와 함께 사용하기에 인증 매개 변수를 넣을 수있는 곳입니다.
나는이 같이 보일 것으로 예상 :
'redis' => [ 'cluster' => true, '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)], ], ],
공정 경고, 이것은 그냥 연구와 코드 다이빙에서받은 모든 정보입니다. 내가 Laravel와 레디 스를 사용하는 동안, 나는 서버 측 클러스터링을 (아직) 사용하지 않은,이 상태이므로 여전히 작동하지 않을 수 있습니다.
정보의 몇 가지 유용한 조각 나는이 보는 동안 가로 질러 온 :
Predis의 발행 레디 스 클러스터에 연결 토론 : https://github.com/nrk/predis/issues/259#issuecomment-117339028
레디 스 캐시에 클러스터링을 논의 MS 기사 : https://docs.microsoft.com/en-us/azure/redis-cache/cache-how-to-premium-clustering#how-do-i-connect-to-my-cache-when-clustering-is- 사용 가능
Predis \ 클라이언트 인스턴스를 생성 Laravel 코드 : https://github.com/laravel/framework/blob/v5.3.28/src/Illuminate/Redis/Database.php#L25-L66
-
==============================
2.AWS elasticcache 레디 스 클러스터를 들어 위의 구성은하지 작업,하지만 다음 날 위해 노력하고 있습니다 않았다. 또한 문서에 언급 된 : https://laravel.com/docs/5.4/redis#configuration
AWS elasticcache 레디 스 클러스터를 들어 위의 구성은하지 작업,하지만 다음 날 위해 노력하고 있습니다 않았다. 또한 문서에 언급 된 : https://laravel.com/docs/5.4/redis#configuration
'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, ], ], ], ],
-
==============================
3.관련 : Laravel + 레디 스 캐시 SSL을 통해?
관련 : Laravel + 레디 스 캐시 SSL을 통해?
어떤에 내가 여기에 대답했습니다 https://stackoverflow.com/a/48876398/663058
관련 자세한 사항은 아래 :
클러스터링 및 TLS가 있다면 당신은 (AWS Elasticache 테스트)는 다음과 같은 설정이 필요합니다 :
'redis' => [ 'client' => 'predis', 'cluster' => env('REDIS_CLUSTER', false), // Note! for single redis nodes, the default is defined here. // keeping it here for clusters will actually prevent the cluster config // from being used, it'll assume single node only. //'default' => [ // ... //], // #pro-tip, you can use the Cluster config even for single instances! 'clusters' => [ 'default' => [ [ 'scheme' => env('REDIS_SCHEME', 'tcp'), 'host' => env('REDIS_HOST', 'localhost'), 'password' => env('REDIS_PASSWORD', null), 'port' => env('REDIS_PORT', 6379), 'database' => env('REDIS_DATABASE', 0), ], ], 'options' => [ // Clustering specific options 'cluster' => 'redis', // This tells Redis Client lib to follow redirects (from cluster) ] ], 'options' => [ 'parameters' => [ // Parameters provide defaults for the Connection Factory 'password' => env('REDIS_PASSWORD', null), // Redirects need PW for the other nodes 'scheme' => env('REDIS_SCHEME', 'tcp'), // Redirects also must match scheme ], 'ssl' => ['verify_peer' => false], // Since we dont have TLS cert to verify ] ]
위의 설명 :
-
==============================
4.[https://laravel.com/docs/5.5/redis]를 참조하십시오.
[https://laravel.com/docs/5.5/redis]를 참조하십시오.
반드시 적절한 라이브러리가 있는지 확인
composer require predis/predis
에서 설정 / database.php뿐만 아니라 설정 / queue.php [당신의 큐는 reddis 클러스터 사용하는 경우]
'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, ], ], ], ]
-
==============================
5.이것은 나를 위해 일한 :
이것은 나를 위해 일한 :
'redis' => [ 'client' => 'predis', 'cluster' => true, 'options' => [ 'cluster' => 'redis', 'parameters' => [ 'host' => env('REDIS_DEFAULT_HOST', '127.0.01'), 'password' => env('REDIS_PASSWORD', null), 'port' => env('REDIS_DEFAULT_PORT', 6379), 'database' => 0, ], ], 'clusters' => [ 'default' => [ 'host' => env('REDIS_DEFAULT_HOST', '127.0.01'), 'password' => env('REDIS_PASSWORD', null), 'port' => env('REDIS_DEFAULT_PORT', 6379), 'database' => 0, ], 'jobs' => [ 'host' => env('REDIS_JOBS_HOST', '127.0.01'), 'password' => env('REDIS_PASSWORD', null), 'port' => env('REDIS_JOBS_PORT', 6379), 'database' => 0, ], 'content' => [ 'host' => env('REDIS_CONTENT_HOST', '127.0.01'), 'password' => env('REDIS_PASSWORD', null), 'port' => env('REDIS_CONTENT_PORT', 6379), 'database' => 0, ], 'options' => [ 'cluster' => 'redis' ], ] ]
내가 거기에 도착하는 방법을보고, 여기에 내 대답을 참조
from https://stackoverflow.com/questions/41091103/laravel-predis-redis-cluster-moved-no-connection-to-127-0-0-16379 by cc-by-sa and MIT license
'REDIS' 카테고리의 다른 글
[REDIS] StackExchange.Redis와 ServiceStack.Redis의 차이 (0) | 2020.01.02 |
---|---|
[REDIS] 레디 스와 실행 / 일정 지연? (0) | 2020.01.02 |
[REDIS] 설치 방법 및 ElasticBeanstalk에 레디 스를 구성합니다 (0) | 2020.01.02 |
[REDIS] 레디 스 연결은 어떻게 해제 레디 스 캐싱에 대한 런타임에 실패했을 경우 (0) | 2020.01.02 |
[REDIS] 어떻게 레디 스 키를 만료됩니까? (0) | 2020.01.02 |