namoShek / laravel-redis-sentinel
这是一个Laravel Redis驱动的扩展,它支持通过Redis Sentinel连接到Redis主节点。
Requires
- php: ^8.0
- ext-redis: *
- illuminate/contracts: ^8.0|^9.0|^10.0|^11.0
- illuminate/redis: ^8.0|^9.0|^10.0|^11.0
- illuminate/support: ^8.0|^9.0|^10.0|^11.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.0
- orchestra/testbench: ^6.0|^7.0|^8.0|^9.0
README
此包提供了一种Laravel Redis驱动,允许通过Redis Sentinel实例连接到Redis主节点。此包旨在在Kubernetes环境或类似环境中使用,在这些环境中,可以通过负载均衡器连接到Redis Sentinel。
此驱动是 monospice/laravel-redis-sentinel-drivers
的替代品。主要区别在于,此驱动支持 phpredis/phpredis
PHP 扩展,并且由于架构更简单,配置也更为简单。具体来说,这意味着此包不会覆盖Laravel的整个Redis子系统,它只添加了一个额外的驱动。
默认情况下,Laravel支持 predis
和 phpredis
驱动。此包添加了第三个 phpredis-sentinel
驱动,它是为Redis Sentinel扩展的 phpredis
驱动。目前还没有 predis
的扩展,也不需要,因为 predis/predis
已经支持通过一个或多个Sentinel连接到Redis。
安装
您可以通过composer安装此包
composer require namoshek/laravel-redis-sentinel
与包一起提供的服务提供程序会自动注册。
配置
此包不需要额外的配置,因此不提供额外的配置文件。
使用
要使用Redis Sentinel驱动,需要调整 config/database.php
中的 redis
部分
'redis' => [ 'client' => env('REDIS_CLIENT', 'phpredis-sentinel'), 'default' => [ 'sentinel_host' => env('REDIS_SENTINEL_HOST', '127.0.0.1'), 'sentinel_port' => env('REDIS_SENTINEL_PORT', 26379), 'sentinel_service' => env('REDIS_SENTINEL_SERVICE', 'mymaster'), 'sentinel_timeout' => env('REDIS_SENTINEL_TIMEOUT', 0), 'sentinel_persistent' => env('REDIS_SENTINEL_PERSISTENT'), 'sentinel_retry_interval' => env('REDIS_SENTINEL_RETRY_INTERVAL', 0), 'sentinel_read_timeout' => env('REDIS_SENTINEL_READ_TIMEOUT', 0), 'sentinel_username' => env('REDIS_SENTINEL_USERNAME'), 'sentinel_password' => env('REDIS_SENTINEL_PASSWORD'), 'password' => env('REDIS_PASSWORD'), 'database' => env('REDIS_DB', 0), ] ]
除了直接在配置文件中更改 redis.client
,您也可以在环境变量中设置 REDIS_CLIENT=phpredis-sentinel
。
如你所见,还有几个新的 sentinel_*
选项可用于每个Redis连接。它们中的大多数与正常Redis选项的工作方式非常相似,只是它们用于连接到Redis Sentinel。值得注意的是,sentinel_service
代表被监控的Redis主实例的实例名称。
除了 url
不受支持以及 host
和 port
被忽略之外,Redis Sentinel驱动程序的所有其他选项都是相同的。
它是如何工作的?
添加了一个额外的Laravel Redis驱动(phpredis-sentinel
),它将副本集群中当前声明的主实例解析为活动Redis实例。在内部,此驱动依赖于 phpredis/phpredis
的框架驱动程序,它仅封装了其中的连接部分,并在出现故障转移时添加了一些错误处理,强制重新连接。
请注意,此包不管理Sentinel之间的负载均衡(应在基础设施级别完成)以及不均衡读/写调用到副本/主节点。所有流量都发送到当前报告的主节点。
开发
要本地运行测试,需要启动一个Redis集群。仓库中包含一个脚本(感谢monospice/laravel-redis-sentinel-drivers
),通过运行sh start-redis-cluster.sh
可以启动一个集群。脚本要求您的机器上已安装Redis。在Ubuntu或Debian上安装Redis,可以使用sudo apt update && sudo apt install redis-server
。对于其他操作系统,请参阅redis.io。
许可证
MIT许可证(MIT)。更多信息请见许可证文件。