超細(xì)膩的nginx負(fù)載均衡設(shè)置全程奉獻(xiàn)
前面我們學(xué)習(xí)了很多關(guān)于lvs的負(fù)載均衡的相關(guān)內(nèi)容,現(xiàn)在我們來(lái)看一下,nginx的負(fù)載均衡設(shè)置,同樣,也是借由tomacat來(lái)實(shí)現(xiàn)。在這里我們用的是NFS服務(wù)器,要保證這些數(shù)據(jù)程序是同步的之后才能進(jìn)行后面的操作。那么更具體的過(guò)程還是從下文中了解吧。
前端一臺(tái)nginx服務(wù)器做調(diào)度.后端兩臺(tái)tomcat做WEB服務(wù)器.這里動(dòng)態(tài)頁(yè)與靜態(tài)頁(yè)都由tomcat來(lái)處理.
軟件:
nginx-0.7.28.tar.gz
pcre-7.8.tar.gz
apache-tomcat-6.0.20.tar.gz
jdk-6u14-linux-i586-rpm.bin
架構(gòu)說(shuō)明
三臺(tái)服務(wù)器:一臺(tái)調(diào)度也就是nginx服務(wù)器,它還是NFS服務(wù)器,我們把2個(gè)tomcat的webapps目錄掛載到NFS服務(wù)器上,這樣數(shù)據(jù)程序是同步的了。
配置步驟:
一、web服務(wù)器的配置
首先安裝兩臺(tái)tomcat,兩臺(tái)安裝都一樣
1.安裝JDK
- # pwd
- /usr/local
- # chmod a+x jdk-6u14-linux-i586-rpm.bin
- # ./jdk-6u14-linux-i586-rpm.bin
- # ln -s /usr/java/jdk1.6.0_14 /usr/local/java
設(shè)置環(huán)境變量
# vi profile
末尾增加如下內(nèi)容
- JAVA_HOME=/usr/java/jdk1.6.0_14
- CLASSPATH=/usr/java/jdk1.6.0_14/lib/dt.jar:/usr/java/jdk1.6.0_14/lib/tools.jar
- PATH=/usr/java/jdk1.6.0_14/bin:$PATH
- export PATH JAVA_HOME CLASSPATH
2.安裝tomcat
- # cp apache-tomcat-6.0.20.tar.gz /usr/local/
- # cd /usr/local/
- # tar xzvf apache-tomcat-6.0.20.tar.gz
- # ln -s apache-tomcat-6.0.20 tomcat
- # vi /usr/local/tomcat/bin/catalina.sh
#p#
加入一行:
- JAVA_HOME=/usr/java/jdk1.6.0_14
- # /usr/local/tomcat/bin/startup.sh
啟動(dòng)服務(wù)后訪問(wèn)本地的8080端口可以看到對(duì)應(yīng)apache tomcat頁(yè)面了
把Tomcat加到自啟動(dòng):
# vi /etc/rc.d/rc.local
在里面加入如下代碼:
- export JDK_HOME=/usr/java/jdk1.6.0_14
- export JAVA_HOME=/usr/java/jdk1.6.0_14
- /usr/local/tomcat/bin/startup.sh
至此tomcat已安裝成功了
優(yōu)化: tomcat 比如防止內(nèi)存溢出; TCP/IP 比如time_wait與closed_wait等等
二、 安裝 nginx、nfs 注意它們是一臺(tái)服務(wù)器上
1.安裝 nginx
在安裝之前首先要安裝pcre-7.9.tar.gz
- # tar zxvf pcre-7.9.tar.gz
- # cd pcre-7.9
- # ./configure
- # make && make install
安裝nginx
- # tar zxvf nginx-0.7.61.tar.gz
- # cd nginx-0.7.61
- # ./configure --with-http_stub_status_module --prefix=/usr/local/nginx
- # make && make install
#p#
修改nginx的配置文件
我這里是把原先的重命名然后新建了一個(gè)nginx.conf
- #vi nginx.conf
- user nobody nobody;
- worker_processes 8;
- pid /usr/local/nginx/logs/nginx.pid;
- worker_rlimit_nofile 51200;
- events
- {
- use epoll;
- worker_connections 51200;
- }
- http{
- includemime.types;
- default_type application/octet-stream;
- 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_typestext/plain application/x-javascript text/css application/xml;
- gzip_vary on;
- #設(shè)定負(fù)載均衡列表
- upstream backend
- {
- server 192.168.100.89:8080;
- server 192.168.100.90:8080;
- }
- #設(shè)定虛擬主機(jī)
- server {
- listen 80;
- server_name www.syitren.com;
- #對(duì) / 所有做負(fù)載均衡 (本機(jī)nginx采用完全轉(zhuǎn)發(fā),所有請(qǐng)求都轉(zhuǎn)發(fā)到后端的tomcat集群)
- location / {
- root /var/www ;
- index index.jsp index.htm index.html;
- proxy_redirect off;
- #保留用戶真實(shí)信息
- proxy_set_header Host $host;
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- proxy_pass http://backend;
- }
- #location /nginx {
- #access_log on;
- #auth_basic "NginxStatus";
- #auth_basic_user_file /usr/local/nginx/htpasswd;
- #}
- 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;
- }
- }
#p#
檢查nginx的配置文件
# /usr/local/webserver/nginx/sbin/nginx -t
啟動(dòng)nginx
# /usr/local/webserver/nginx/sbin/nginx
重啟nginx
# kill -HUP `cat /usr/local/nginx/logs/nginx.pid`
(1)查看負(fù)載均衡信息
- location /nginx {
- stub_status on;
- access_log on;
- auth_basic "NginxStatus";
- auth_basic_user_file /usr/local/nginx/htpasswd;
- }
其中/usr/local/nginx/htpasswd可以用apache自帶的功能生成。
***在IE里訪問(wèn):
http://www.syitren.com/nginx, 然后輸入用戶名密碼就進(jìn)入了。
進(jìn)入之后的說(shuō)明
輸入地址 http://www.syitren.com/nginx/,輸入驗(yàn)證帳號(hào)密碼,即可看到類似如下內(nèi)容:
- Active connections: 328
- server accepts handled requests
- 9309 8982 28890
- Reading: 1 Writing: 3 Waiting: 324
***行表示目前活躍的連接數(shù)
第三行的第三個(gè)數(shù)字表示Nginx運(yùn)行到當(dāng)前時(shí)間接受到的總請(qǐng)求數(shù),如果快達(dá)到了上限,就需要加大上限值了。
第四行是Nginx的隊(duì)列狀態(tài)
(2)負(fù)載均衡
- upstream backend
- {
- server 192.168.100.89:8080;
- server 192.168.100.90:8080;
- }
#p#
三、 配置NFS
需要安裝rpm包portmap、nfs,
- # vi /etc/export
- /var/www 192.168.100.89(rw,sync,no_root_squash),192.168.100.90(rw,sync,no_root_squash)
- # service portmap restart
- # service nfs start
- # exportfs -rv
重新輸出共享目錄,
# showmoun -e
查看本機(jī)共享的目錄
然后tomcat的兩臺(tái)服務(wù)器掛載,
# mount 192.168.100.88:/var/www /usr/local/tomcat/weapps
然后我們要在兩臺(tái)tomcat的配置文件中即server.xml中做虛擬主機(jī)要與nginx.conf里的一致才OK。
- # vi server.xml
- <Host name="www.syitren.com" debug="0" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
- <Context path="" docBase="/usr/local/tomcat/webapps/" debug="0" reloadable="true" crossContext="true"/>
- <Logger className="org.apache.catalina.logger.FileLogger" directory="logs" prefix="www.syitren.com_log." suffix=".txt"
- timestamp="true"/>
- </Host>
四、測(cè)試
寫了一個(gè)測(cè)試session的頁(yè),上傳到虛擬主機(jī)對(duì)應(yīng)的目錄。
(1)訪問(wèn)一次刷新一次再刷新發(fā)現(xiàn)時(shí)間每次都不一樣,就是來(lái)回出現(xiàn)兩臺(tái)tomcat的系統(tǒng)時(shí)間,說(shuō)明成功了。
(2)然后把其中的一臺(tái)tomcat停掉,這時(shí)我們?cè)偎⑿缕渲杏幸粋€(gè)就沒(méi)有響應(yīng)了,但過(guò)了一分鐘左右就是一臺(tái)機(jī)器提供服務(wù)了,說(shuō)明,nginx可以自動(dòng)把 down的服務(wù)器去除,從而使客戶端透明。
(3)然后再把停掉的tomcat服務(wù)器開(kāi)啟,過(guò)一段時(shí)間后,nginx服務(wù)器又把它加入調(diào)度行列。這都是自動(dòng)的。
本文原址連接:http://bbs.yahunet.com/thread-10029-1-1.html