优点如下:
配置文件非常简单,风格和程序一样通俗易懂。
成本低廉。Nginx为开源软件,可以免费使用。
支持Rewrite 重写规则:可以根据域名、URL的不同,将HTTP请求分配到不同的后端服务器群组上。
有内置的健康检查功能:即使后端某台Web服务器宕机,也不影响前端访问。
节省带宽:支持GZIP压缩,可以添加浏览器本地缓存的Header
稳定性高:用于反向代理,宕机的概率微乎其微。
缺点:
目前只支持HTTP和MAIL的负载均衡。
负载均衡算法:
1、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器宕机,则会跳过该服务器分配至下一个健康的服务器。并且它无须记录当前所有连接的状态,所以它是一种无状态调度。
2、weight 权重
在轮询的基础上加上权重,weight和访问率成正比,适用于后端服务器性能不一致的情况下。
3、ip_hash
每个请求按访问IP的哈希结果进行分配,当新的请求到达时,先将客户端IP通过hash算法进行计算得出一个值,随后的请求客户端IP的hash值只要相同,就会被分配到同一台后端服务器上,该调度算法可以解决Session的问题,但会因为分配不均导致无法保证负载均衡。
4、fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
5、url_hash(第三方)
按访问URL的hash结果来分配请求,使每个URL定向到同一个后端服务器,后端服务器作为缓存时比较有效。
6、Tengine增加的一致性哈希算法
将每个Server虚拟成N个节点,均匀分布到哈希环上,每次请求时,根据配置的参数计算出一个hash值,在hash环上查找离这个hash值最近的虚拟节点,对应的Server作为该次请求的后端服务器,好处在于动态增加服务器或者服务器宕机时对集群的影响最小。
具体的实现:
1、轮询rr:
upstream test {
server IP1:PORT;
server IP2:PORT;
.............
}
2、权重weight:
upstream test {
server IP1:PORT weight=A;
server IP2:PORT weight=B;
..............
}
3、ip_hash
upstream test {
ip_hash;
server IP1:PORT;
server IP2:PORT;
.............
}
4、fair//需要在编译安装时添加模块
upstream test {
server IP1:PORT;
server IP2:PORT;
.............
fair;
}
5、url_hash//需要在编译时添加模块
upstream test {
server IP1:PORT;
server IP2:PORT;
.............
hash $request_url;
}
Nginx的性能优势:
作为web服务器:Nginx处理静态文件、索引文件以及自动索引效率非常高。
作为代理服务器:Nginx可以实现快速高效的反向代理,提高网站性能。
作为负载均衡服务器:Nginx既可以在内部直接支持Rails和PHP,也可以支持HTTP代理服务器,对外进行服务。同时支持简单的容错和利用算法进行负载均衡。
在性能方面:Nginx是专门为性能优化而开发的,在实现上非常注重效率。它采用内核epoll模型,可以支持更多的并发连接,并在大并发时占用很低的内存资源。
在稳定性方面:Nginx采用了分阶段资源分配技术,使得对CPU与内存的占用率非常低。
在高可用方面:Nginx支持热部署,启动速度迅速,因此可以在不间断服务的情况下,对软件版本或者配置进行升级,即使运行数月也无需重新启动,几乎可以做到7x24不间断运行。
几个优化Nginx的措施:
一、编译安装过程的优化
1、减小Nginx编译后的文件大小
找到在源码目录下的auto/cc/gcc,删除#debug CFLAGS="$CFLAGS -g
2、在编译过程指定CPU类型
--with-cc-opt=‘03‘ --with-cpu-opt=cpu
cat /proc/cpuinfo |grep “module name”//获得CPU的信息
二、利用谷歌开源工具TCMalloc进行优化
1、下载并编译安装libunwind、gperftools
2、配置gperftools
echo "/usr/local/lib" > /etc/ld.so.conf.d/usr_local_lib.conf
/sbin/ldconfig
3、重新编译安装Nginx并添加
--with-google_perftools_module
4、添加gperftools线程目录
mkdir /tmp/tcmalloc
chmod 777 /tmp/tcmalloc -R
5、修改Nginx配置文件
在#pid logs/nginx.pid;这行的下面添加
google_perftools_profiles /tmp/tcmalloc;
6、重启Nginx
7、测试:
lsof -n | grep tcmalloc #测试tcmalloc
lsof -n | grep nginx #测试nginx
三、内核参数优化/etc/sysctl.conf内
/sbin/sysctl -p //生效
原文:http://blog.51cto.com/gdutcxh/2110708