随着互联网运用的广泛遍及,海量数据的存储和访问成为了系统设计的瓶颈问题。对付一个大型的互联网运用,每天百万级乃至上亿的PV无疑对数据库造成了相称高的负载。对付系统的稳定性和扩展性造成了极大的问题。
为此,我们须要利用负载均衡、读写分离的办法,提升网站的系统性能和访问速率。
硬件设备配置:利用5台做事器,3台做负载,1台做数据备份,1台做应急处理做事器(内存:8G,硬盘容量:40G,CPU:4核)。

一,Laravel读写分离配置(Laravel自行下载安装):
Laravel 6 读写分离配置比较大略,只需修正 config/database.php完成对数据库的配置就完成了读写分离,下面以 MySQL 数据库为例,内容如下:
'mysql' => [ 'read' => [ 'host' => [ '192.168.72.100', '196.168.72.101', '196.168.72.102', ], ], 'write' => [ 'host' => [ '196.168.72.99', ], ], 'sticky' => true, 'driver' => 'mysql', 'database' => 'database', 'username' => 'root', 'password' => '', 'charset' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci', 'prefix' => '',],
设置完毕之后,Laravel6 默认将select 的语句让read 指定的数据库实行,insert/update/delete 则交给 write 指定的数据库,达到读写分离的浸染。
二,nginx负载均衡配置(Nginx自行下载安装):
1、内置负载策略
轮循(默认):Nginx根据要求次数,将每个要求均匀分配到每台做事器上。最少连接:将要求分配给连接数最少的做事器。Nginx会统计哪些做事器的连接数最少。IP Hash:绑定处理要求的做事器。第一次要求时,根据该客户真个IP算出一个HASH值,将要求分配到集群中的某一台做事器上。后面该客户真个所有要求,都将通过HASH算法,找到之前处理这台客户端要求的做事器,然后将要求交给它来处理。2、详细配置方法
upstream server1 { server 192.168.72.100:80 weight=3 max_fails=3 fail_timeout=15 max_conns=1000; server 192.168.72.101:80 weight=2 max_fails=3 fail_timeout=15; server 192.168.72.102:80 weight=1 max_fails=3 fail_timeout=15 ; server 192.168.72.103:80 backup; server 192.168.72.104:80 down;} server { listen 80; server_name www.xxx.com; #charset koi8-r; access_log logs/host.access.log main; location / { proxy_pass http://server1; index index.html index.htm index.php; }}
通过以上配置,便可以实现,在访问www.xxx.com这个网站时,由于配置了proxy_pass地址,所有要求都会先通过nginx反向代理做事器,在做事器将要求转发给目的主机时,读取upstream为server1的地址,读取分发策略,配置权重为3,以是nginx会将大部分要求发送给100做事器上,较少部分给102做事器来实现有条件的负载均衡。
backup 参数解释:1)、down:表示单前的server暂时不参与负载2)、weight:默认为1,weight越大,负载的权重就越大。3)、max_fails:许可要求失落败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的缺点4)、fail_timeout:max_fails 次失落败后,停息的韶光。5)、backup:其它所有的非backup机器down或者忙的时候,要求backup机器。以是这台机器压力会最轻。6)、max_conns:最大链接数,超过往后就不会发生要求过来。
通过以上配置完成了Laravel中的读写分离和Nginx的负载均衡,重点解释完全项目还须要配置MySQL的主从配置或者主主复制,实现读写分离后才能达到数据的同等性(请看mysql主从复制文章)。
更多内容请关注"大众年夜众号(Laravel技能社区)