lvs 四层 dr 直接返回给用户
支持大并发 四层负载均衡 复杂 不能更改端口
lvs负载均衡 (大并发) NGINX 实现web动静分离 移动和pc分离
解决 WEB高并发html
mysql优化参数调整
打开MySQL配置文件my.cnf
1 back_log参数值:由默认的50修改成500.(每一个链接256kb,占用:125M)
back_log=500
值指出在MySQL暂时中止回答新请求以前的短期内多少个请求能够被存在堆栈中。也就是说,若是MySql的链接数据达到max_connections时,新来的请求将会被存在堆栈中,以等待某一链接释放资源,该堆栈的数量即back_log,若是等待链接的数量超过back_log,将不被授予链接资源。将会报:unauthenticated user | xxx.xxx.xxx.xxx | NULL | Connect | NULL | login | NULL 的待链接进程时.
back_log值不能超过TCP/IP链接的侦听队列的大小。若超过则无效,查看当前系统的TCP/IP链接的侦听队列的大小命令:cat /proc/sys/net/ipv4/tcp_max_syn_backlog目前系统为1024。对于Linux系统推荐设置为小于512的整数。node
修改系统内核参数,)
查看mysql 当前系统默认back_log值,命令:
show variables like 'back_log'; 查看当前数量
2 改wait_timeout参数值,由默认的8小时,修改成30分钟。(本次不用)
wait_timeout=1800(单位为妙)MySQL客户端的数据库链接闲置最大时间值
网站有大量的MySQL连接请求(每一个MySQL链接都是要内存资源开销的 ),因为你的程序的缘由有大量的链接请求空闲啥事也不干,白白占用内存资源,或者致使MySQL超过最大链接数历来没法新建链接致使“Too many connections”的错误
3修改max_connections参数值,由默认的151,修改成3000(750M)。
max_connections=3000
max_connections是指MySql的最大链接数,若是服务器的并发链接请求量比较大,建议调高此值,以增长并行链接数量,固然这创建在机器能支撑的状况下,由于若是链接数越多,介于MySql会为每一个链接提供链接缓冲区,就会开销越多的内存,因此要适当调整该值,不能盲目提升设值
4修改max_user_connections值,由默认的0,修改成800
max_user_connections=800 是指每一个数据库用户的最大链接
5修改thread_concurrency值,由目前默认的8,修改成64
thread_concurrency=64
thread_concurrency应设为CPU核数的2倍. 好比有一个双核的CPU, 那thread_concurrency 的应该为4; 2个双核的cpu, thread_concurrency的值应为8
6default-storage-engine(设置MySQL的默认存储引擎)
default-storage-engine= InnoDB(设置InnoDB类型(支持实物类型),另外还能够设置MyISAM(读多写少创建引擎)
二 全局缓存
动MySQL时就要分配而且老是存在的全局缓存。目前有:key_buffer_size(默认值:402653184,即384M)、innodb_buffer_pool_size(默认值:134217728即:128M)、innodb_additional_mem_pool_size(默认值:8388608即:8M)、innodb_log_buffer_size(默认值:8388608即:8M)、query_cache_size(默认值:33554432即:32M)等五个。总共:560M.
这些变量值均可以经过命令如:show variables like '变量名';查看到。
三 局部缓存
read_buffer_size(默认值:2097144即2M)
read_buffer_size=4M是MySql读入缓冲区大小。对表进行顺序扫描的请求将分配一个读入缓冲区,MySql会为它分配一段内存缓冲区。read_buffer_size变量控制这一mysql
缓冲区的大小。若是对表的顺序扫描请求很是频繁,而且你认为频繁扫描进行得太慢,能够经过增长该变量值以及内存缓冲区大小提升其性能.
sort_buffer_size,read_rnd_buffer_size,tmp_table_size 大小的内存空间. 不过它们只是在须要的时候才分配,而且在那些操做作完以后就释放了。有的是马上分配成单独的组块。tmp_table_size 可能高达MySQL所能分配给这个操做的最大内存空间
四 其余缓存
thread_cache_size (服务器线程缓存)
table_cache(默认值:512)linux
#######################################################
NGINX优化
1 worker_processes 1;通常调整到与CPU的颗数相同
2 优化绑定不一样的nginx进程到不一样的CPU上
3 nginx事件处理模型优化
4 调整nginx单个进程容许的客户端最大链接数
参数语法:worker_connections number
默认配置:worker_connections 512
放置位置:events 标签
events {
worker_connections 1024; #一个worker进程的并发
}
总并发= worker_processes* worker_connections
5 配置nginx worker进程最大打开文件数
参数语法:worker_rlimit_nofile number
放置位置:主标签段
说明:做用是改变worker processes能打开的最大文件数
worker_rlimit_nofile 65535;
这各参数受系统文件的最大打开数限制,解决方法:
[root@admin nginx]# cat /proc/sys/fs/file-max
8192
文件系统最大可打开文件数
[root@admin nginx]# ulimit -n
1024
程序限制只能打开1024个文件
使用# ulimit -n 8192调整一下
或者永久调整打开文件数 可在启动文件/etc/rc.d/rc.local末尾添加(在/etc/sysctl.conf末尾添加fs.file-max=xxx无效)
6 开启高效文件传输模式
设置参数 sendfile on;
sendfile参数用于开启文件的高效传输模式。同时将tcp_nopush和tcp_nodelay两个指令设置为on,可防止网络及磁盘i/o阻塞,提高nginx工做效率。
http {
sendfile on; #放在http,server,location均可以
7 FastCGI相关参数调优
fastcgi_connect_timeout 240;
fastcgi_send_timeout 240;
fastcgi_read_timeout 240;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;
#fastcgi_temp_path /data/ngx_fcgi_tmp;
fastcgi_cache_path /data/ngx_fcgi_cache levels=2:2 keys_zone=ngx_fcgi_cache:512m inactive=1d max_size=40g;
8 部署网站程序权限设置
目录:755
文件:644
全部者:root
cd /application/apache/html/
chown -R root.root blog
find ./blog/ -type f|xargs chmod 644
find ./blog/ -type d|xargs chmod 755
9. 控制Nginx并发链接数量
ngx_http_limit_conn_module这个模块用于限制每一个定义key值得链接数,特别是单个TP的链接数。
不是全部的链接数都会被计算。一个符合计数要求的链接是整个请求头已经被读取的链接。
控制Nginx并发链接数量参数的说明
1)limit_conn_zone参数:
语法:limit_conn_zone key zone=name:size;
上下文:http
用于设置共享内存区域,key能够是字符串、Nginx自带变量或前两个组合。name为内存区域的名称,size为内存区域的大小。nginx
2)limit_conn参数
语法:limit_conn zone number;
上下文:http、server、location
用于指定key设置最大链接数。当超时最大链接数时,服务器会返回503报错。web
10. 控制客户端请求Nginx的速率
ngx_http_limit_req_module模块用于限制每一个IP访问每一个定义key的请求速率。
limit_req_zone参数说明以下。
语法:limit_req_zone key zone=name:size rate=rate;
上下文:http
用于设置共享内存区域,key能够是字符串,Nginx自带变量或前两个组合。name为内存区域的名称,size为内存区域的大小,rate为速率,单位为r/s,每秒一个请求。
limit_req参数说明以下:
语法:limit_req zone=name [burst-number] [nobelay]
上下文:http、server、location
这里运用了令牌桶原理,burst=num,一个有num快令牌,令牌发完后,多出来的那些请求就会返回503。
nodelay默认在不超过burst值得前提下会排队等待处理,若是使用此参数,就会处理完num+1次请求,剩余的请求为超时,返回503。
###########################################################
修改Linux内核参数提升Nginx服务器在高的时候的性能
TCP TIME_WAIT套接字数量常常达到两、三万,服务器很容易被拖死。经过修改Linux内核参数,能够减小Nginx服务器的TIME_WAIT套接字数量sql
vi /etc/sysctl.conf
增长如下几行:
引用
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_syncookies = 1 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少许SYN攻击,默认为0,表示关闭;
net.ipv4.tcp_tw_reuse = 1 表示开启重用。容许将TIME-WAIT sockets从新用于新的TCP链接,默认为0,表示关闭;
net.ipv4.tcp_tw_recycle = 1 表示开启TCP链接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。
net.ipv4.tcp_fin_timeout = 30 表示若是套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。
net.ipv4.tcp_keepalive_time = 1200 表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改成20分钟。
net.ipv4.ip_local_port_range = 1024 65000 表示用于向外链接的端口范围。缺省状况下很小:32768到61000,改成1024到65000。
net.ipv4.tcp_max_syn_backlog = 8192 表示SYN队列的长度,默认为1024,加大队列长度为8192,能够容纳更多等待链接的网络链接数。
net.ipv4.tcp_max_tw_buckets = 5000 表示系统同时保持TIME_WAIT套接字的最大数量,若是超过这个数字,TIME_WAIT套接字将马上被清除并打印警告信息。默认为180000,改成5000。对于Apache、Nginx等服务器,上几行的参数能够很好地减小TIME_WAIT套接字数量,可是对于Squid,效果却不大。此项参数能够控制TIME_WAIT套接字的最大数量,避免Squid服务器被大量的TIME_WAIT套接字拖死。
更改linux内核参数后,当即生效的命令!
/sbin/sysctl -p
Nginx优化
使用FastCGI 缓存
fastcgi_cache TEST
开启FastCGI 缓存而且为其制定一个名称。我的感受开启缓存很是有用,能够有效下降CPU 负载,而且防止502 错误。
fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2
keys_zone=TEST:10m
inactive=5m;
这个指令为FastCGI 缓存指定一个路径,目录结构等级,关键字区域存储时间和非活动删除时间。 数据库