使用Nginx+Tomcat7在RHEL6.3下实现负载均衡

jopen 12年前

使用Nginx+Tomcat7在RHEL6.3下实现负载均衡


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