LVS + keepalived + nginx + tomcat 實現主從熱備 + 負載均衡

jopen 8年前發布 | 21K 次閱讀 Web服務器 keepalived

前言

首先聲明下,由于這兩天找資料,看了不少博客 ,但是出于不細心,參考者的博客地址沒有記錄下來,所有文中要是出現了與大家博客相同的地方,那么請大家在評論區說明并附上博客地址,我好引用進來;這里表示抱歉了!

另外,本文是在我的另一篇博客 主從熱備+負載均衡(LVS + keepalived) 的基礎上進行的,如果沒有看過,那么最好去看下,不然本篇文章看起來有點費勁哦!

LVS提供虛擬服務;nginx作為反向代理服務器來實現負載均衡;keepalived實現主從熱備,檢查RealServer的健康狀態以及主機與備機之間失效轉移

環境準備與配置

VIP(Virtual IP)為192.168.1.200,用戶只需要訪問這個IP地址即可獲得網頁服務

負載均衡主機為192.168.1.114(master) ----》keepalived

備機為 192.168.1.112(brucelee) ----》keepalived

Web服務器A為192.168.1.111(youzhibing) ----》realserver + nginx + tomcat

Web服務器B為 192.168.1.115(youzhibing03) ----》realserver + nginx + tomcat

現在缺的就是在web服務器上配置nginx了。

1.nginx壓縮文件解壓 (192.168.1.111安裝nginx服務)

準備nginx-1.8.0.tar.gz,并解壓到當前目錄,命令tar -zxf nginx-1.8.0.tar.gz

2.nginx依賴包安裝

nginx安裝有環境要求 ,nginx依賴下面3個包

