在 Laravel 中配置高可用性 Redis 集群


Configuring highly available Redis cluster in Laravel

我正在尝试更新我的Laravel应用程序,以便Queue::push()将作业推送到redis队列集群。 设置它的人正在向我传达我们的应用程序需要配置主主机和几个从设备的连接详细信息。 如果这是设置它的正确方法,我正在努力弄清楚如何配置它。

开箱即用的 redis 配置看起来像...

'redis' => array(
    'cluster' => true,
    'default' => array(
            'host' => '127.0.0.1',
            'port' => 6379,
            'database' => 0,
        ),
    ),
);

我一直在挖掘 Laravel 驱动程序,试图弄清楚如何在 Laravel 中配置主站和从站,但一直无法弄清楚。 如何在此处添加从属?

还是这是错误的方向?

从 nrk/predis v1.1.0开始,内置了对 Redis Sentinel API 的支持。

您需要

对Laravel进行轻微的配置更改才能使用此功能。最简单的方法是使用 Laravel 的 redis 哨兵包之一。这些只是Laravel驱动程序的包装器,负责配置。我个人在大型项目中使用的一个:

Cooperaj/Laravel-Redis-Sentinel

什么是 Redis Sentinel?

Redis Sentinel 是一项单独的服务,可与 Redis 集群配合使用,通过自动故障转移监控其高可用性集群的运行状况。

你如何使用它?

我们在 Kubernetes 中运行整个应用程序,其中包括 Laravel 5.2 API 和从该 API 运行的 React/Node 网站。我们配置了一个与此类似的 Redis Sentinel 集群。我们还运行了一个与此类似的 Elasticsearch 集群。

您的硬件是什么?

我们的整个运营/系统层都建立在 Google 容器引擎集群之上。

为什么这很重要?

如果您依赖 Redis 进行 Laravel 缓存或队列,则如果 Redis 因任何原因失败,您的应用程序将失败。

Laravel 的 Redis 驱动程序仅支持分片的 Redis 集群。 如果您需要HA Redis系统,则需要使用Sentinels,这意味着您可以使用 https://github.com/Indatus/laravel-PSRedis

使用 Predis,您可以尝试如下:

<?php
# file: config/database.php
return [
    // (...)
    'redis' => [
        'client' => 'predis',
        'cluster' => true,
        'options' => [
            'replication' => true,
        ],
        'default' => [
            'scheme' => 'tcp',
            'host' => 'localhost',
            'password' => null,
            'port' => 6379,
            'alias' => 'master',
            'database' => 0,
        ],
        'slave-001' => [
            'scheme' => 'tcp',
            'host' => 'slave1host',
            'port' => 6379,
            'alias' => 'slave-001',
            'database' => 0,
        ],
        'slave-002' => [
            'scheme' => 'tcp',
            'host' => 'slave2host',
            'port' => 6379,
            'alias' => 'slave-002',
            'database' => 0,
        ],
        // add more slaves if needed
    ],
]