evertramos / laravel-redis-sentinel
Laravel Redis 驱动的扩展,支持通过 Redis Sentinel 连接到 Redis 主节点。
Requires
- php: ^8.0
- ext-redis: *
- illuminate/contracts: ^8.0|^9.0
- illuminate/redis: ^8.0|^9.0
- illuminate/support: ^8.0|^9.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.0
- orchestra/testbench: ^6.0|^7.0
This package is not auto-updated.
Last update: 2024-09-27 23:37:19 UTC
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_password' => env('REDIS_SENTINEL_PASSWORD'), 'password' => env('REDIS_PASSWORD'), 'database' => env('REDIS_DB', 0), ] ]
您也可以通过设置环境变量 REDIS_CLIENT=phpredis-sentinel
来替代直接在配置文件中更改 redis.client
。
如您所见,每个 Redis 连接都提供了一些新的 sentinel_*
选项。它们中的大多数与正常 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许可证。有关更多信息,请参阅许可证文件。