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

时间:2015-02-03 22:06:26

标签: php laravel redis

我尝试更新我的Laravel应用程序,以便Queue::push()将作业推送到redis队列群集。设置的人正在与我沟通,我们的应用程序需要配置主要主服务器和多个从服务器的连接详细信息。如果这是设置它的正确方法,我很难弄清楚如何配置它。

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

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

我一直在挖掘Laravel司机,试图找出如何配置Laravel中的主人和奴隶,并且无法弄明白。我怎样才能在这里添加奴隶?

或者这是错误的方向?

3 个答案:

答案 0 :(得分:5)

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

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

cooperaj/laravel-redis-sentinel

什么是Redis Sentinel?

Redis Sentinel是一个单独的服务,与Redis Cluster配合使用,可以监控具有自动故障转移功能的高可用群集的运行状况。

您如何使用它?

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

您的硬件是什么?

我们的整个运营/系统层都建立在Google Container Engine集群上。

为什么这很重要?

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

答案 1 :(得分:4)

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

答案 2 :(得分:0)

有了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
    ],
]