a. gzip 模塊需要 zlib 庫 ( 下載: http://www.zlib.net/ )

b. rewrite 模塊需要 pcre 庫 ( 下載: http://www.pcre.org/ )

c. ssl 功能需要 openssl 庫 ( 下載: http://www.openssl.org/ )

這里我就不用源碼包方式來安裝了,直接一鍵式安裝:yum -y install zlib zlib-devel openssl openssl--devel pcre pcre-devel

3.nginx安裝

cd nginx-1.8.0

./configure --prefix=/usr/local/nginx

make

make install

安裝完成之后,檢查nginx的配置文件是否正確

cd /usr/local/nginx/sbin

./nginx -t

說明配置文件正確,那么nginx安裝成功!

4.啟動nginx

cd /usr/local/nginx/sbin

./nginx

nginx啟動成功!

5.配置nginx

a. cd /usr/local/nginx/conf,新建proxy.conf,進行代理配置,內容如下:

# proxy.conf
proxy_redirect        off;
proxy_set_header    Host $host;
proxy_set_header    X-Real-IP $remote_addr;
client_max_body_size      10m;
client_body_buffer_size   128k;
proxy_connect_timeout     90;
proxy_send_timeout        90;
proxy_read_timeout        90;
proxy_buffer_size         4k;
proxy_buffers             4 32k;
proxy_busy_buffers_size   64k;
proxy_temp_file_write_size 64k;

b. 配置nginx.conf,相關注釋已經寫明,大家看仔細:

user  root;            #運行用戶
worker_processes  1;        #啟動進程,通常設置成和cpu的數量相等

#全局錯誤日志及PID文件
error_log  /usr/local/nginx/logs/error.log;
error_log  /usr/local/nginx/logs/error.log  notice;
error_log  /usr/local/nginx/logs/error.log  info;
pid        /usr/local/nginx/logs/nginx.pid;

# 工作模式及連接數上線
events {
    use epoll;            #epoll是多路復用IO(I/O Multiplexing)中的一種方式,但是僅用于linux2.6以上內核,可以大大提高nginx的性能

    worker_connections  1024;    #單個后臺worker process進程的最大并發鏈接數
}

#設定http服務器,利用它的反向代理功能提供負載均衡支持
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  logs/access.log  main;

    #設定請求緩沖
    server_names_hash_bucket_size  128;
    client_header_buffer_size   32K;
    large_client_header_buffers  4 32k;
    # client_max_body_size   8m;

    #sendfile 指令指定 nginx 是否調用 sendfile 函數(zero copy 方式)來輸出文件,對于普通應用,
    #必須設為 on,如果用來進行下載等應用磁盤IO重負載應用,可設置為 off,以平衡磁盤與網絡I/O處理速度,降低系統的uptime.
    sendfile        on;
    tcp_nopush     on;
    tcp_nodelay    on;

    #連接超時時間
    #keepalive_timeout  0;
    keepalive_timeout  65;

    #開啟gzip壓縮,降低傳輸流量
    gzip  on;
    gzip_min_length    1k;
    gzip_buffers    4 16k;
    gzip_http_version  1.1;
    gzip_comp_level  2;
    gzip_types  text/plain application/x-javascript text/css  application/xml;
    gzip_vary on;

    #添加tomcat列表,負載均衡的服務器都放在這
    upstream tomcat_pool {
        #server tomcat地址:端口號 weight表示權值,權值越大,被分配的幾率越大;
        server 192.168.1.111:8080 weight=4 max_fails=2 fail_timeout=30s;
            server 192.168.1.115:8080 weight=4 max_fails=2 fail_timeout=30s;
    }

    server {
        listen       80;        #監聽端口    
        server_name  192.168.1.200; #對外提供服務的網址(域名或者ip)

    #默認請求設置
    location / {
        index index.jsp index.html index.htm;   #設定訪問的默認首頁
        root /usr/local/apache7/webapps;    #站點根目錄,此目錄下存放我們的web項目
    }

    #charset koi8-r;

        #access_log  logs/host.access.log  main;


    #所有的jsp頁面均由tomcat處理
    location ~ \.(jsp|jspx|dp)?$
    {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_pass http://tomcat_pool;    #轉向tomcat處理
    }

    #所有的靜態文件直接讀取不經過tomcat,nginx自己處理
    location ~ .*\.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ 
    { 
        expires  30d;
    }
        location ~ .*\.(js|css)?$
        {
               expires  1h;
        }
        #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  /usr/local/nginx/logs/ubitechtest.log access;#設定訪問日志的存放路徑     

        # redirect server error pages to the static page /50x.html
        #

    #定義錯誤提示頁面
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

    }
}

配置完成后,重啟nginx

cd /usr/local/nginx/sbin

./nginx -s reload

6.配置192.168.1.115上的nginx

配置過程與之前一樣,只是要注意nginx.conf中的默認請求,如若web服務器上的tomcat配置都一模一樣,那么nginx的配置文件也就一樣了,但是我的tomcat配置有點不一樣,所以nginx.conf也有些許不一樣,改動如下就可以了。

        #默認請求設置
    location / {
        index index.jsp index.html index.htm;   #設定訪問的默認首頁
        root /usr/share/tomcat7/webapps;    #站點根目錄,此目錄下存放我們的web項目
    }

7.主從負載服務器keepalived配置

本來是不要修改的,但是這次我用的是VIP的80端口,需要將之前的8080端口改成80端口,所有的主從負載服務器都要改正確!

結果展示

1.nginx負載均衡效果(tomcat要啟動)

LVS + keepalived + nginx + tomcat 實現主從熱備 + 負載均衡

LVS + keepalived + nginx + tomcat 實現主從熱備 + 負載均衡

2.最終效果展示 ----》 所有web服務器啟動realserver服務:service realserver start;啟動tomcat;啟動nginx;

----》 主從負載服務器啟動keepalived服務:service keepalived start;

LVS + keepalived + nginx + tomcat 實現主從熱備 + 負載均衡

總結

兩篇博客主從熱備是一樣的,都實現了,這篇博客我也就沒演示效果了;但是負載均衡效果卻有不同,之前的是一段時間內的請求由同一realserver處理,而這次是每一次請求處理的realserver都不同,有些許差別,但是總體效果是一樣的,都能達到最終目的!

由于只是在之前的基礎上引入了nginx,所以很多效果都沒演示了,大家有時間可以自己去實踐,也最好是自己去實踐,每個人遇到的問題都會不同,得出的結果也會不同!

后話

這篇博客其實早就著手準備,但是由于種種原因,一直沒能實踐完,也沒敢寫上來,一直推遲到今天才更新上來,這里對期待的小伙伴們說聲抱歉了!

另外,加入nginx后的一些測試,比如某臺web服務器的宕機、某臺負載服務器的宕機,我就沒有測試了,希望各位小伙伴能測試完(我只是理論上的認為是和之前的一樣,是能正常服務的)!

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!