LVS + keepalived + nginx + tomcat 實現主從熱備 + 負載均衡
前言
首先宣告下,由於這兩天找資料,看了不少部落格 ,但是出於不細心,參考者的部落格地址沒有記錄下來,所有文中要是出現了與大家部落格相同的地方,那麼請大家在評論區說明並附上部落格地址,我好引用進來;這裡表示抱歉了!
另外,本文是在我的另一篇部落格主從熱備+負載均衡(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要啟動)
2.最終效果展示 ----》 所有web伺服器啟動realserver服務:service realserver start;啟動tomcat;啟動nginx;
----》 主從負載伺服器啟動keepalived服務:service keepalived start;
總結
兩篇部落格主從熱備是一樣的,都實現了,這篇部落格我也就沒演示效果了;但是負載均衡效果卻有不同,之前的是一段時間內的請求由同一realserver處理,而這次是每一次請求處理的realserver都不同,有些許差別,但是總體效果是一樣的,都能達到最終目的!
由於只是在之前的基礎上引入了nginx,所以很多效果都沒演示了,大家有時間可以自己去實踐,也最好是自己去實踐,每個人遇到的問題都會不同,得出的結果也會不同!
後話
這篇部落格其實早就著手準備,但是由於種種原因,一直沒能實踐完,也沒敢寫上來,一直推遲到今天才更新上來,這裡對期待的小夥伴們說聲抱歉了!
另外,加入nginx後的一些測試,比如某臺web伺服器的宕機、某臺負載伺服器的宕機,我就沒有測試了,希望各位小夥伴能測試完(我只是理論上的認為是和之前的一樣,是能正常服務的)!