建站知识

配置nginx负载均衡

来源:赢德科技  日期:2016-9-23 16:43:45  浏览次数:

  首先是windows系统,这里建议使用window 2003企业版,而不要作用win7(太新了,我遇到无法启动nginx的问题)。要说的是,在windows下配置安装nginx还是很容易的,少了linux下下载tar再配置编译参数等等步骤,我们只要下载相应的zip包(大约750kb)即可。

  需要说明的是这个下载包是nginx 0.8.21开发版,换句话说其只能用于搭建测试环境等用途的,不能用于实际的生产环境(受限于windows文件句柄数限制)。

  下载并将该包中的文件解压到c盘上,为了配置使用方便,我将其解压后的文件夹名称从“nginx-0.8.19”改为"nginx”,这样我们只要将要负载均衡的站点在iis中设置好之后,将相应的链接地址放到nginx的相应配置文件中即可,这里我们打开C:\nginx\conf\nginx.conf文件,将下面的内容放到该文件的“server { ”上方行处:

  upstream  mylocalsite {  

  server   10.0.2.137:8088;

  server   10.0.2.137:8089; 

  } 

  因为nginx无法运行动态脚本,所以这里要使用proxy_pass属性进行代理,所以找到该配置文件的如下内容:

  location / {

  root   html;

  index  index.html index.htm;

  }

  修改其内容如下:

  location / {

  proxy_pass http://mylocalsite;

  } 

  修改完之后,还要修改一下server的侦听端口,原内容如下:

  server {

  listen       80;

  server_name  localhost; 

  …… 

  修改完后的内容如下:    

  server {

  listen       8086;

  server_name  10.0.2.136; 

  …… 

  这样,nginx就会在启动之后开始侦听本地IP(10.0.2.136)的8086端口请求,然后将其请求转向到mylocalsite 中所指定的两个iis站点,并将执行的结果转发给客户端。如果一切配置正确,这时可以运行 c:/nginx/nginx.exe (或在cmd下运行“start nginx”),就可以在任务管理器中看到一个nginx进程启动了。(注:如果配置文件有错误,可以到C:\nginx\logs\error.log查看错误日志,进一步排错)。

  注: 关闭ngnix的命令: nginx -s stop

  配置文件ngnix.conf正确性判断的命令: nginx -t 

  当然Nginx 负载均衡的功能也是很强的,并且其一般作为七层负载均衡(应用协议层)。下面就其upstream所支持的四个常用设置进行说明: 

  1)、轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

  2)、weight :指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。

  2)、ip_hash :每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

  3)、fair(第三方):按后端服务器的响应时间来分配请求,响应时间短的优先分配。 

  4)、url_hash(第三方) 

  按上面的说明,可以将之前我们的upstream做如下修改:

  upstream  mylocalsite {  

  server   10.0.2.137:8088 weight=2;

  server   10.0.2.137:8089 weight=1; 

  }

  这个当来了三个HTTP请求时,其中的两个会被分配到10.0.2.137:8088 上,一个分配到10.0.2.137:8089 。当然一开始可以其分摊的请求可以不是太严格按其设置,但当请求数多了之后,基本上就接近于我们分指派的权值了。当然就负载均衡的算法而言,使用weight只是其中的一种,而经常使用的还有许多,比如lvs就在其内部实现了多种的负载均衡算法,可以根据用户的实际环境进行设置布署。。当然就目前而言,nginx的算法相比较还是少了许多,呵呵。  

  可以说在windows下安装配置还是很方便的,但如果使用loadrunner做并发测试时,就会发现其logs/error.log就会报如下错误:

  maximum number of descriptors supported by select() is 1024 while connecting to upstream

  我曾经在网上查过解决方案,包括修改配置文件的worker_connections ,如下:       

  worker_rlimit_nofile 20240; 

  events {

  #use epoll;//linux下使用

  worker_connections  20240;

  } 

  但依旧不能将文件句柄数扩充到20240,还是报1024最大句柄数错误。最后实在没办法了,只得开始尝试在linux下安装配置nginx。也就引发了下面的内容。  

  其实在网上有关介绍如何在linux下安装nginx的要比windows下的要多得多,必定这是‘本家’吧。  

  因为之前网管只在虚拟机上安装了CentOS5,所以只能就尝试在该linux分支版本下安装了。好在虚拟机已安装完了,剩下的工作并不太多。

  首先需要以root身份登陆系统,然后切换身份为超级管理员:      

  sudo -s          # 先成为超级管理员

  然后进入到src目前下,并在当前目录下download nginx.tar.gz包    

  cd /usr/src      # 将文件下载到这个目录

  wget http://sysoev.ru/nginx/nginx-0.7.62.tar.gz# 下载安装包

  tar xzvf nginx-0.6.34.tar.gz   #解压

  如果下载的nginx 中默认可能没有 rewirte规则,因此需要下载pcre包的扩展来实现这个功能:   

  wget http://syslab.comsenz.com/downloads/linux/pcre-7.8.tar.bz2    # 下载pcre

  tar xjvf pcre-7.8.tar.bz2                   # 解压pcre

  下面编译安装pcre      

  cd /usr/src/pcre-7.8;

  ./configure --prefix=/usr/local/pcre --enable-utf8 --enable-unicode-properties 

  下面编译安装nginx     

  cd /usr/src/nginx-0.7.62 

  开始配置要编译的参数

  ./configure --prefix=/usr/local/nginx  --sbin-path=/usr/local/nginx/sbin/nginx  --conf-path=/usr/local/nginx/conf/nginx.conf

  --error-log-path=/usr/local/nginx/logs/error.log --http-log-path=/usr/local/nginx/logs/access.log

  --pid-path=/usr/local/nginx/var/nginx.pid --lock-path=/usr/local/nginx/var/nginx.lock

  --http-client-body-temp-path=/dev/shm/nginx_temp/client_body --http-proxy-temp-path=/dev/shm/nginx_temp/proxy

  --http-fastcgi-temp-path=/dev/shm/nginx_temp/fastcgi

  --user=www --group=www --with-cpu-opt=pentium4 --without-select_module --without-poll_module

  --with-http_realip_module --with-http_sub_module --with-http_gzip_static_module --with-http_stub_status_module

  --without-http_ssi_module --without-http_userid_module --without-http_geo_module --without-http_memcached_module

  --without-http_map_module" #如要取消ssl可去掉该项

  --without-mail_pop3_module --without-mail_imap_modul --without-mail_smtp_module --with-pcre=/usr/local/pcre/lib

  接下来就开始编译生成相应的文件了:

  make

  make install 

  然后/dev/shm 也就是内存中,建立一个nginx_temp文件夹

  mkdir /dev/shm/nginx_temp 

  接着创建www用户和组,以及其使用的目录:    

  /usr/sbin/groupadd www -g 48 

  /usr/sbin/useradd -u 48 -g www www 

  mkdir -p /data0/vshare/htdocs 

  chmod +w /data0/vshare/htdocs 

  chown -R www:www /data0/vshare/htdocs 

  这时可以扩充一下文件句柄数(windows下就没这么容易扩展了,哎)   

  ulimit -SHn 51200 #设置打开文件句柄

  到这里,我们就可以使用linux下的vi编辑器编辑一下:

  cd /usr/src/nginx-0.7.62/conf/ 

  vi nginx.conf

  将之前在window下的修改内容替换(按下insert键进入到编辑模式)到当前的文件中,当修改完成了,按冒号(":")切换到命令模式下,然后敲入“wq”,保存并退出。(强制退出(不保存)的话,输入q!,然后回车)

  注:

  events { 

  use epoll; 

  worker_connections  20240;

  }

  注:use epoll; //linux下使用,更多内容参见NginxChsOptimizations

  这样就可以运行nginx了:    

  /usr/local/nginx/sbin/nginx -t –c 

  启动完成后,可以通过如下指令查看其在内存中的运行信息:

  # ps aux | egrep '(PID|nginx)'

  这样当我们再使用loadrunner运行时,就可以看到error.log中就不再报那个恼人的“1024错误了”。 

  当然在nginx中,还支持文件缓存,以便于将那些静态文件缓存到本地的nginx服务器上,只不过要修改一下其config文件配置,如下:

  vi nginx.conf

  在文件中的相应节点处输入如下内容:   

  location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|html|htm|css)$ {        #指定缓存文件类型

  expires 7d;      #设置浏览器过期时间7天

  root data/nginx_cache/iis;          #静态文件根目录目录(必须对应proxy_temp_path)

  proxy_store on;        #开启缓存机制

  proxy_store_access user:rw group:rw all:rw;       #缓存读写规则

  proxy_temp_path data/nginx_cache/iis;            #存放静态文件的缓存目录

  #    include proxy.conf;          # 外联proxy理的详细配置如proxy_set_header, client_max_body_size .

  if (!-e $request_filename) { 

  proxy_pass http://10.0.2.136;/

  }

  }

  这样就会在data/nginx_cache/iis目前下生成相应的gif,jpg等文件的临时信息,当客户端请求到来时,就会从该目录中检索相应文件绑定之后返回给客户端,以减轻iis服务器和网络带宽的压力。 

  想要了解更多详情欢迎来电咨询18678812288,或登陆网址www.jnydkj.com。联系人:王经理。地址:济南市舜耕路泉城公园东门园内向北50米


上一篇:网站设计细节2

下一篇:服务器管理

服务知名客户

佰诗奴 齐鲁动保 sai shinegee 百世指尖 丽达 科捷 感知 华美医院 创想餐饮... 晟华制药 济南亿民动物药业有限公司 山东骏腾医疗科技有限公司 凤凰眼镜 欧丽家居 艺拍中国 济南王者教育 娜氏婚礼策划工作室
Copyright 2016-2018 山东赢德信息科技有限公司所有 鲁ICP备证100953号 关于我们| 联系我们| 付款方式| 网站案例| 新闻资讯| TXT网站地图| XML地图