nginx + tomcat cluster achieves load balancing
2012-09-21 14:15 1338 people read Comments (1) Collection Report
nginxtomcat cluster server load balancing file
1. Install nginx
Required prCE library e wet ftp://ftp.csx.cam.ac.uk/pub/software/prography/pcre/pcre-8.10.tar.gz
Tar ZXVF PCRE-8.10.gz 8 CD PCRE-8.10/
./configure
Make && MAKE Install
CD ../
Install nginx
wettp: //nginx.org/download/nginx- cd nginx -1.0.2/
./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
make && make install cd ../
Create Nginx log directory
mkdir -p /home/nginx/logs
chmod +w /home/nginx/logs
chown -R www:www /home/nginx/ logs
Create Nginx configuration file
①, create nginx.conf file in /usr/local/nginx/conf/ directory:
rm -f /usr/local/nginx/conf/nginx.conf
vi /usr/local/nginx/conf/nginx.conf
Enter the following:
user www www;
worker_processes 8;
error_log /home/nginx/logs/nginx_error.log crit ;
pid /usr/local/nginx/nginx.pid;
worker_rlimit_nofile 65535;
events
{
use worker_connections 65535;
}
http
{
include mime.types;
default_type application/octet-stream;
#charset gb2312;
server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 8m;
sendfile on;
tcp_nopush on;
keepalive_timeout 60;
tcp_nodelay on;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on;
#limit_zone crawler$binary_remote_addr10m;
#测试
server
{
listen 80;
server_name www.test.com;
index index.htm index.html index.jsp;
root /home/htdocs/web/ROOT/;
location ~ .*$
{
index index.jsp;
proxy_pass http://www.test.com:8080;
}
access_log logs/sp.imichat.com.log combined;
error_page 404 = /404.html;
}
}
②、在/usr/local/nginx/conf/目录中创建fcgi.conf文件:
vi /usr/local/nginx/conf/fcgi.conf
输入以下内容:
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param REDIRECT_STATUS 200;
启动Nginx
ulimit -SHn 65535
/usr/local/nginx/sbin/nginx
配置开机自动启动Nginx
vi /etc/rc.local
在末尾增加以下内容:
ulimit -SHn 65535
/usr/local/nginx/sbin/nginx
优化Linux内核参数
vi /etc/sysctl.conf
在末尾增加以下内容:
# Add
net.ipv4.tcp_max_syn_backlog = 65536
net.core.netdev_max_backlog = 32768
net.core.somaxconn = 32768
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2
net.ipv4.tcp_tw_recycle = 1
#net.ipv4.tcp_tw_len = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_max_orphans = 3276800
#net.ipv4.tcp_fin_timeout = 30
#net.ipv4.tcp_keepalive_time = 120
net.ipv4.ip_local_port_range = 1024 65535
使配置立即生效:
/sbin/sysctl -p
在不停止Nginx服务的情况下变更Nginx配置
修改/usr/local/nginx/conf/nginx.conf配置文件后,请执行以下命令检查配置文件是否正确:
/usr/local/nginx/sbin/nginx -t
如果屏幕显示以下两行信息,说明配置文件正确:
the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
the configuration file /usr/local/nginx/conf/nginx.conf was tested successfully
重启nginx:
/usr/local/nginx/sbin/nginx -s reload
编写每天定时切割Nginx日志的脚本
U Create the script /usr/local/nginx/sbin/cut_nginx_log.sh
vi /usr/ntinx/sbin/cut_nginx_log.sh
::
#!/Bin/bash
# This script run at 00:00
# The Nginx logs path
logs_root_path="/home/nginx/logs/"
logs_path=${logs_root_path}$(date -d "yesterday" +"% Y")/$(date -d "yesterday" +"%m")/
mkdir -p ${logs_path}
#Log file name ============== ======================================
logs_name="weblogs"
logs_file =${logs_root_path}${logs_name}.log
cut_logs_file=${logs_path}${logs_name}_$(date -d "yesterday" +"%Y%m%d").log
mv $ {logs_file} ${cut_logs_file}
tar czf ${cut_logs_file}.tar.gz ${cut_logs_file}
rm -f ${cut_logs_file}
#Restart nginx
/usr/local/nginx/ sbin/nginx -s reload
Give execution permissions to this script
# chmod +x /usr/local/nginx/sbin/cut_nginx_log.sh
Set crontab to cut nginx access logs at 00:00 every morning
crontab -e
Enter the following content:
00 00 * * * /bin/bash /usr/local/nginx/sbin/cut_nginx_log.sh
2. Configure nginx load balancing
Edit nginx .conf
vim /usr/local/nginx/conf/nginx.conf
. Server www.test.com:8888; server wwww.test.com: 8080; #ip_hash; Note: If IP_hash is added, this can only be applied to all the operations he did after a user connected to a server, and all the operations he did after landing landed after landing. It will only be on that server and will not jump to another server. If that server is over, it will automatically exit and connect to another server
}
www.test.com is your own For the server, it is best to use a domain name. The name after upstream should be the same as the name proxy_pass. It is recommended that the name after upstream, the name after proxy_pass, and the name after server_name should be the same. Example:
upstream
www.test .com{
#test
server
{
listen 80 ; server_name
www.test.com; index index.htm index.html index.jsp;
root /home/htdocs/web/ROOT/;
location ~ .*$
{E index index.jsp;
proxy_pass
Http://www.test.com; Note: For load balancing, you cannot add ports later}
Access_log Logs/SP .imichat.com.log combined;
error_page 404 = /404.html;
}
Note: If the load balancing is unsuccessful, please check whether port 80 is directly forwarded to the tomcat service port without going through nginx
3. Configure tomcat cluster
Optimize the maximum number of tomcat concurrencies, edit server.xml
does not matter
enableLookups="false" redirectPort="8443" acceptCount=" 500"
className="org.apache.catalina.ha.tcp .SimpleTcpCluster" tcpListenAddress="127.0.0.1" />
Modify web.xml
Add tag:
Add directly to Just before, This is copied from the session added to tomcat. This step is necessary to build a tomcat cluster, otherwise the user's session cannot be used normally.
The above introduces the nginx + tomcat cluster to achieve load balancing, including aspects of the content. I hope it will be helpful to friends who are interested in PHP tutorials.
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn