nginx+tomcat集群負載均衡(實現 session復制)關鍵字: nginx+tomcat集群負載均衡
Nginx+tomcat 做負載均衡 http://blog./u2/83793/showart_1354266.html 架構描述 前端一臺nginx服務器做負載均衡器,后端放N臺tomcat組成集群處理服務,通過nginx轉發到后面(注:沒做動靜分離,靜態動態全部都轉給tomcat) 優點:實現了可彈性化的架構,在壓力增大的時候可以臨時添加tomcat服務器添
加到這個架構里面去 一,配置nginx 1, 下載包 Wget http:///nginx/nginx-0.6.32.tar.gz ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/ 2, 安裝nginx包 a.安裝pcre tar zxvf pcre-7.2.tar.gz cd pcre ./configure --prefix
= /pcre Make;make
install b,安裝nginx tar zxvf
nginx-0.6.32.tar.gz cd nginx-0.6.32 ./configure --prefix=/nginx
–with-pcre=/pcre --with-http_rewrite_module Make;make install 3, 修改配置文件 Vi /nginx/conf/nginx.conf #用戶組 user nobody nobody; #cpu個數,可以按照實際服務器來計算 worker_processes 8; worker_rlimit_nofile 51200; events { use epoll; #連接數 worker_connections 8192 ; } http { include mime.types; default_type application/octet-stream; server_names_hash_bucket_size
128; # access_log off; # access_log logs/access.log; #緩存的時間,(可以根據不同文件設置不同時間) # expires 2h; tcp_nodelay on; keepalive_timeout 30; gzip on; gzip_min_length 10; gzip_buffers 4
8k; gzip_http_version 1.1; gzip_types text/plain
application/x-javascript text/css text/html application/xml; sendfile on; tcp_nopush on; reset_timedout_connection on; client_max_body_size 30m; #設定負載均衡列表 upstream backend { server 172.23.254.2:8080; server 172.23.254.3:8080; } #設定虛擬主機 server { listen 80; server_name www.; #對 / 所有做負載均衡 (本機nginx采
用完全轉發,所有請求都轉發到后端的tomcat集群) location / { root /web/www ; index index.jsp index.htm
index.html; proxy_redirect off; #保留用戶真實信息 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; } } } 主要在配置proxy與upstream Upstream具有負載均衡能力,可以自動判斷下面的機器,并且自動踢出不能正常提供服務的機器。 4,啟動程序 /nginx/sbin/nginx 5,編寫啟動腳本 Vi nginx.sh #!/bin/sh CWD=`pwd` 二,配置tomcat 1, 下載tomcat5.59 tar zxvf tomcat5.59 2,修改配置文件 a,配置數據源 b,優化tomcat最大并發數 <Connector
port="8080" maxHttpHeaderSize="8192" maxThreads="2048"
minSpareThreads="100" maxSpareThreads="200" enableLookups="false"
redirectPort="8443" acceptCount="500" connectionTimeout="20000"
disableUploadTimeout="true" /> c,添加虛擬主機 (注,主轉發的虛擬主機必須用localhost,否則nginx不能通過內網ip轉發,而只有通過域名轉發 d,測試 打開http://ip:8080 頁面能訪問則正常 2, 其他的tomcat服務器也用同樣的配置 三,做tomcat集群 兩臺機器 172.23.254.2 172.23.254.3 做集群需要修改的文件配置有三個地方 1,
修改conf/server.xml配置文件 b.找到Cluster標簽,去掉注釋,同時修改tcpListenAddress為本機ip
172.23.254.2 (注:這一段Cluster必須放在hosts里面) 2, 修
改應用的web.xml 修改web應用里面WEB-INF目錄下的web.xml文件,加入標簽 <distributable/> 直接加在</web-app>之
前就可以了 這個是加入tomcat的session復制的,做tomcat集群必須需要這一
步,否則用戶的session就無法正常使用。 3, 開
啟防火墻 這兩個tomcat之間必須開啟防火墻信
任。 分別啟動兩個tomcat,查看每一個tomcat是否都啟動了8080端口以及4001端口 再用netstat –an 查看鏈接情況 tcp 0 0
172.23.254.2:43320 172.23.254.3:4001 ESTABLISHED tcp 0 0
172.23.254.2:46544 172.23.254.3:4001 TIME_WAIT tcp 0 0
172.23.254.2:40118 172.23.254.3:4001 ESTABLISHED tcp 0 0
172.23.254.2:4001 172.23.254.3:48804 ESTABLISHED tcp 0 0
172.23.254.2:4001 172.23.254.3:34254 ESTABLISHED 如果兩臺機器的4001端口分別建立了連
接,則說明集群配置成功,可以進行session復制。 可能存在的問題 1, session復
制問題 以前用apache做負載均衡的時候,是選
擇了用 session sticky的模式,這樣的話,用戶每次進來都會是同一個服務器中的session,不會被轉發到其他的服務器上。在這樣的情況下,tomcat即
使不做session復制也不會影響用戶訪問。但是nginx并
不支持sticky功能。所以必須要做session復
制。否則很多地方就根本沒法用。比如登錄過程,先等到了第一個tomcat上,產生了一個session,在刷新頁面,刷到另外一個tomcat的
機器上,沒有這個session,就會出現問題了。所以程序員在寫jsp的時候也要注意這一點 舉個簡單的例子,比如我們在單機應用情況下修改SESSION中用戶的某一個數據,那么通常就是: 可能經常會遇到session復
制不正常的情況。除了在服務端找原因再也程序上找下原因。都是有可能導致session復制不正常
的 2.頁面同步 為確保后面tomcat的
服務器上的頁面程序是一致的,可以采用如下方式 a,rsync同步,或者做成頁面按鈕,提供給編輯,修改了程序即使點擊同步 b,共享區域存儲,或者采取drbd網
絡raid模式 3,確認nginx可以轉發成功, 在nginx上wget一下后面轉發的url(包過端口),如果可以打
開,那就可以轉發過去。如果不能打開,則無法轉發 |
|
來自: ShangShujie > 《資料》