zhangli-s 发表于 2016-12-26 12:06:27

nginx 负载均衡与location应用分析 简单实验

参考:软件级负载均衡器(LVS/HAProxy/Nginx)的特点和对比



  文章重点记录nginx负载均衡。
  为了实验,我习惯性的先上拓扑图,如下:

  我们的案例需求如下,前端nginx做负载均衡,并处理静态页面,使用location查询过滤将动态页面交由后端apache服务器集群做处理。并由nginx回显内容输出。
  nginx负载均衡服务器安装配置:


[*]#rpm-qa|greppcre
[*]pcre-devel-6.6-2.el5_1.7
[*]pcre-6.6-2.el5_1.7
[*]
[*]#pcre的作用是为nginx提供兼容perl的正则表达式,使nginx支持HTTP Rewrite模块.
[*]
[*]#wgethttp://nginx.org/download/nginx-0.8.53.tar.gz
[*]
#./configure--with-http_stub_status_module
[*]#make&&makeinstall
[*]# --with-http_stub_status_module 可以用来启用nginx的nginxStatus功能,以监控
[*]nginx当前状态。
[*]


  在继续配置之前,需要先了解我们要做什么。我只想做个基本的实验来看下nginx的负载均衡是如何工作的,所以我的实验设计是这样的。
  当我们访问192.168.182.131/index.html 时,由于是静态页面,交给nginx本身处理,如果我们访问192.168.182.131/test.php时,配置location匹配 .php 后缀,并交由后端apache集群来处理,至于集群会以什么样的方式来处理,后面用到时再说。


[*]#pwd
[*]/usr/local/nginx/conf
[*]#vimnginx.conf
[*]
[*]usernobody;
[*]worker_processes1;
[*]#指定nginx要开启的进程数,建议一个CPU的内核就处理一个进程,所以如果是4核CPU,就指定4个进程数。
[*]
[*]events{
[*]useepoll;
[*]worker_connections1024;
[*]}
[*]#useepoll是指nginx的工作模式,epoll是比较高效的工作模式,对于#linux/unix平台,
[*]
epoll是首选模式。#worker_connections是一个进程的最大连接数。由此即可算出最大的客
[*]
户端数量:max_client=worker_processes*worker_connections;
[*]
[*]http{
[*]server{
[*]listen80;
[*]server_name192.168.182.131;
[*]indexindex.html;
[*]root/usr/local/nginx/html;
[*]charsetgb2312;
[*]upstreamMyServer{
[*]ip_hash;
[*]server192.168.182.132:80;
[*]server192.168.182.133:80;
[*]}
[*]location~*.*.php${
[*]proxy_passhttp://MyServer;
[*]}
[*]}
[*]}

  负载均衡的配置是这里:


[*]
upstreamMyServer{
[*]
ip_hash;
[*]
server192.168.182.132:80;
[*]
server192.168.182.133:80;
[*]
}
  这里有个地方需要注意,ip_hash是什么呢?上面我说的要求我们再看一次:当我们访问192.168.182.131/index.html 时,由于是静态页面,交给nginx本身处理,如果我们访问192.168.182.131/test.php时,配置location匹配 .php 后缀,并交由后端apache集群来处理,至于集群会以什么样的方式来处理,后面用到时再说。


[*]ip_hash就是upstream的调度算法之一,以下列举nginx所支持的常用的3种调度算法:
[*]
[*]ip_hash:每个请求按访问IP的hash结果分配,这样来自同一个IP的访客固定访问一个后端服务器,有效解决了动态网页存在的session共享问题。
[*]
[*]轮询:每个请求按访问顺序分配不同的后端服务器,如果后端某台服务器宕机,故障系统被自动剔除,使用户访问不受影响。
[*]
[*]weight:指定轮询权值,weight值越大,分配到的访问机率越高,主要用于后端每个服务器性能不均的情况下。

  而location的应用,案例中只举了很简单的用法:


[*]
location~*.*.php${
[*]
proxy_passhttp://MyServer;
[*]
}


[*]首先应用了解location的几个匹配符:
[*]1=严格匹配这个查询。如果找到,停止搜索
[*]2^~匹配路径的前缀,如果找到,停止搜索
[*]3~为区分大小写的正则匹配
[*]4~*不区分大小写的正则匹配
[*]
[*]所以,代码中
[*]location~*.*.php$的意思就是,将.php结尾的url链接,发送到http://MyServer
[*]后端服务器去处理,让后端去处理。
[*]关于location的更深入理解可以看这篇文章: http://blog.csdn.net/fengmo_q/article/details/6683377

  配置后端apache集群服务器:


[*]192.168.182.132的配置如下:
[*]#yuminstallhttpd-y
[*]#yuminstallphp-y
[*]不做配置
[*]#pwd
[*]/var/www/html
[*]#ls
[*]test.php
[*]以下是test.php的内容:
[*]#cattest.php
[*]<?php
[*]print"192.168.182.132";
[*]?>
[*]#
[*]
[*]
[*]192.168.182.133的配置如下:
[*]#yuminstallhttpd-y
[*]#yuminstallphp-y
[*]不做配置
[*]#pwd
[*]/var/www/html
[*]#ls
[*]test.php
[*]以下是test.php的内容:
[*]#cattest.php
[*]<?php
[*]print"192.168.182.133";
[*]?>
[*]#

  整天过程就这样完成了。算是了解了nginx的负载均衡的大致过程 。以后再深入学习。这篇学习笔记就到此为止啦。
页: [1]
查看完整版本: nginx 负载均衡与location应用分析 简单实验