对于这个答案,我正在考虑 Laravel 5。
通过调试模型查询,我发现 Laravel 连接不支持单个主机,而是支持它们的列表。
[
'driver' => 'sqlsrv',
'host' => [
'192.168.1.2',
'192.168.1.3',
],
'database' => 'database_name',
'username' => 'username',
'password' => 'password',
'charset' => 'utf8',
'prefix' => '',
'prefix_indexes' => true,
'transaction_isolation' => PDO::SQLSRV_TXN_READ_UNCOMMITTED, // Not required, but worth mentioning it's possible to define it here too
'options' => [],
]
Laravel 连接解析背后的底层方法是Illuminate\Database\Connectors::createPdoResolverWithHosts,它具有以下行为:
protected function createPdoResolverWithHosts(array $config)
{
return function () use ($config) {
foreach (Arr::shuffle($hosts = $this->parseHosts($config)) as $key => $host) {
$config['host'] = $host;
try {
return $this->createConnector($config)->connect($config);
} catch (PDOException $e) {
continue;
}
}
throw $e;
};
}
这种行为意味着 Laravel 会随机选择一个连接的主机并尝试连接到它们。如果尝试失败,它会继续尝试,直到找不到更多主机。