您的位置:首页 > 运维架构 > Tomcat

NGINX_TOMCAT 负载均衡配置

2013-12-27 09:46 369 查看
此配置已在生产环境中运行。

软件:

Nginx-1.0.8

下载地址:http://nginx.org/download/nginx-1.0.8.tar.gz

apache-tomcat-6.0.18

下载地址:http://archive.apache.org/dist/tomcat/tomcat-6/v6.0.18/bin/apache-tomcat-6.0.18.tar.gz

jdk-6u27-linux-i586.bin

下载地址:http://download.oracle.com/auth/otn-pub/java/jdk/6u27-b07/jdk-6u27-linux-i586.bin?e=131891933

Pcre-8.00

下载地址:http://nchc.dl.sourceforge.net/project/pcre/pcre/8.00/pcre-8.00.tar.gz

Nginx-upstream-jvm-route-0.2

下载地址:http://nginx-upstream-jvm-route.googlecode.com/files/nginx-upstream-jvm-route-0.2.tar.gz



配置环境:

Nginx服务器地址:192.168.1.20

Apache_tomcat1服务器:192.168.1.21

Apache_tomcat2服务器:192.168.1.22



一:软件安装步骤

将所有软件包下载到:/usr/src路径

配置nginx服务器:

1:pcre-8.00编译安装

[root@mysql2 ~]#cd /usr/src/

[root@mysql2 src]#tar xf pcre-8.00.tar.gz

[root@mysql2 src]#cd pcre-8.00/

[root@mysql2pcre-8.00]# ./configure ;make;make install

2:nginx-1.0.8编译安装

[root@mysql2 src]#tar xf nginx-upstream-jvm-route-0.1.tar.gz

[root@mysql2 src]#tar xf nginx-1.0.8.tar.gz

[root@mysql2 src]#cd nginx-1.0.8/

[root@mysql2nginx-1.0.8]#patch -p0 </usr/src/nginx_upstream_jvm_route/jvm_route.patch

[root@mysql2nginx-1.0.8]# ./configure --prefix=/usr/local/nginx--with-pcre=/usr/src/pcre-8.00/ --with-http_stub_status_module--with-http_sub_module--add-module=/usr/src/nginx_upstream_jvm_route

# --with-pcre路径是指向pcre的源码文件目录

3:修改Nginx配置文件

[root@mysql2 ~]#cd /usr/local/nginx/conf/

[root@mysql2conf]# cpnginx.confnginx.conf.back

[root@mysql2conf]# vinginx.conf

user nginxnginx;

worker_processes2;以下是以服务器上有多少个cpu定的数字。(2cpu就定为2)

worker_cpu_affinity 0010 0100;cpu的负载分配

error_log logs/error.log;

#error_log logs/error.log notice;

#error_log logs/error.log info;



pid logs/nginx.pid;



worker_rlimit_nofile65535;



events {

useepoll;

worker_connections 10240;

}



http {

includemime.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 logs/access.log main;



sendfile on;

tcp_nopush on;

server_names_hash_bucket_size128;

client_header_buffer_size32k;

large_client_header_buffers4 32k;

client_max_body_size8m;

#keepalive_timeout 0;

keepalive_timeout 60;



gzip on;

gzip_min_length1k;

gzip_buffers 416k;

gzip_http_version1.0;

gzip_comp_level 2;

gzip_types text/plain application/x-javascript text/cssapplication/xml;

gzip_vary on;



server_tokens off;

upstream backend

{

server192.168.1.21:8080 srun_id=tomcat1;

server192.168.1.22:8080 srun_id=tomcat2;

jvm_route$cookie_JSESSIONID|sessionid reverse;

}



server {

listen 192.168.1.20:80;

server_name web.cl.com;



charsetutf-8;



#access_log logs/host.access.log main;



location / {

root html;

index index.html index.htm index.jsp;

proxy_redirectoff;

proxy_set_headerHost $host;

proxy_set_headerX-Real-IP $remote_addr;

proxy_set_headerX-Forwarded-For $proxy_add_x_forwarded_for;

proxy_passhttp://backend;

}

location /status{

stub_status on;

access_log on;

auth_basic "status";

auth_basic_user_file/usr/local/nginx/htpasswd;

}



#error_page 404 /404.html;



# redirect server error pages tothe static page /50x.html

#

error_page 500 502 503 504 /50x.html;

location =/50x.html {

root html;

}



# proxy the PHP scripts to Apachelistening on 127.0.0.1:80

#

#location ~ \.php$ {

# proxy_pass http://127.0.0.1;
#}



# pass the PHP scripts to FastCGIserver listening on 127.0.0.1:9000

#

#location ~ \.php$ {

# root html;

# fastcgi_pass 127.0.0.1:9000;

# fastcgi_indexindex.php;

# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;

# includefastcgi_params;

#}



# deny access to .htaccess files,if Apache's document root

# concurs with nginx's one

#

#location ~ /\.ht {

# deny all;

#}

}





# another virtual host using mix ofIP-, name-, and port-based configuration

#

#server {

# listen 8000;

# listen somename:8080;

# server_namesomename alias another.alias;



# location / {

# root html;

# index index.html index.htm;

# }

#}



# HTTPS server

#

#server {

# listen 443;

# server_namelocalhost;



# ssl on;

# ssl_certificatecert.pem;

# ssl_certificate_keycert.key;



# ssl_session_timeout 5m;



# ssl_protocols SSLv2 SSLv3 TLSv1;

# ssl_ciphers HIGH:!aNULL:!MD5;

# ssl_prefer_server_ciphers on;



# location / {

# root html;

# index index.html index.htm;

# }

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

'$status$body_bytes_sent "$http_referer" '

'"$http_user_agent"$http_x_forwarded_for';

access_log /var/log/access.log access;



#}

}

