首页 > 解决方案 > 如果读取服务器没有响应,则所有请求都转到 laravel 中的主写入服务器

问题描述

我已经在 laravel 中设置了读/写数据库连接以进行数据库优化。我想知道,如果我们的读取服务器没有响应,那么所有请求都应该转到主数据库写入服务器。在 laravel 中可以吗?这是我的 database.php 配置文件

'mysql' => [
            'read' => [
                'host' => '192.168.1.1',
            ],
            'write' => [
                'host' => '192.168.1.2'
            ],
            'driver'    => 'mysql',
            'host'      => env('DB_HOST', 'localhost'),
            'database'  => env('DB_DATABASE', 'laravel'),
            'username'  => env('DB_USERNAME', 'root'),
            'password'  => env('DB_PASSWORD', 'root'),
            'charset'   => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix'    => '',
            'strict'    => false,
        ],

标签: mysqllaravel

解决方案


如果不扩展 Laravel 核心,我们就无法实现 AFAIK。基本上我认为这种问题应该通过基础设施配置来解决,而不是通过应用程序来解决。

例如,如果您使用 AWS Aurora,则可以使用reader(readonly) endpoint

如果您的集群的写入器端点是cluster1.cluster-xxxxx.us-east-1.rds.amazonaws.com,则读取器端点将具有后缀*-ro: cluster1.cluster-ro-xxxxx.us-east-1.rds.amazonaws.com

阅读器端点的行为完全符合您的要求。通常,负载通过循环调度来平衡。当阅读器崩溃时,它将自动从网络中排除。当作家崩溃时,其中一个读者会自动提升为作家。这是一个非常酷的功能。


推荐阅读