Laravel+Nginx轻松实现读写分离、负载均衡,网站并发能力提升N倍

2020年6月9日 315点热度 0人点赞 0条评论

图片

前言:

随着互联网应用的广泛普及,海量数据的存储和访问成为了系统设计的瓶颈问题。对于一个大型的互联网应用,每天百万级甚至上亿的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的主从配置或者主主复制,实现读写分离后才能达到数据的一致性。

来源:

https://www.toutiao.com/i6823906311860650500/

“IT大咖说”欢迎广大技术人员投稿,投稿邮箱:[email protected]


图片

来都来了,走啥走,留个言呗~

 IT大咖说  |  关于版权 

由“IT大咖说(ID:itdakashuo)”原创的文章,转载时请注明作者、出处及微信公众号。投稿、约稿、转载请加微信:ITDKS10(备注:投稿),茉莉小姐姐会及时与您联系!

感谢您对IT大咖说的热心支持!

相关推荐

推荐文章

16970Laravel+Nginx轻松实现读写分离、负载均衡,网站并发能力提升N倍

root

这个人很懒,什么都没留下

文章评论