Nginx 高级篇(十一)集群搭建实战

我们在Nginx 高级篇(九)单机并发 1 万 10 万次请求解决和优化方案这篇文章当中已经讲过了Nginx的1万并发20万次请求的优化方案,因为Nginx始终是挡在最前面的一道防线,首先Nginx必须得抗揍才行!这也是集群化部署的第一步!
首先我们来看一下整个集群是如何部署的?

光Nginx强大是没用的,可能让用户只访问一个静态页面吧,动态数据还是php去处理,php去请求mysql,请求memcache等,所以今天我们来讲讲高并发下各个环节如何配置和优化?

memcache方向上:
我们在图上画了多台memcache服务器,Nginx 高级篇(六)第三方模块的安装以及一致性哈希算法的应用这篇文章当中讲过memcache集群的搭建必须要结合一致性哈希算法来搞定,自己去看吧!每台memcache服务器上我们可以尽可能的多开memcache的进程,进程多了处理起来当然也就快了!
我们是通过Nginx直接连接到memcache上去的,可以设置upstream组,配置memcache集群,再利用一致性哈希算法,完成Nginx直连Memcache的请求,当然你Memcache服务器越多,每台Memcache服务器进程开的越多,处理起来也就快喽!看我是咋搞的(一台机器上咔咔起了多个Memcache进程):
Nginx 高级篇(十一)集群搭建实战
当Nginx从Memcache当中拿不到数据的时候会去回调php脚本,那么在php的代码当中我们也是利用了一致性哈希算法,这个在前边博客当中也讲过的,在用php链接memcache的时候采用持久化链接,加上个true就完事,不会自己去百度吧,redis也一样,可以实现持久化链接!

PHP方向上:
我没那么多服务器 我是弄到了一台服务器里面 9000 和 9001端口 分别起了15个ph-fpm子进程
Nginx 高级篇(十一)集群搭建实战
如图所示来了php的请求之后会分发到9000和9001端口上边去 9000和9001的端口上的15+15=30个php-fpm子进程会对php请求进行处理!
php启动之后会有一个master主进程 管理着几个子进程 都监听着9000端口 来一个请求起一个php-fpm子进程去处理 不用了自己就消失了
对于高并发来说 php方向上没必要搞子进程回收 只需要弄几个php-fpm子进程在那等着就行 来活就去处理 不来活就等着 但是不消失
一个php起30个子进程 一个子进程大概占用内存20 30M左右 30个就接近1G的内存
9000 9001 9002分别起30个 那就是会占用3G的内存 大概哈!所以哈你的内存得跟上!
我们需要做的是什么?
a./usr/local/php/etc/php-fpm.conf当中加载了同目录下的php-fpm.d里面的www.conf
修改www.conf文件:
listen 监听的端口号是9000 前边的ip地址不要写127.0.0.1 而是要写真实的ip地址不然会报错
Nginx 高级篇(十一)集群搭建实战
另外pm生成子进程的形式为静态 固定的多少个
Nginx 高级篇(十一)集群搭建实战
另外设置静态生成的php-fpm子进程的个数
Nginx 高级篇(十一)集群搭建实战
b.拷贝/usr/local/php/etc/php-fpm.conf为/usr/local/php/etc/php-fpm9001.conf
在php-fpm9001.conf当中include另外的www9001.conf
Nginx 高级篇(十一)集群搭建实战
然后去/usr/local/php/etc/php-fpm.d/目录下去拷贝www.conf为www9001.conf
Nginx 高级篇(十一)集群搭建实战
另外pm生成子进程的形式为静态 固定的多少个
Nginx 高级篇(十一)集群搭建实战
另外设置静态生成的php-fpm子进程的个数
Nginx 高级篇(十一)集群搭建实战
然后杀死现有的所有的php进程:

pkill -9 php

然后启动php进程:

cd /usr/local/php
./sbin/php-fpm -y /usr/local/php/etc/php-fpm.conf
./sbin/php-fpm -y /usr/local/php/etc/php-fpm9001.conf

看,这么多php-fpm子进程在等待处理程序:
Nginx 高级篇(十一)集群搭建实战
这么搞的话 你的内存要足够大哈!别光php-fpm就吃光了你的内存!

mysql方向上:
对于 nginx + php-fpm 的情况,其实是保持了 php-fpm 子进程与mysql的长连接。 前端的http请求被分配给哪个 php-fpm子进程,该子进程就重用自己与mysql 的长连接。
也就是说php在操作mysql的时候最好保持长连接或者最好有数据库连接池,这样就避免了mysql的链接断开浪费服务器资源的情况发生,至于如何保持长连接或者使用mysql连接池请自行百度

本作品采用《CC 协议》,转载必须注明作者和本文链接

胡军

huxiaobai_001
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!