namoShek/laravel-redis-sentinel

这是一个Laravel Redis驱动的扩展,它支持通过Redis Sentinel连接到Redis主节点。

v0.5.0 2024-04-11 17:26 UTC

This package is auto-updated.

Last update: 2024-09-11 18:17:47 UTC


README

Latest Version on Packagist Total Downloads Tests Quality Gate Status Maintainability Rating Reliability Rating Security Rating Vulnerabilities License

此包提供了一种Laravel Redis驱动,允许通过Redis Sentinel实例连接到Redis主节点。此包旨在在Kubernetes环境或类似环境中使用,在这些环境中,可以通过负载均衡器连接到Redis Sentinel。

此驱动是 monospice/laravel-redis-sentinel-drivers 的替代品。主要区别在于,此驱动支持 phpredis/phpredis PHP 扩展,并且由于架构更简单,配置也更为简单。具体来说,这意味着此包不会覆盖Laravel的整个Redis子系统,它只添加了一个额外的驱动。

默认情况下,Laravel支持 predisphpredis 驱动。此包添加了第三个 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 不受支持以及 hostport 被忽略之外,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)。更多信息请见许可证文件