在平时开发过程中,并发量上来以后,会出现单服务器负载过大的问题,简单说就是单点故障。为了避免这种问题,需要把数据库的数据进行分离,写数据库是写的服务器,读的操作使用单独的服务器,使用分布解决数据库瓶颈问题。
1.读写分离简介
数据库连接时,执行 SELECT 语句表示读操作。而 INSERT、UPDATE 和 DELETE 语句则由另一个数据库连接来执行,全部是写操作。
在 Laravel 框架中,无论你是使用原生 SQL 查询、查询构造器 或是 Eloquent ORM,都能轻松实现读写分离。
在文件config\database.php中配置:多服务器用户名和密码全部为同一个。
'mysql' => [
'read' => [
'host' => [
'192.168.100.101',
'196.168.100.102',
],
],
'write' => [
'host' => [
'196.168.100.103',
],
],
'sticky' => true,
'driver' => 'mysql',
'database' => '你的数据库',
'username' => '账号',
'password' => '密码',
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
]
read:表示配置读服务器的信息。
write:表示配置写服务器的信息。
sticky:设置生产true时,且在当前请求周期中执行过写操作,那么在这之后的所有读操作都将使用写连接。这样可以确保同一个请求周期中写入的数据库可以被立即读取到,从而避免主从同步延迟导致的数据不一致。
2.在文件config\database.php中配置:多服务器用户名和密码不一致的情况
'mysql' => [
'read' => [
[
'host' => '192.168.100.101',
'username' => '你的账号',
'password' => '你的密码',
],
[
'host' => '192.168.100.102',
'username' => '你的账号',
'password' => '你的密码',
],
],
'write' => [
[
'host' => '192.168.100.103',
'username' => '你的账号',
'password' => '你的密码',
],
],
'sticky' => true,
'driver' => 'mysql',
'database' => '你的数据库',
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
]
注意:多服务器数据库账号和密码不一致的情况,需要把每个数据库的账号和密码进行单独配置。
Laravel框架配置读写分离非常简单,但这个配置完全取决于数据库服务器的架构设计。下期我们将配置数据库的读写分离,也使用三台服务器进行配置,完成和本次Laravel数据库配置一致。
领取专属 10元无门槛券
私享最新 技术干货