mysql - 如果读取服务器没有响应,则所有请求都转到 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,
],
解决方案
如果不扩展 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
。
阅读器端点的行为完全符合您的要求。通常,负载通过循环调度来平衡。当阅读器崩溃时,它将自动从网络中排除。当作家崩溃时,其中一个读者会自动提升为作家。这是一个非常酷的功能。
推荐阅读
- websphere - IBM移动优先,是否可以将多个java适配器的日志隔离在不同的文件中?
- jmeter - Jmeter java.net.SocketException:对等方重置连接:套接字写入错误
- excel - 将实时和历史股票数据检索到 Excel/VBA 的最新 (2020) 方法
- javascript - 在本机反应中有类似 onPressAndHold 的东西吗?
- c++ - 如何在 CLion 的链接库中放置断点?
- bash - 使用重定向在文件中写入变量的内容在 Bash 脚本的 for 循环中不起作用?
- c# - 以编程方式使用 Azure AD 的 Microsoft Stream SSO
- javascript - 如何在 jQuery 中使用 onclick 调用函数?
- c# - 使用 Azure AD 身份验证向 ASP.NET Core Web 应用程序 API 发送 GET 请求返回 401
- reactjs - React 调用 API 取决于 Props