evertramos/laravel-redis-sentinel

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

v0.1.2 2022-05-16 18:00 UTC

This package is not auto-updated.

Last update: 2024-09-27 23:37:19 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_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 不受支持,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许可证。有关更多信息,请参阅许可证文件