У моей команды есть один проект, использующий Lumen (это микрофреймворк, основанный на Laravel). Мы используем Predis для подключения нашего кластера Redis и выполнения на нем некоторого задания очереди. Но иногда (мы не можем воспроизвести) система выдает исключение «Нет соединений в пуле для CLUSTER SLOTS
в ..».
[2017-08-17 14:05:35] bookmark.ALERT: Predis\ClientException: No connections
left in the pool for `CLUSTER SLOTS` in
....../vendor/predis/predis/src/Connection/Aggregate/RedisCluster.php:232
Stack trace:
#0 ....../vendor/predis/predis/src/Connection/Aggregate/RedisCluster.php(260):
Predis\Connection\Aggregate\RedisCluster->queryClusterNodeForSlotsMap(NULL)
#1 ....../vendor/predis/predis/src/Connection/Aggregate/RedisCluster.php(560):
Predis\Connection\Aggregate\RedisCluster->askSlotsMap()
...
Мы долго расследовали. Мы думаем, что проблема может быть в библиотеке Predis для Laravel и в том, как она поддерживает пул соединений. Это может быть связано с тем, что кластер Redis по какой-то причине закрывает соединение, но библиотека Predis не открывает соединение повторно при попытке установить соединение.
и вот наша структура настройки кластера:
'redis' => [
'client' => 'predis',
'clusters' => [
// Setting for Queue
'default' => [
'options' => [ 'cluster' => 'redis' ],
[
'host' => 'xxx',
'password' => 'xxx',
'port' => 'xxx',
'timeout' => 0.15,
'read_write_timeout' => 0.15
],
[
'host' => 'xxx',
'password' => 'xxx',
'port' => 'xxx',
'timeout' => 0.15,
'read_write_timeout' => 0.15
],
...
]
]
]
У кого-нибудь есть идеи по этому поводу? Большое спасибо!