/ 中存储网

在RHEL系统使用Nginx+Tomcat7配置负载均衡

2014-01-03 09:58:01 来源:ITJS.CN

1、安装Nginx服务器(使用root用户操作)

1.1、获取安装Nginx需要的软件源

软件源可以在 http://nginx.org/en/download.html 页面找到

如果你看不懂英文,就从以下地址下载安装rpm包就可以搞定软件源了:)

http://nginx.org/packages/rhel/6/noarch/RPMS/nginx-release-rhel-6-0.el6.ngx.noarch.rpm

1.2、安装Nginx

#yum install nginx

提示:

nginx-1.2.6-1.el6.ngx.x86_64      安装成功

1.3、查询Nginx软件文件安装路径

#rpm -ql nginx-1.2.6-1.el6.ngx.x86_64

查询结果:

/etc/logrotate.d/nginx

/etc/nginx

/etc/nginx/conf.d

/etc/nginx/conf.d/default.conf

/etc/nginx/conf.d/example_ssl.conf

/etc/nginx/fastcgi_params

/etc/nginx/koi-utf

/etc/nginx/koi-win

/etc/nginx/mime.types

/etc/nginx/nginx.conf

/etc/nginx/scgi_params

/etc/nginx/uwsgi_params

/etc/nginx/win-utf

/etc/rc.d/init.d/nginx

/etc/sysconfig/nginx

/usr/sbin/nginx

/usr/share/nginx

/usr/share/nginx/html

/usr/share/nginx/html/50x.html

/usr/share/nginx/html/index.html

/var/cache/nginx

/var/log/nginx

1.4、查询服务安装状态

# chkconfig --list | grep nginx

显示结果:

nginx          0:off1:off2:on3:on4:on5:on6:off

说明Nginx服务已经安装成功,并且是开机启动的:)

1.5、查询新建用户状态

# less /etc/passwd | grep nginx

显示结果:

nginx:x:496:493:nginx user:/var/cache/nginx:/sbin/nologin

说明新建了一个nginx用户组和一个nginx用户,用于执行nginx服务

2、配置Nginx服务器做为负载平衡(使用root用户操作)

2.1、修改配置文件 /etc/nginx/nginx.conf 

user  nginx;

worker_processes  8;            # 工作的子进程数量,默认为1(通常设置为等于CPU数量或者2倍于CPU)

error_log  /var/log/nginx/error.log warn;

pid        /var/run/nginx.pid;

# add by guorui

worker_rlimit_nofile    8192;  # 在nginx级别上提高打开的文件句柄限制,必须大于 worker_connections 的值

events {

   # add by guorui

   use epoll;                  # 使用网络IO模型linux建议epoll,FreeBSD建议采用kqueue

   worker_connections  2048;   # 每个进程允许的最多连接数,必须小于 worker_rlimit_nofile 的值

# 服务器的最大访问客户数 max clients = worker_processes * worker_connections

}

http {

   include       /etc/nginx/mime.types;

   default_type  application/octet-stream;

   log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '

'$status $body_bytes_sent "$http_referer" '

'"$http_user_agent" "$http_x_forwarded_for"';

   access_log  /var/log/nginx/access.log  main;

   sendfile        on;

   #tcp_nopush     on;

   keepalive_timeout  65;

   #gzip  on;

   # add by guorui                                # 添加 upstream 模块,参考PS1

   upstream mtserver {                            # mtserver 是服务器集群名称,后面会用到

server localhost:8081 fail_timeout=5;      # 添加多个负载服务器的地址、端口及其他负载参数

server localhost:8080;

   }

   include /etc/nginx/conf.d/*.conf;

}

2.2、修改配置文件 /etc/nginx/conf.d/default.conf 

location / {

   proxy_pass http://mtserver;# 添加这一行,引用上面定义的 服务器集群 mtserver

   #root   /usr/share/nginx/html;# 注释掉

   #index  index.html index.htm;# 注释掉

}

3、配置Tomcat7服务器

3.1、服务器A

修改 server.xml 文件,把以下内容

<Engine name="Catalina" defaultHost="localhost">

修改为

<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat-a">

3.2、服务器B

修改 server.xml 文件,把以下内容

<Engine name="Catalina" defaultHost="localhost">

修改为

<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat-b">

3.3、其他修改项(如果两台服务器在一台机器上,需要做下面的修改,主要是为了避免端口冲突)

3.3.1、把以下内容

<Server port="8005" shutdown="SHUTDOWN">

改为

<Server port="8006" shutdown="SHUTDOWN">

3.3.2、把以下内容

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />

改为

<Connector port="8081" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />

3.3.3、把以下内容

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

改为

<Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />

4、手动操作Nginx服务器

启动 nginx

关闭 nginx -s stop

================================完=================================

PS1:upstream 语法参考

语法: upstream name { ... }

默认值: —

上下文: http

定义一组服务器。 这些服务器可以监听不同的端口。 而且,监听在TCP和UNIX域套接字的服务器可以混用。

例子:

upstream backend {

   server backend1.example.com weight=5;

   server 127.0.0.1:8080       max_fails=3 fail_timeout=30s;

   server unix:/tmp/backend3;

}

默认情况下,nginx按加权轮转的方式将请求分发到各服务器。 在上面的例子中,每7个请求会通过以下方式分发: 

5个请求分到backend1.example.com, 一个请求分到第二个服务器,一个请求分到第三个服务器。 与服务器通信

的时候,如果出现错误,请求会被传给下一个服务器,直到所有可用的服务器都被尝试过。 如果所有服务器都返回

失败,客户端将会得到最后通信的那个服务器的(失败)响应结果。

语法: server address [parameters];

默认值: —

上下文: upstream

定义服务器的地址address和其他参数parameters。 地址可以是域名或者IP地址,端口是可选的,或者是指定“unix:”

前缀的UNIX域套接字的路径。如果没有指定端口,就使用80端口。 如果一个域名解析到多个IP,本质上是定义了多

个server。

你可以定义下面的参数:

weight=number

设定服务器的权重,默认是1。

max_fails=number

设定Nginx与服务器通信的尝试失败的次数。在fail_timeout参数定义的时间段内,如果失败的次数达到此值,Nginx就

认为服务器不可用。在下一个fail_timeout时间段,服务器不会再被尝试。 失败的尝试次数默认是1。设为0就会停止统

计尝试次数,认为服务器是一直可用的。 你可以通过指令proxy_next_upstream、 fastcgi_next_upstream和 

memcached_next_upstream来配置什么是失败的尝试。 默认配置时,http_404状态不被认为是失败的尝试。

fail_timeout=time

设定

统计失败尝试次数的时间段。在这段时间中,服务器失败次数达到指定的尝试次数,服务器就被认为不可用。

服务器被认为不可用的时间段。

默认情况下,该超时时间是10秒。

backup

标记为备用服务器。当主服务器不可用以后,请求会被传给这些服务器。

down

标记服务器永久不可用,可以跟ip_hash指令一起使用。

PS2:nginx命令语法

Usage: nginx [-?hvVtq] [-s signal] [-c filename] [-p prefix] [-g directives]

Options:

 -?,-h         : this help

 -v            : show version and exit

 -V            : show version and configure options then exit

 -t            : test configuration and exit

 -q            : suppress non-error messages during configuration testing

 -s signal     : send signal to a master process: stop, quit, reopen, reload

 -p prefix     : set prefix path (default: /etc/nginx//)

 -c filename   : set configuration file (default: /etc/nginx/nginx.conf)

-g directives : set global directives out of configuration file