添加用户:

[root@mysql2conf]# groupaddnginx

[root@mysql2conf]# useradd -g nginx -s /sbin/nologinnginx



添加查看Nginx服务状态的用户:

[root@mysql2 ~]# yum -y install httpd安装此服务需要借助一个命令

[root@mysql2 ~]#htpasswd -c /usr/local/nginx/htpasswdnginx

New password:

Re-type newpassword:



检查配置文件:

[root@mysql2 conf]# /usr/local/nginx/sbin/nginx -t

nginx: theconfiguration file /usr/local/nginx/conf/nginx.conf syntax is
ok

nginx:configuration file /usr/local/nginx/conf/nginx.conf test is
successful

看到以上两个结果就算配置是正确的。



启动服务:

[root@mysql2conf]# /usr/local/nginx/sbin/nginx



停止服务:

[root@mysql2conf]# /usr/local/nginx/sbin/nginx–s stop



也可以使用这个启动和停止的脚本:

[root@mysql2 conf]#vi /etc/init.d/nginx

#!/bin/sh
#
# description: Starts, stopsnginx
#
#chkconfig: 2345 20 80
#dscription: Startup scriptfor nginx webserver on CentOS. Place in /etc/init.d

#
# Author: Touya
set -e

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/nginx
DESC="nginxdaemon"
NAME=nginx
DAEMON=/usr/local/nginx/sbin/$NAME (定义nginx的安装目录)
CONFIGFILE=/usr/local/nginx/conf/nginx.conf
PIDFILE=/usr/local/nginx/logs/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME



# Gracefully exit if the package has been removed.

test -x $DAEMON || exit 0



d_start() {

echo "Starting $DESC: $NAME"

$DAEMON -c $CONFIGFILE || echo "already running"

}



d_stop() {

echo "Stopping $DESC: $NAME"

test -f $PIDFILE && kill -QUIT `cat $PIDFILE`

}



d_reload() {

echo "Reloading $DESC configuration…"

kill -HUP `cat $PIDFILE` || echo "can’t reload"

}

case "$1" in

'start')

d_start

echo "started."

;;

'stop')

d_stop

echo "stoped."

;;

'reload')

d_reload

echo "reloaded."

;;

'restart')

echo "Restarting $DESC: $NAME ..."

d_stop

# One second might not be time enough for a daemon tostop,

# if this happens, d_start will fail (and dpkg will breakif

# the package is being upgraded). Change the timeout ifneeded

# be, or change d_stop to have start-stop-daemon use--retry.

# Notice that using --retry slows down the shutdown processsomewhat.

sleep 3

d_start

echo "done."

;;

'list')

psauxf | egrep '(PID|nginx)' | grep -v grep

;;

'test')

$DAEMON -t -c $CONFIGFILE

;;

*)

echo "Usage: $SCRIPTNAME {reload|list|test|start|stop|restart}">&2

exit 3

;;

esac

exit 0


