Nginx+Tomcat 負載均衡集群
案例分析
通常情況下,一臺Tomcat站點由於可能出現單點故障及無法應對多客戶復雜多樣性的請求等問題,不能單獨應用於生產環境下,所以我們需要一套更可靠的解決方案來完善Web站點架構。
Nginx是一款非常優秀的http服務器軟件,他能夠支持最高達50000個並發連接數的響應,擁有強大的靜態 資源處理能力,運行穩定,並且內存、cpu等系統資源消耗非常低。目前很多大型網站都應用Nginx服務器作為後端網站程序的反向代理及負載均衡器,來提升站點的負載並發能力。
本案例我們以Nginx作為負載均衡器,Tomcat作為應用服務器的負載集群的設置方法。
準備:
環境:CentOS 6.5
關閉iptables防火墻
nginx-1.8.1.tar.gz
jdk-7u65-linux-x64.gz
apache-tomcat-7.0.54.tar.gz
安裝與配置
1.安裝與配置Tomcat服務
(1)在兩臺Tomcat服務器中安裝JDK和Tomcat構建Tomact服務
安裝方法參考:http://www.cnblogs.com/zhichaoma/p/7533398.html
(2).分別在兩臺Tomcat服務器上創建不同站點實例,以便測試
創建站點實例參考:http://www.cnblogs.com/zhichaoma/p/7533398.html
第一個Tomcat服務站點的測試頁面代碼為:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <html> <head> <title> JSP TEST 1 page </title> </head> <body> <% out.println("Welcome to test 1 site");%> </body>index.jsp</html>
第二個Tomcat服務站點的測試頁面代碼為:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <html> <head> <title> JSP TEST 2 page </title> </head> <body> <% out.println("Welcome to test 2 site");%> </body> </html>index.jsp
(3).分別測試兩個站點是否可以訪問
2. 安裝Nginx服務
(1)安裝nginx相關依賴包
yum -y install pcre-devel zlib-devel openssl-devel
(2)創建Nginx運行用戶
useradd -M -s /sbin/nologin nginx
(3)編譯並安裝Nginx
tar zxvf nginx-1.8.1.tar.gz -C /usr/src/ #解包 cd /usr/src/nginx-1.8.1/ ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-file-aio --with-http_stub_status_module --with-http_gzip_static_module --with-http_flv_moudle --with-http_ssl_module #配置 make && make install #編譯並且安裝
配置參數說明:
--user,--group:指定運行的用戶和組; --with-file-aio:啟用文件修改支持; --with-http_stub_status_module:啟用統計狀態; --with-http_gzip_static_module:啟用gzip靜態壓縮; --with-http_flv_moudle:啟用flv模塊,提供尋求內存使用基於時間的偏移量文件; --with-http_ssl_module:啟用SSL模塊配置參數說明
3.配置Nginx服務
修改Nginx配置文件 nginx.conf
//Nginx所用用戶和組,window下不指定 #user niumd niumd; //工作的子進程數量(通常等於CPU數量或者2倍於CPU) worker_processes 1; //錯誤日誌存放路徑 #error_log logs/error.log; #error_log logs/error.log notice; error_log logs/error.log info; //指定pid存放文件 pid logs/nginx.pid; events { //使用網絡IO模型linux建議epoll,FreeBSD建議采用kqueue,window下不指定。 #use epoll; //允許最大連接數 worker_connections 2048; } http { include 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 off; access_log logs/access.log; client_header_timeout 3m; client_body_timeout 3m; send_timeout 3m; client_header_buffer_size 1k; large_client_header_buffers 4 4k; sendfile on; tcp_nopush on; tcp_nodelay on; #keepalive_timeout 75 20; #include gzip.conf; //***增加 upstream tomcat_server{ //Nginx是如何實現負載均衡的,Nginx的upstream目前支持以下幾種方式的分配 //1、輪詢(默認) // 每個請求按時間順序逐一分配到不同的後端服務器,如果後端服務器down掉,能自動剔除。 //2、weight // 指定輪詢幾率,weight和訪問比率成正比,用於後端服務器性能不均的情況。 //3、ip_hash // 每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個後端服務器,可以解決session的問題。 //3、fair(第三方) // 按後端服務器的響應時間來分配請求,響應時間短的優先分配。 //4、url_hash(第三方) // 按訪問url的hash結果來分配請求,使每個url定向到同一個後端服務器,後端服務器為緩存時比較有效。 #ip_hash; //選擇算法,啟用ip_hash算法 //weigth參數表示權值,權值越高被分配到的幾率越大 server 192.168.10.101:8080 weight=1; //兩臺Tomcat服務器的ip+port server 192.168.10.102:8088 weihght=1; } server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { root html; index index.html index.htm; //***增加 proxy_connect_timeout 3; //nginx跟後端服務器連接超時時間(代理連接超時) proxy_send_timeout 30; //後端服務器數據回傳時間(代理發送超時) proxy_read_timeout 30; //連接成功後,後端服務器響應時間(代理接收超時) proxy_pass http://tomcat_server; //填寫定義的tomcat的列表名 #主要 } } }
4.測試Nginx配置文件是否正確
/usr/local/nginx/sbin/nginx -t
5.啟動Nginx
/usr/local/nginx/sbin/nginx
6.查看Nginx服務進程和 查看端口號及PID號
ps aux | grep nginx #查看Nginx進程服務 netstat -anpt | grep nginx #查看端口號及PID號
7.訪問Nginx服務器的IP地址驗證
Nginx+Tomcat 負載均衡集群