用Laravel+Nginx实现读写分离,负载均衡,提升网站并发性能

Posted PHP自学中心

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用Laravel+Nginx实现读写分离,负载均衡,提升网站并发性能相关的知识,希望对你有一定的参考价值。




技术交流微信群

  
    
    
  
我们在学习中单枪匹马,还不如一次短短的交流,你可以在别人吸取各种学
习经验,学习方法以及学习技巧,所以,学习与交流少不了一个圈子,提升
你的学习技能,请点击加技术群:      

记得备注你会的一种PHP框架


视频教程分享

1 php实现页面静态化 
公众号里回复:08020021

2 揭秘PHP模糊查询技术
公众号里回复:08020017

3 mysql优化专题视频讲解
公众号里回复:优化

4 2020 Memcache入门到进阶视频教程(php版)
链接:http://www.mano100.cn/thread-1630-1-1.html

5 php+swoole+rabbitMQ实现异步任务多进程消费
链接:http://www.mano100.cn/thread-1629-1-1.html

6 nginx高性能高可靠性WEB服务器开发教程(完整版)
链接:http://www.mano100.cn/thread-1586-1-1.html
  
    
    
  
  
    
    
  


精选文章正文

随着网站的演变与日积月累的用户量,海量数据的存储和访问成为了系统设计的瓶颈问题。对于一个大型的应用系统来说,每天百万级甚至上亿的PV无疑对数据库造成了相当高的负载。从而对系统的稳定性和扩展性造成了极大的问题。


为此,我们可以使用负载均衡、读写分离的方式,提升网站的系统性能和访问速度。


下面给大家讲解的是基于laravel框架的,其实用哪个框架都是一样的。

硬件设备配置

使用5台服务器,3台做负载,1台做数据备份,1台做应急处理服务器(内存:8G,硬盘容量:40G,CPU:4核)


Laravel读写分离配置

用Laravel+Nginx实现读写分离,负载均衡,提升网站并发性能


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负载均衡配置

用Laravel+Nginx实现读写分离,负载均衡,提升网站并发性能


1、内置负载策略
  • 轮循(默认):Nginx根据请求次数,将每个请求均匀分配到每台服务器上。
  • 最少连接:将请求分配给连接数最少的服务器。Nginx会统计哪些服务器的连接数最少。
  • IP Hash:绑定处理请求的服务器。第一次请求时,根据该客户端的IP算出一个HASH值,将请求分配到集群中的某一台服务器上。后面该客户端的所有请求,都将通过HASH算法,找到之前处理这台客户端请求的服务器,然后将请求交给它来处理。

用Laravel+Nginx实现读写分离,负载均衡,提升网站并发性能

2、详细配置方法

用Laravel+Nginx实现读写分离,负载均衡,提升网站并发性能

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;
        }

}



用Laravel+Nginx实现读写分离,负载均衡,提升网站并发性能


通过以上配置,便可以实现,在访问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的主从配置或者主主复制,实现读写分离后才能达到数据的一致性。


以上是本文的全部内容,希望对大家的学习有帮助,也希望大家多多支持 php自学中心 ,学习与交流少不了一个圈子,点击加技术群:

以上是关于用Laravel+Nginx实现读写分离,负载均衡,提升网站并发性能的主要内容,如果未能解决你的问题,请参考以下文章

Nginx负载均衡+mysql主从复制读写分离+tomcat项目

HAproxy实现nginx+php负载均衡,后端数据库读写分离

nginx负载均衡,读写分离

Nginx 反向代理负载均衡页面缓存URL重写及读写分离具体解释

双机高可用负载均衡MySQL(读写分离主从自动切换)架构设计

Nginx 反向代理负载均衡页面缓存URL重写及读写分离详解