[root@mysql2conf]#chmod 755 /etc/init.d/nginx

[root@mysql2conf]# /etc/init.d/nginx start

[root@mysql2conf]# /etc/init.d/nginx stop

[root@mysql2conf]#chkconfig --add nginx #开机自启动



检查服务器端口是否启动:

[root@mysql2 conf]#lsof–i:80



查看服务状态:
http://192.168.1.20/nginx


Apache-tomcat服务器配置

1:jdk-6u27-linux-i586.bin安装

[root@webusr]# cd /usr/src/

[root@websrc]# ./jdk-6u27-linux-i586.bin

[root@websrc]# mvjdk1.6.0_27//usr/local/

[root@websrc]# vi /etc/profile

J***A_HOME=/usr/local/ jdk1.6.0_27

CLASSPATH=".:$J***A_HOME/lib/tools.jar:$J***A_HOME/lib/dt.jar"

PATH=$J***A_HOME/bin:$PATH

TOMCAT_HOME=/usr/local/tomcat

export J***A_HOME CLASSPATH PATH TOMCAT_HOME



使配置生效:

[root@websrc]# source /etc/profile



查看当前java版本号:

[root@websrc]# java -version

java version "1.6.0_27"



2:apache-tomcat-6.0.18安装

[root@websrc]#tar xf apache-tomcat-6.0.18.tar.gz

[root@websrc]# mv apache-tomcat-6.0.18/usr/local/tomcat1

[root@web tomcat]# cd/usr/local/tomcat/conf/



修改配置文件:

[root@webconf]#vi server.xml

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



<Connector port="8009"maxThreads="500" minSpareThreads="30"maxSpareThreads="70" acceptCount="100"connectionTimeout="60000"protocol="AJP/1.3"redirectPort="8443" />



[root@webconf]# vi tomcat-users.xml

<?xml version='1.0'encoding='utf-8'?>

<tomcat-users>

<role rolename="manager"/>

<role rolename="admin"/>

<user username="admin"password="admin" roles="admin,manager"/>

</tomcat-users>



[root@webconf]# cd /usr/local/tomcat/bin/

[root@web bin]# vi catalina.sh

74 J***A_HOME=/usr/local/ jdk1.6.0_27

J***A_OPTS="-server-Xms256m -Xmx512m"



启动服务:

[root@web bin]#/usr/local/tomcat/bin/startup.sh

关闭服务:

[root@web bin]#/usr/local/tomcat/bin/shutdown.sh

检查服务端口:

[root@web bin]# lsof -i:8080

COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME

java 6414 root 29u IPv4 24953 TCP *:webcache (LISTEN)



在目录下建立测试页

[root@web ~]# mkdir/usr/local/tomcat/webapps/opps

[root@web ~]# vi/usr/local/tomcat/webapps/opps/mem.jsp

<%
Runtime lRuntime = Runtime.getRuntime();
out.println("*** BEGINMEMORY STATISTICS ***<br/>");
out.println("Free Memory:"+lRuntime.freeMemory()+"<br/>");
out.println("Max Memory:"+lRuntime.maxMemory()+"<br/>");
out.println("TotalMemory: "+lRuntime.totalMemory()+"<br/>");
out.println("AvailableProcessors : "+lRuntime.availableProcessors()+"<br/>");
out.println("*** ENDMEMORY STATISTICS ***");
%>

访问测试:

http://192.168.1.20/mem.jsp



能访问,证明配置成功。OK



在TOMCAT另一台服务器的配置步骤重复第一台的步骤就好了,在这里就不写出来了。



系统内核优化参数:(在三台上面添加)

[root@web bin]# /etc/sysctl.conf

net.ipv4.tcp_syncookies = 1

net.ipv4.tcp_window_scaling: = 1

net.core.rmem_max = 16777216

net.core.wmem_max = 16777216

net.ipv4.tcp_rmem = 4096 87380 16777216

net.ipv4.tcp_wmem = 4096 65536 16777216

net.ipv4.ip_local_port_range = 1024 65000

net.ipv4.icmp_echo_ignore_all = 1

net.ipv4.tcp_max_syn_backlog = 2048

net.ipv4.tcp_synack_retries = 3

net.ipv4.tcp_fin_timeout = 120

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_tw_recycle = 1

net.ipv4.tcp_keepalive_time = 1200

使配置立即生效:

[root@web bin]# /sbin/sysctl -p
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: