使用Nginx+Tomcat7在RHEL6.3下实现负载均衡
使用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