22 nginx配置与集群
一:编译nginx ,并配置
Cd /app/pcre-8.12
./configure
Make && make install
Cd nginx-1.2.7
./configure --prefix=/usr/local/nginx --add-module=/app/ngx_http_consistent_hash-master
注:红线部分是nginx的第3方模块,需要自己下载.
安装统计模块,便于观察nginx的状态
./configure --prefix=/usr/local/nginx/ --add-module=/app/ngx_http_consistent_hash-master --with-http_stub_status_module
Php 安装配置
1 tar -xzvf /path/’
2 cd /path/
3 .configure --prefix=/usr/local/php --
服务器集群与负载均衡搭建完毕
1:问题 C-->A 的mysql连接很慢
解决: my.cnf中的[mysqld]节点中,添加
skip-name-resolve // 这句话使mysql连接时忽略解析域名,在制定Mysql权限时,只能根据IP限制,不能根据域名限制.
2: 问题 当memcache中没有相应的数据,从后台回调数据时,
http的状态码是404,(虽然内容正常),这样不利于SEO
解决: nginx/conf/nginx.conf
error_page 404 =200 /callback.php; // 这样 404被改写成200来响应中
压力测试:
模拟 前0-10万是热数据,
10-20万是冷门数据
请求热数据 0-10,请求9次
请求准予数据 请求1次, -----100万次的请求.
优化思路:
nginx响应请求
1:建立socket连接
2: 打开文件,并沿socket返回.
排查问题,也要注意观察这两点,
主要从系统的dmesg ,和nginx的error.log来观察
优化过程
1:判断nginx的瓶颈
1.1: 首先把ab测试端的性能提高,使之能高并发的请求.
易出问题: too many open files
原因 : ab在压力测试时,打开的socket过多
解决: ulimit -n 30000 (重启失效)
观察结果: nginx 不需要特殊优化的情况下, 5000个连接,1秒内响应.
满足要求,但 wating状态的连接过多.
1.2: 解决waiting进程过多的问题.
解决办法: keepalive_timeout = 0;
即: 请求结果后,不保留tcp连接.
在高并发的情况下, keepalive会占据大量的socket连接.
结果: waiting状态的连接明显减少.
1.3: 解决服务端 too many open files
分析: nginx要响应,
1是要建立socket连接,
2 是要读本地文件
这两个者限制.
由上图可看出,nginx的问题容易出在2点上:
1: nginx接受的tcp连接多,能否建立起来?
2: nginx响应过程,要打开许多文件 ,能否打开?啊啊
第1个问题: 在内核层面(见下)
第2个问题 (见下)
系统内核层面:
net.core.somaxconn = 4096 允许等待中的监听
net.ipv4.tcp_tw_recycle = 1 tcp连接快速回收
net.ipv4.tcp_tw_reuse = 1 tcp连接重用
net.ipv4.tcp_syncookies = 0 不抵御洪水攻击
ulimit -n 30000
Nginx层面:
解决: nginx.conf 下面: work_connection 加大
worker_connections 10240;
Worker_rlimit_nofiles 10000;
Keepalive_timeout 0;
Nginx---->php-fpm之间的优化
如上图,在很多个nginx来访问fpm时, fpm的进程要是不够用, 会生成子进程.
生成子进程需要内核来调度,比较耗时,
如果网站并发比较大,
我们可以用静态方式一次性生成若干子进程,保持在内存中.
方法 -- 修改php-fpm.conf
Pm = static 让fpm进程始终保持,不要动态生成
Pm.max_children= 32 始终保持的子进程数量
Php-mysql的优化
Linux机器下 ,php 通过IP连接其他mysql服务器时,容易出的问题
能ping能,但connect不到.
一般是由:mysql服务器的防火墙影响的.
并发1万连接,响应时间过长.
优化思路: 同上的nginx
1: 内核层面,加大连接数,并加快tcp回收
2: mysql层面,增大连接数
3: php层面,用长连接,节省连接数
4: 用memcached缓存,减轻mysql负担
具体:
1.1 , PHP服务器增大 ulimint -n选项
1.2 mysql服务器内核配置
添加或修改如下选项
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_syncookies = 0
# syscttl -p 使修改立即生效
2.1 修改mysql.cnf
Vi /etc/my.conf
# service mysqld restart 重启mysql
3.1 PHP层面 ,用长连接
Mysql_connect ---> mysql_pconnect
注: pconnect 在PHP以apache模块的形式存在时,无效果.
Nginx+phjp+mysql+nginx
在引入memcached后,性能提升不明显,甚至还略有下降
memcached使50%的请求变快了,但是一部分,反倒慢了.
原因在于--PHP->memcached也要建立tcp连接,代价挺高,
但缓存了数据之后,就省去了mysql的查询时间.
总结: memcached适合存复杂的sql,尤其是连接查询/模糊查询的sql结果
Memcached服务器的优化(集中在内核的ipv4设置上,不再重复)
22 nginx配置与集群的更多相关文章
- nginx配置tomcat集群
显示nginx的核心配置 #user nobody;worker_processes 1; events { worker_connections 1024; #并发连接数} http { in ...
- windows下使用nginx配置tomcat集群
转自:https://blog.csdn.net/csdn15698845876/article/details/80658599
- 配置集群Nginx+Memcached+Tomcat集群配置
上班之余抽点时间出来写写博文,希望对新接触的朋友有帮助.今天在这里和大家一起学习一下配置集群 1. Nginx Nginx是通过将多个Web Server绑定到同一个IP地址下,以实现多个WebS ...
- Nginx+Tomcat+MemCached 集群配置手册
系统实施文档 Nginx+Tomcat+MemCached 集群配置手册 目 录 第1章 概述 1.1 目标 互联网的快速发展带来了互联网系统的高负载和高可用性, 这要求我们在设计系统架 ...
- Nginx+Memcached+Tomcat集群配置实践(Sticky Session)
准备工作 创建一个简单的web应用,名为session.其中有两个页面,分别如下所示: 页面login.jsp <%@ page language="java" conten ...
- 注意这几点,轻轻松松配置 Nginx + Tomcat 的集群和负载均衡
Tomcat 集群是当单台服务器达到性能瓶颈,通过横向扩展的方式提高整体系统性能的有效手段.Nginx 是一个高性能的 HTTP 和反向代理 web 服务器,可以通过简单的配置实现 Tomcat 集群 ...
- Nginx+Memcached+Tomcat集群配置(MSM--win7 64bit)
本次主要是在win7 64 上演示操作. web应用构建 Memcached安装配置启动 Tomcat配置 所需jar包 memcached-session-manager 序列化 contextxm ...
- Nginx(四):Keepalived+Nginx 高可用集群
Keepalived+Nginx 高可用集群 (主从模式) 集群架构图 安装keepalived [root@localhost ~]# yum install -y keepalived 查看状态 ...
- nginx反向代理+集群
1.前期准备: client:192.168.4.1 eth0 proxy:192.168.4.5 eth0 web1:192.168.4.100 eth0 内容2 web2:192.168.4.20 ...
随机推荐
- hdu 1848 Fibonacci again and again 组合游戏 SG函数
题目链接 题意 三堆石子,分别为\(m,n,p\)个,两人依次取石子,每次只能在一堆当中取,并且取的个数只能是斐波那契数.最后没石子可取的人为负.问先手会赢还是会输? 思路 直接按定义计算\(SG\) ...
- LeetCode OJ--Word Break II ***@
https://oj.leetcode.com/problems/word-break-ii/ class Solution { public: unordered_set<string> ...
- entity framework6 edmx文件详解
entity framework中的edmx文件作为代码与数据库沟通的桥梁,作用是至关重要的.如果edmx文件出了问题,ef就基本上没得用了.虽然edmx文件是由ef自动生成的,但是一些特定的操作可能 ...
- 使用企业微信的API给指定用户发送消息
上个月比较忙,等不忙了继续写点基础教程(五一还在高铁上写项目在).因为公司的原因,自己学习了点JavaWeb的知识,重新写了一个简单的后台管理,用于记录用户注册信息的.其中有这样的一个要求,就是在用户 ...
- codevs——2853 方格游戏(棋盘DP)
时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description 菜菜看到了一个游戏,叫做方格游戏~ 游戏规则是这样的: 在一个n*n的 ...
- Ansible进阶之企业级应用
1.环境 cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 ...
- 某考试 T2 Seg
Seg [问题描述]数轴上有n条线段,第i条线段的左端点是a[i],右端点是b[i].Bob发现1~2n共2n个整数点,每个点都是某条线段的端点.这些线段有如下两类特点:1 x y,表示第x条线段和第 ...
- 手机端用来上传用户头像的代码canvas
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- Android属性动画:动画流控制
今天的文章里,我将会和大家讨论对动画流的控制.我们可以通过Animator系列的API来控制动画的开始.停止和取消.在 KitKat也就是API level 19中,我们还可以控制动画的暂停和恢复.在 ...
- EasyMvc入门教程-高级控件说明(19)表单控件
我们开发的系统,主要的一个功能就是采集界面数据,传回到服务器,比如:录入学生信息,这时候就需要表单. EasyMvc提供了如下界面控件,如下图所示:(控件+布局) EasyMvc实现了基于模型的绑定, ...