Laravel 10结合phpredis使用Redis Sentinel实现高可用是否可行?
Redis Sentinel适配Laravel及Horizon的配置方案
方案可行性说明
Laravel(含8+版本)配合Redis Sentinel实现高完全可用可行,Laravel 9+版本已原生支持Redis Sentinel,无需第三方驱动;若使用Laravel 8,可借助第三方驱动实现,只要配置正确即可正常工作。
Laravel 8第三方驱动正确配置步骤
1. 安装驱动
执行Composer命令安装依赖:
composer require monospice/laravel-redis-sentinel-drivers
2. 修改config/database.php的Redis配置
替换原有Redis配置块为以下内容,注意结构和参数对应:
'redis' => [ 'client' => 'phpredis', // 默认Redis连接(适配应用缓存、普通队列) 'default' => [ 'driver' => 'sentinel', 'sentinels' => [ env('REDIS_SENTINEL_1', '127.0.0.1:26379'), env('REDIS_SENTINEL_2', '127.0.0.1:26380'), env('REDIS_SENTINEL_3', '127.0.0.1:26381'), ], 'options' => [ 'service' => env('REDIS_SENTINEL_SERVICE', 'mymaster'), 'parameters' => [ 'password' => env('REDIS_PASSWORD', null), // 这里填Redis主节点的密码,而非Sentinel的密码 'database' => env('REDIS_DB', 0), ], ], ], // Horizon专属连接(建议单独分配数据库) 'horizon' => [ 'driver' => 'sentinel', 'sentinels' => [ env('REDIS_SENTINEL_1', '127.0.0.1:26379'), env('REDIS_SENTINEL_2', '127.0.0.1:26380'), env('REDIS_SENTINEL_3', '127.0.0.1:26381'), ], 'options' => [ 'service' => env('REDIS_SENTINEL_SERVICE', 'mymaster'), 'parameters' => [ 'password' => env('REDIS_PASSWORD', null), 'database' => env('REDIS_HORIZON_DB', 1), ], ], ], ],
3. 配置.env参数
补充或修改环境变量:
REDIS_SENTINEL_1=你的Sentinel节点1地址:端口 REDIS_SENTINEL_2=你的Sentinel节点2地址:端口 REDIS_SENTINEL_3=你的Sentinel节点3地址:端口 REDIS_SENTINEL_SERVICE=mymaster // 和你的Redis Sentinel集群配置的服务名一致 REDIS_PASSWORD=Redis主节点密码 REDIS_DB=0 REDIS_HORIZON_DB=1
4. 适配Horizon
修改config/horizon.php,让Horizon使用我们配置的专属连接:
'use' => 'horizon',
Laravel 9+原生配置方案
若能升级到Laravel 9及以上版本,无需第三方驱动,直接用官方原生配置:
'redis' => [ 'client' => 'phpredis', 'default' => [ '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'), ], 'cache' => [ '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_CACHE_DB', '1'), ], 'options' => [ 'cluster' => env('REDIS_CLUSTER', 'redis'), 'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'), 'replication' => 'sentinel', 'service' => env('REDIS_SENTINEL_SERVICE', 'mymaster'), 'sentinels' => [ [ 'host' => env('REDIS_SENTINEL_1', '127.0.0.1'), 'port' => env('REDIS_SENTINEL_PORT', 26379), 'username' => env('REDIS_SENTINEL_USERNAME'), 'password' => env('REDIS_SENTINEL_PASSWORD'), ], [ 'host' => env('REDIS_SENTINEL_2', '127.0.0.1'), 'port' => env('REDIS_SENTINEL_PORT', 26379), 'username' => env('REDIS_SENTINEL_USERNAME'), 'password' => env('REDIS_SENTINEL_PASSWORD'), ], [ 'host' => env('REDIS_SENTINEL_3', '127.0.0.1'), 'port' => env('REDIS_SENTINEL_PORT', 26379), 'username' => env('REDIS_SENTINEL_USERNAME'), 'password' => env('REDIS_SENTINEL_PASSWORD'), ], ], ], ],
常见排查点
- 确认应用服务器能访问所有Sentinel节点,端口(默认26379)未被防火墙拦截
- 检查Sentinel集群配置的服务名(如
mymaster)和配置文件中的service参数完全一致 - 区分Sentinel自身的密码和Redis主节点的密码,不要混淆
- 执行
php artisan config:clear清除配置缓存,确保新配置生效 - 在
artisan tinker中执行Redis::connection()->ping()验证连接是否成功
内容的提问来源于stack exchange,提问作者Erikas
相关产品推荐
相关产品推荐

