负载均衡学习笔记

1、背景:javascript

    公司有好几个项目,其中有App的相关项目,计划下个月开始推广app,担忧到时并发量大时,后台没法支撑;也为了让后台系统更稳定,以及在后台发布更新时不用刻意避开用户使用时间到半夜才能操做;所以开始着手搭建后台系统的负载均衡。css

    目前有两台可用的阿里云服务器,而且是在同一个机房的,简称A、B。A配置是CPU4核、内存4GB,B配置是CPU2核、内存2GB 都是好弱的服务器 -_- 。java

2、实现思路nginx

    在A、B两台服务器都跑同样的项目,而后在A机器上使用Nginx做负载,关键要解决的问题是session共享。服务器

 

3、Nginx 基本配置session

    worker_processes 和 worker_cpu_affinity,在nginx.conf 配置文件中配置这两个参数。并发

一、worker_processes:能够建立多少个进程,默认值为1 ,为了得到更好的性能,应该跟服务器的CPU总数或CPU核总数相同;app

查看A服务器核数:负载均衡

# 总核数 = 物理CPU个数 X 每颗物理CPU的核数
# 查看物理CPU个数
cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l

# 查看每一个物理CPU中core的个数(即核数)
cat /proc/cpuinfo| grep "cpu cores"| uniq

为4核,因此worker_processes 设置为 4 ;curl

二、worker_cpu_affinity :cpu上二进制位掩码,将work process绑定到特定cpu上,避免进程在cpu间切换的开销,通常如 worker_cpu_affinity 0001 0010 0100 1000 ; 

    Gzip压缩

nginx 支持传送数据的压缩,分为两个模块,1.gzip模块;2.gzip预压缩模块,可同时启用。

注意:压缩数据自己也是须要必定的消耗,须要考虑清楚压缩的等级、压缩什么文件类型等,应该避免去压缩那些压缩效果不好的文件,如图片、音乐、PDF等,同时对过小的文件进行压缩还不如直接传输更高效,有如下关键配置:

                gzip on;  #启用压缩

                gzip_static on;  #启用静态压缩 (须要编译时增长模块)

                gzip_min_length  1k; #压缩的最小长度,默认1024。尽可能大于1k。若是小于1k可能反而起不到压缩效果

                gzip_buffers     4 4k;#压缩缓冲区,默认为4k递增。注意这里的是 4  4k,不是44k;表示以原始数据4k为单位,4倍申请内存

                gzip_http_version 1.0; #识别http的协议版本(1.0/1.1)

                gzip_comp_level 2;#gzip压缩比,1压缩比最小处理速度最快,9压缩比最大但处理速度最慢(传输快但比较消耗cpu)

                gzip_types       text/plain application/x-javascript text/css application/xml;

 

修改参数后重启 nginx :

cd /usr/local/nginx/sbin
./nginx -s reload

若是出现

nginx: [emerg] unknown directive "gzip_static" in /usr/local/nginx/conf/nginx.conf

则目前nginx不支持gzip_static,能够去掉,也可从新编译支持 gzip_static on ,可参考:

http://blog.csdn.net/u013091013/article/details/51181995

查看效果 curl -I -H "Accept-Encoding: gzip,deflate" http://www.xxx.cn/xxx.js

查看Content-Length 以及Content-Encoding: gzip

相关文章
相关标签/搜索