1. 程式人生 > 其它 >從零開始搭建Nginx和Tomcat的web叢集環境

從零開始搭建Nginx和Tomcat的web叢集環境

一直以來對於web伺服器對tomcat還是很熟悉了,但是很對於nginx還是有些陌生,一看到nginx的配置就讓人有一種莫名的排斥,這就是對於陌生的恐懼,我們今天玩個有意思的,我從不瞭解nginx,到nginx和tomcat搭建叢集,大概在不到一個小時內完成。

看看我這一個小時的學習成果,說不上對你有幫助。

首先nginx是出自俄羅斯的一款輕量級web伺服器,開源免費,而且至簡。

它的網站是這個:http://nginx.org/en/download.html

下載的版本目前有三類,比較容易理解,一個是目前的開發版本(Mainline version),第二類是穩定的最新版,比如目前最新的是1.12.2的版本,有原始碼包和windows版本。第三類算是懷舊穩定版,不一定線上的環境都是最新的,也考慮了相容性,算是比較貼心吧。

說nginx至簡,一個原因就是這個安裝包確實夠小,壓縮版本不到1M,而解壓後的版本也大概在7M左右。

[root@localhost nginx]# ll total 960 -rw-r--r--. 1 root root 981687 Oct 18 13:14 nginx-1.12.2.tar.gz

安裝nginx還是比較簡便的,configure,make ,make install,需要注意的是安裝是需要幾個依賴包的,比如zlib,PCRE的庫,可以提前檢查下。

# rpm -qa|grep zlib zlib-1.2.3-29.el6.x86_64 zlib-devel-1.2.3-29.el6.x86_64

PCRE的庫需要的是pcre-devel,配置了yum源使用yum -y install pcre-devel即可搞定。

# rpm -qa|grep pcre pcre-devel-7.8-7.el6.x86_64 pcre-7.8-7.el6.x86_64 小結下安裝的三個步驟:

  1. ./configure --prefix=/usr/local/nginx
  2. make
  3. make install

如果需要編輯ssl額外加個選項。

nginx的啟動確實很簡單,直接使用nginx命令即可啟動,預設是使用80埠,很快就能看到一個歡迎頁面。

當然我們可以通過fuser來檢驗80埠的情況,或者檢測80埠是否被佔用:

# fuser -n tcp 80 80/tcp: 21412 21413

或者是:

# netstat -pan | grep -w 80
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      21412/nginx         
tcp        0      0 127.0.0.1:80                127.0.0.1:49593             TIME_WAIT   -                   
tcp        0      0 192.168.253.219:57492       23.32.3.248:80              ESTABLISHED 21590/clock-applet  
tcp        0      0 192.168.253.219:51678       60.221.218.180:80           TIME_WAIT   -                   
tcp        1      0 ::ffff:192.168.253.21:39646 ::ffff:104.25.106.17:80     CLOSE_WAIT  12329/java          
tcp        1      0 ::ffff:192.168.253.21:37445 ::ffff:104.25.107.17:80     CLOSE_WAIT  12329/java

如果檢視nginx相關的程序,會發現有個master,有個worker的程序。

# ps -ef|grep nginx
root     21412     1  0 22:39 ?        00:00:00 nginx: master process ./nginx
nobody   21413 21412  0 22:39 ?        00:00:00 nginx: worker process
root     21719 15134  0 22:43 pts/3    00:00:00 grep nginx

這個部分怎麼理解,可以通過nginx的配置檔案就能容易理解了。在nginx.conf檔案中,開頭就是如下的兩行。可以很明顯看出worker程序有1個,配置了nobody,所以你看到的worker程序的屬主就是nobody

#user nobody; worker_processes 1;

這個是nginx的架構。他是使用epoll的方式。

nginx的命令幾乎都不需要你重新去學習,直接使用-h就得到了幫助命令。所以我們很容易就會發現:./nginx -s stop 是停止的命令,啟用配置檔案使用-c選項。

在nginx所在的sbin目錄下,一個完整的啟動命令即為:

./nginx -c /usr/local/nginx/conf/nginx.conf

然後我們看看和tomcat怎麼結合,nginx常用來做http伺服器,反向代理,郵件伺服器等。也是做負載均衡的一種很自然的方案。我們來簡單模擬一下。

比如當前後端的伺服器是tomcat,如果要實現負載均衡,通過nginx來轉發就是一件很自然的事情,如果其中的一個tomcat出現問題,那也可以很方便的滿足容錯性。

為此我們需要配置若干個tomcat服務來模擬一下,比如我們使用3個tomcat。

drwxr-xr-x. 9 root root    4096 Jan  3 23:14 tomcat1
drwxr-xr-x. 9 root root    4096 Jan  3 23:14 tomcat2
drwxr-xr-x. 9 root root    4096 Jan  3 23:14 tomcat3

預設埠為8080,我們簡單包裝,三個tomcat的埠即為:

18080

28080

38080

修改tomcat的配置檔案server.xml就需要注意以下幾個地方的埠設定,分別為:

tomcat1:

<Server port="18005" shutdown="SHUTDOWN"> <Connector port="18080" protocol="HTTP/1.1" <Connector port="18009" protocol="AJP/1.3" redirectPort="8443" />

tomcat2:

<Server port="28005" shutdown="SHUTDOWN"> <Connector port="28080" protocol="HTTP/1.1" <Connector port="28009" protocol="AJP/1.3" redirectPort="8443" />

tomcat3:

<Server port="38005" shutdown="SHUTDOWN"> <Connector port="38080" protocol="HTTP/1.1" <Connector port="38009" protocol="AJP/1.3" redirectPort="8443" />

然後啟動做簡單的驗證:能看到小貓即可。

為了區別起見,我們可以在webapps/ROOT/index.jsp裡面分別表示tomcat1,tomcat2,tomcat3這樣後面做轉發就知道是到達了哪個tomcat了。

此時的tomcat是可以了,我們配置Nginx.

nginx的配置核心就是nginx.conf了。

注意紅色的部分配置:

   #gzip  on;
    upstream  jeanron100.com {  
        server    127.0.0.1:18080  weight=1;
        server    127.0.0.1:28080  weight=2;  
        server    127.0.0.1:38080  weight=3;  
    }     

    server {
        listen       80;
        server_name  localhost;
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
        #location / {
        #    root   html;
        #    index  index.html index.htm;
        #}
        location / {
 proxy_pass  http://jeanron100.com;
            proxy_redirect default;
        }

然後啟動nginx,使用命令:

./nginx -c /usr/local/nginx/conf/nginx.conf

然後在瀏覽器中輸入IP和頁面的名字。可以看到這個時候已經開始做了轉發,現在調到了tomcat2上。

繼續重新整理,現在跳到了tomcat3上面。

不斷的重新整理,tomcat和nginx是對映起來了。