重慶分公司,新征程啟航
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊、服務(wù)器等服務(wù)
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊、服務(wù)器等服務(wù)
下文給大家?guī)硎褂眉菏蔷W(wǎng)站解決高并發(fā)、海量數(shù)據(jù)問題的常用手段解答,希望能夠給大家在實際運用中帶來一定的幫助,負(fù)載均衡涉及的東西比較多,理論也不多,網(wǎng)上有很多書籍,今天我們就用創(chuàng)新互聯(lián)在行業(yè)內(nèi)累計的經(jīng)驗來做一個解答。
前言
使用集群是網(wǎng)站解決高并發(fā)、海量數(shù)據(jù)問題的常用手段。當(dāng)一臺云服務(wù)器的處理能力、存儲空間不足時,不要企圖去換更強大的服務(wù)器,對大型網(wǎng)站而言,不管多么強大的服務(wù)器,都滿足不了網(wǎng)站持續(xù)增長的業(yè)務(wù)需求。這種情況下,更恰當(dāng)?shù)淖龇ㄊ窃黾右慌_服務(wù)器分擔(dān)原有服務(wù)器的訪問及存儲壓力。通過負(fù)載均衡調(diào)度服務(wù)器,將來自瀏覽器的訪問請求分發(fā)到應(yīng)用服務(wù)器集群中的任何一臺服務(wù)器上,如果有更多的用戶,就在集群中加入更多的應(yīng)用服務(wù)器,使應(yīng)用云服務(wù)器的負(fù)載壓力不再成為整個網(wǎng)站的瓶頸。
環(huán)境準(zhǔn)備
192.168.0.221:nginx + keepalived master
192.168.0.222:nginx + keepalived backup
192.168.0.223:tomcat
192.168.0.224:tomcat
虛擬ip(VIP):192.168.0.200,對外提供服務(wù)的ip,也可稱作浮動ip
各個組件之間的關(guān)系圖如下:
tomcat做應(yīng)用服務(wù)器
tomcat的安裝不在本博客范圍之內(nèi),具體可參考virtualBox安裝centos,并搭建tomcat,tomcat的webapps下記得放自己的應(yīng)用,我的是myWeb,如果大家也用我的myWeb,那么index.jsp中的ip需要換成自己的
將192.168.0.223、192.168.0.224上的tomcat啟動起來,tomcat的路徑可能和我的不一致,需要寫成自己的
# cd /usr/local/tomcat7/bin
# ./startup.sh
訪問myWeb如下
nginx做負(fù)載均衡
nginx的安裝,本文就不講述了,具體可參考LVS + keepalived + nginx + tomcat 實現(xiàn)主從熱備 + 負(fù)載均衡
nginx.conf內(nèi)容如下
復(fù)制代碼
user root; #運行用戶
worker_processes 1; #啟動進程,通常設(shè)置成和cpu的數(shù)量相等
#全局錯誤日志及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是多路復(fù)用IO(I/O Multiplexing)中的一種方式,但是僅用于linux2.6以上內(nèi)核,可以大大提高nginx的性能
worker_connections 1024; #單個后臺worker process進程的大并發(fā)鏈接數(shù)
}
#設(shè)定http服務(wù)器,利用它的反向代理功能提供負(fù)載均衡支持
http
{
include mime.types;
default_type application/octet-stream;
#設(shè)定請求緩沖
server_names_hash_bucket_size 128;
client_header_buffer_size 32K;
large_client_header_buffers 4 32k;
# client_max_body_size 8m;
#sendfile 指令指定 nginx 是否調(diào)用 sendfile 函數(shù)(zero copy 方式)來輸出文件,對于普通應(yīng)用,
#必須設(shè)為 on,如果用來進行下載等應(yīng)用磁盤IO重負(fù)載應(yīng)用,可設(shè)置為 off,以平衡磁盤與網(wǎng)絡(luò)I/O處理速度,降低系統(tǒng)的uptime.
sendfile on;
tcp_nopush on;
tcp_nodelay on;
#連接超時時間
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列表,真實應(yīng)用服務(wù)器都放在這
upstream tomcat_pool
{
#server tomcat地址:端口號 weight表示權(quán)值,權(quán)值越大,被分配的幾率越大;
server 192.168.0.223:8080 weight=4 max_fails=2 fail_timeout=30s;
server 192.168.0.224:8080 weight=4 max_fails=2 fail_timeout=30s;
}
server
{
listen 80; #監(jiān)聽端口
server_name localhost;
#默認(rèn)請求設(shè)置
location / {
proxy_pass http://tomcat_pool; #轉(zhuǎn)向tomcat處理
}
#所有的jsp頁面均由tomcat處理
location ~ \.(jsp|jspx|dp)?$
{
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://tomcat_pool; #轉(zhuǎn)向tomcat處理
}
#所有的靜態(tài)文件直接讀取不經(jīng)過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;
}
#定義錯誤提示頁面
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
復(fù)制代碼
主從nginx的配置文件完全一樣,nginx.conf配置可復(fù)雜可簡單,大家根據(jù)自己的情況自行配置,照搬上述配置也是可以的。
配置好后,啟動nginx,路徑要寫自己的
# cd /usr/local/nginx/sbin
# ./nginx
訪問nginx,效果如下:
兩臺nginx服務(wù)器服務(wù)正常,此時是沒有主從之分的,兩者級別一樣高,當(dāng)配置keepalived之后就有了主從之分了。
keepalived實現(xiàn)nginx高可用(HA)
keepalived的安裝本文就不講述了,具體可參考主從熱備+負(fù)載均衡(LVS + keepalived)
keepalived作用其實在第一張圖中已經(jīng)有所體現(xiàn),主要起到兩個作用:實現(xiàn)VIP到本地ip的映射; 以及檢測nginx狀態(tài)。
master上的keepalived.conf內(nèi)容如下:
復(fù)制代碼
global_defs {
notification_email {997914490@qq.com
br/>997914490@qq.com
notification_email_from sns-lvs@gmail.com
smtp_server smtp.hysec.com
smtp_connection_timeout 30
router_id nginx_backup # 設(shè)置nginx backup的id,在一個網(wǎng)絡(luò)應(yīng)該是唯一的
}
vrrp_script chk_http_port {
script "/usr/local/src/check_nginx_pid.sh"
interval 2 #(檢測腳本執(zhí)行的間隔)
weight 2
}
vrrp_instance VI_1 {
state BACKUP # 指定keepalived的角色,MASTER為主,BACKUP為備
interface eth0 # 當(dāng)前進行vrrp通訊的網(wǎng)絡(luò)接口卡(當(dāng)前centos的網(wǎng)卡)
virtual_router_id 66 # 虛擬路由編號,主從要一直
priority 99 # 優(yōu)先級,數(shù)值越大,獲取處理請求的優(yōu)先級越高
advert_int 1 # 檢查間隔,默認(rèn)為1s(vrrp組播周期秒數(shù))
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_http_port #(調(diào)用檢測腳本)
}
virtual_ipaddress {
192.168.0.200 # 定義虛擬ip(VIP),可多設(shè),每行一個
}
}
復(fù)制代碼
nginx檢測腳本check_nginx_pid.sh內(nèi)容如下:
復(fù)制代碼
#!/bin/bash
A=ps -C nginx --no-header |wc -l
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx #重啟nginx
if [ ps -C nginx --no-header |wc -l
-eq 0 ];then #nginx重啟失敗,則停掉keepalived服務(wù),進行VIP轉(zhuǎn)移
killall keepalived
fi
fi
復(fù)制代碼
啟動keepalived
# service keepalived start
訪問VIP,效果如下:
我們來看下keepalived的日志信息
master(192.168.0.221):
backup(192.168.0.222):
當(dāng)我們把master上的keepalived停掉(模擬宕機),再來看下keepalived日志
原master(192.168.0.221):
原backup(192.168.0.222):
通過VIP可以正常訪問服務(wù),前端請求感受不到后端nginx的切換;重新喚醒原master(192.168.0.221)的測試這里就不進行了,大家自行測試
注意點
1、執(zhí)行腳本時報錯:/bin/sh^M: bad interpreter: 沒有那個文件或目錄
因為操作系統(tǒng)是windows,我在windows下編輯的腳本,所以有可能有不可見字符。腳本文件是DOS格式的, 即每一行的行尾以回車符和換行符來標(biāo)識, 其ASCII碼分別是0x0D, 0x0A。可以有很多種辦法看這個文件是DOS格式的還是UNIX格式的, 還是MAC格式的
解決方法:
vim filename
:set ff? #可以看到dos或unix的字樣. 如果的確是dos格式的。
:set ff=unix #把它強制為unix格式的, 然后存盤退出。
再次運行腳本。
從windows編輯文件再拷貝到linux時要特別注意,另外,腳本需要賦予可執(zhí)行權(quán)限才能執(zhí)行,可執(zhí)行文件的一種直觀表現(xiàn)就是文件本身呈綠色。
2、負(fù)載均衡最好進行多瀏覽器測試,有些瀏覽器會緩存,會產(chǎn)生沒有負(fù)載均衡的效果,例如我這次測試中谷歌瀏覽器就出現(xiàn)了類似的情況(還沒搞清楚是否是緩存的原因),火狐,360、IE瀏覽器都是正常的負(fù)載均衡效果。
3、請求走向
訪問虛擬IP(VIP),keepalived將請求映射到本地nginx,nginx將請求轉(zhuǎn)發(fā)至tomcat,例如:
keepalived服務(wù)器的ip情況
VIP總會在keepalived服務(wù)器中的某一臺上,也只會在其中的某一臺上;VIP綁定的服務(wù)器上的nginx就是master,當(dāng)VIP所在的服務(wù)器宕機了,keepalived會將VIP轉(zhuǎn)移到backup上,并將backup提升為master。
4、VIP也稱浮動ip,是公網(wǎng)ip,與域名進行映射,對外提供服務(wù); 其他ip一般而言都是內(nèi)網(wǎng)ip, 外部是直接訪問不了的
看了以上關(guān)于使用集群是網(wǎng)站解決高并發(fā)、海量數(shù)據(jù)問題的常用手段,如果大家還有什么地方需要了解的可以在創(chuàng)新互聯(lián)行業(yè)資訊里查找自己感興趣的或者找我們的專業(yè)技術(shù)工程師解答的,創(chuàng)新互聯(lián)技術(shù)工程師在行業(yè)內(nèi)擁有十幾年的經(jīng)驗了。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。