I have the error "No connections available in the pool" under laravel 7, php7.4 and redis server on AWZ elasticache.
Here my .env :
REDIS_CLIENT=predis
REDIS_SCHEME=tls
REDIS_HOST=clustercfg.xxx.xxx.xxx.cache.amazonaws.com
REDIS_PASSWORD=xxx
REDIS_PORT=6379
my config/database.php :
'redis' => [
'cluster' => true,
'client' => 'predis',
'options' => [
'cluster' => 'redis',
'parameters' => [
'scheme' => env('REDIS_SCHEME', 'tcp'),
'host' => env('REDIS_HOST', 'localhost'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => 0,
'timeout' => 15,
],
],
'clusters' => [
'default' => [
[
'scheme' => env('REDIS_SCHEME', 'tcp'),
'host' => env('REDIS_HOST', 'localhost'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => 0,
'timeout' => 15,
]
],
'cache' => [
[
'scheme' => env('REDIS_SCHEME', 'tcp'),
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => env('REDIS_CACHE_DB', 1),
]
],
],
],
clustercfg.xxx.xxx.xxx.cache.amazonaws.com is my configuration endpoint and REDIS_PASSWORD my AUTH token
I have basically copied the solution of Predis with laravel 5.5 "No connections available in the pool in Aggregate/RedisCluster.php:337 "
but problem is not resolved.
I have looked at the vpc security group in amazon and basically all ports are opened :
Related
I have redis cluster config, in laravel 5.8, with one node and two shards.
I need to add prefix for session and cache, but now I have all keys without prefix.
Tis is my laravel database config:
'redis' => [
'client' => 'predis',//I also tried phpredis, same problem
'cluster' => env('REDIS_CLUSTER_ENABLED', true),
'clusters' => [
'default' => [
[
'host' => 'node-endpoint-1',
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => env('REDIS_DATABASE', 0),
'options' => [
'prefix' => 'help_session:',
]
],
[
'host' => 'node-endpoint-2',
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => env('REDIS_DATABASE', 0),
'options' => [
'prefix' => 'help_session:',
]
],
],
'cache' => [
[
'host' => 'node-endpoint-1',
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => env('REDIS_DATABASE', 0),
'options' => [
'prefix' => 'cache:',
]
],
[
'host' => 'node-endpoint-2',
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => env('REDIS_DATABASE', 0),
'options' => [
'prefix' => 'cache:',
]
]
],
],
'options' => [
'cluster' => env('REDIS_CLUSTER', 'redis'),
],
],
I cannot find a different configuration. Is it possible?
Thank you
I want to connect redis cluster from Laravel but I am getting No connections available in the pool. My databaase.php looks like
'redis' => [
'client' => env('REDIS_CLIENT', 'predis'),
'clusters' => [
'default' =>
[
[
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', '6379'),
'database' => env('REDIS_DB', '0'),
]],
'options' => [
'cluster' => 'redis', // This tells Redis Client lib to follow redirects (from cluster)
]
],
]
But with this settings, I am getting No connections available in the pool. But if I just connect redis cluster using cli, I can successfully connect. So I believe there is something wrong with my laravel configuration that I am still unable to solve. Any help?
Solution
Hi guys, it was a configuration issue. I was using wrong port. The default port is 6379 and I was mistakenly using another port number.
Moving the options to the parent array should solve your problem.
'redis' => [
'client' => env('REDIS_CLIENT', 'predis'),
'options' => [
'cluster' => 'redis'
]
'clusters' => [
'default' => [
[
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', '6379'),
'database' => env('REDIS_DB', '0'),
]
]
]
]
What about adding scheme and moving options ?
'redis' => [
'client' => env('REDIS_CLIENT', 'predis'),
'options' => [
'cluster' => 'redis'
],
'clusters' => [
'default' => [
[
'scheme' => env('REDIS_SCHEME', 'tcp'),
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', '6379'),
'database' => env('REDIS_DB', '0'),
]
]
]
]
I set the session driver to redis, but I don't get session data from Redis Facade.
This is config/session.php
'driver' => env('SESSION_DRIVER', 'file'),
'connection' => env('SESSION_CONNECTION'),
This is .env
SESSION_DRIVER=redis
SESSION_CONNECTION="session-connection"
This is config/database.php
'redis' => [
'session-connection' => [
'url' => env('REDIS_URL'),
'host' => env('REDIS_HOST', '127.0.0.1'),
'username' => env('REDIS_USERNAME'),
'password' => env('REDIS_PASSWORD'),
'port' => env('REDIS_PORT', '6379'),
'database' => env('REDIS_DB', '0'),
'prefix' => 'session:',
],
],
These are codes which run in the php artisan tinker:
>>> session(['key'=>'value']);
=> null
>>> session('key');
=> "value"
>>> use Illuminate\Support\Facades\Redis;
>>> Redis::connection('session-connection')->get('key')
=> null
>>> Redis::connection('session-connection')->keys('*')
=> []
But Redis Facade can get Cache data, and I don't know why session cannot.
These are settings related to the cache.
This is config/cache.php
'default' => env('CACHE_DRIVER', 'file'),
'stores' => [
'redis' => [
'driver' => 'redis',
'connection' => 'cache-connection',
'lock_connection' => 'cache-lock',
],
],
//'prefix' => env('CACHE_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_cache_'),
This is .env
CACHE_DRIVER=redis
This is config/database.php
'redis' => [
'cache-connection' => [
'url' => env('REDIS_URL'),
'host' => env('REDIS_HOST', '127.0.0.1'),
'username' => env('REDIS_USERNAME'),
'password' => env('REDIS_PASSWORD'),
'port' => env('REDIS_PORT', '6379'),
'database' => env('REDIS_DB', '0'),
'prefix' => 'cache:',
],
'cache-lock' => [
'url' => env('REDIS_URL'),
'host' => env('REDIS_HOST', '127.0.0.1'),
'username' => env('REDIS_USERNAME'),
'password' => env('REDIS_PASSWORD'),
'port' => env('REDIS_PORT', '6379'),
'database' => '1',
'prefix' => 'cache-lock:',
],
],
These are codes which run in the php artisan tinker:
>>> Cache::set('cachekey',1);
=> true
>>> Cache::get('cachekey');
=> "1"
>>> use Illuminate\Support\Facades\Redis;
>>> Redis::connection('cache-connection')->get('cachekey')
=> "1"
>>> Redis::connection('cache-connection')->keys('*')
=> [
"cache:cachekey",
]
Any ideas? Thank you!
Setup Laravel 8.x cache with AWS Elasticache Redis cluster:
i have tried many configure that i found. but none of them work.
i tried connecting Elasticache Redis cluster from redis-cli, it works with Ping pong.
But not working with laravel: (Error: No connections available in the pool)
And this is my config:
'redis' => [
'cluster' => true,
'client' => env('REDIS_CLIENT', 'predis'),
'options' => [
'cluster' => env('REDIS_CLUSTER', 'redis'),
'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_') . '_database_'),
// 'ssl' => ['verify_peer' => false], => have tried, it not working
/*
'parameters' => [ => have tried, it not working
'scheme' => env('REDIS_SCHEME', 'tcp'),
'host' => env('REDIS_HOST', 'localhost'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => 0,
'timeout' => 15,
],
*/
],
'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_CACHE_DB', 0),
'read_write_timeout' => 30,
],
],
'cache' => [
[
'scheme' => env('REDIS_SCHEME', 'tcp'),
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => env('REDIS_CACHE_DB', 1),
]
],
'options' =>[
'cluster' =>'redis',
]
],
],
I have tried connecting Elasticache with Redis cli in Ec2, and it can connect:
And this is Elasticache Redis information:
This is my .env:
CACHE_DRIVER=redis
REDIS_HOST=xxxxx.xxxxx.clustercfg.xxxxx.cache.amazonaws.com
REDIS_PASSWORD=null
REDIS_PORT=6379
By the way, i connect with Configuration Endpoint (not Primary Endpoint)
and i have install "predis/predis" in composer.json.
I changed a lot of configurations that I found on the Google, but it doesn't work. Please help!!
Thanks for reading.
Solution:
Changed with using **phpredis ** it works:
Install php-redis in server:
sudo yum -y install php-redis
sudo systemctl restart php-fpm.service
Change config:
'redis' => [
'client' => env('REDIS_CLIENT', 'phpredis'),
....
]
Not sure why it doesn't work with predis. Even though the configuration is the same.
What does the 'queue' => 'default' setting do at config/queue.php?
It seems like it does not affect anything.
In config/queue.php my queue configuration is ga-fetcher-queue.
This is my config:
return [
'default' => 'redis',
'connections' => [
'redis' => [
'driver' => 'redis',
'connection' => 'default',
'queue' => 'ga-fetcher-queue',
'retry_after' => 360,
],
],
'failed' => []
];
My redis config at config/database.php is this:
'redis' => [
'client' => 'predis',
'default' => [
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => 0,
],
]