溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

為什么說(shuō)使用集群是網(wǎng)站解決高并發(fā)、海量數(shù)據(jù)問(wèn)題的常用手段

發(fā)布時(shí)間:2020-04-17 13:55:33 來(lái)源:億速云 閱讀:510 作者:三月 欄目:系統(tǒng)運(yùn)維

下文給大家?guī)?lái)使用集群是網(wǎng)站解決高并發(fā)、海量數(shù)據(jù)問(wèn)題的常用手段解答,希望能夠給大家在實(shí)際運(yùn)用中帶來(lái)一定的幫助,負(fù)載均衡涉及的東西比較多,理論也不多,網(wǎng)上有很多書(shū)籍,今天我們就用億速云在行業(yè)內(nèi)累計(jì)的經(jīng)驗(yàn)來(lái)做一個(gè)解答。

前言

  使用集群是網(wǎng)站解決高并發(fā)、海量數(shù)據(jù)問(wèn)題的常用手段。當(dāng)一臺(tái)云服務(wù)器的處理能力、存儲(chǔ)空間不足時(shí),不要企圖去換更強(qiáng)大的服務(wù)器,對(duì)大型網(wǎng)站而言,不管多么強(qiáng)大的服務(wù)器,都滿(mǎn)足不了網(wǎng)站持續(xù)增長(zhǎng)的業(yè)務(wù)需求。這種情況下,更恰當(dāng)?shù)淖龇ㄊ窃黾右慌_(tái)服務(wù)器分擔(dān)原有服務(wù)器的訪(fǎng)問(wèn)及存儲(chǔ)壓力。通過(guò)負(fù)載均衡調(diào)度服務(wù)器,將來(lái)自瀏覽器的訪(fǎng)問(wèn)請(qǐng)求分發(fā)到應(yīng)用服務(wù)器集群中的任何一臺(tái)服務(wù)器上,如果有更多的用戶(hù),就在集群中加入更多的應(yīng)用服務(wù)器,使應(yīng)用云服務(wù)器的負(fù)載壓力不再成為整個(gè)網(wǎng)站的瓶頸。

為什么說(shuō)使用集群是網(wǎng)站解決高并發(fā)、海量數(shù)據(jù)問(wèn)題的常用手段

環(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,對(duì)外提供服務(wù)的ip,也可稱(chēng)作浮動(dòng)ip

  各個(gè)組件之間的關(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啟動(dòng)起來(lái),tomcat的路徑可能和我的不一致,需要寫(xiě)成自己的

  # cd /usr/local/tomcat7/bin

  # ./startup.sh

  訪(fǎng)問(wèn)myWeb如下

  
nginx做負(fù)載均衡

  nginx的安裝,本文就不講述了,具體可參考LVS + keepalived + nginx + tomcat 實(shí)現(xiàn)主從熱備 + 負(fù)載均衡

  nginx.conf內(nèi)容如下

復(fù)制代碼

user  root;            #運(yùn)行用戶(hù)
worker_processes  1;        #啟動(dòng)進(jìn)程,通常設(shè)置成和cpu的數(shù)量相等

#全局錯(cuò)誤日志及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;

工作模式及連接數(shù)上線(xiàn)


events
{
use epoll;            #epoll是多路復(fù)用IO(I/O Multiplexing)中的一種方式,但是僅用于linux2.6以上內(nèi)核,可以大大提高nginx的性能

worker_connections  1024;    #單個(gè)后臺(tái)worker process進(jìn)程的最大并發(fā)鏈接數(shù)

}

#設(shè)定http服務(wù)器,利用它的反向代理功能提供負(fù)載均衡支持
http
{
include       mime.types;
default_type  application/octet-stream;

#設(shè)定請(qǐng)求緩沖
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 方式)來(lái)輸出文件,對(duì)于普通應(yīng)用,
#必須設(shè)為 on,如果用來(lái)進(jìn)行下載等應(yīng)用磁盤(pán)IO重負(fù)載應(yīng)用,可設(shè)置為 off,以平衡磁盤(pán)與網(wǎng)絡(luò)I/O處理速度,降低系統(tǒng)的uptime.
sendfile        on;
tcp_nopush     on;
tcp_nodelay    on;

#連接超時(shí)時(shí)間
keepalive_timeout  65;

#開(kāi)啟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列表,真實(shí)應(yīng)用服務(wù)器都放在這
upstream tomcat_pool 
{
   #server tomcat地址:端口號(hào) 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)聽(tīng)端口    
    server_name  localhost;

#默認(rèn)請(qǐng)求設(shè)置
location / {
    proxy_pass http://tomcat_pool;    #轉(zhuǎn)向tomcat處理
}

#所有的jsp頁(yè)面均由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)過(guò)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;
}

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

}

}

復(fù)制代碼

為什么說(shuō)使用集群是網(wǎng)站解決高并發(fā)、海量數(shù)據(jù)問(wèn)題的常用手段

  主從nginx的配置文件完全一樣,nginx.conf配置可復(fù)雜可簡(jiǎn)單,大家根據(jù)自己的情況自行配置,照搬上述配置也是可以的。

  配置好后,啟動(dòng)nginx,路徑要寫(xiě)自己的

  # cd /usr/local/nginx/sbin

  # ./nginx

  訪(fǎng)問(wèn)nginx,效果如下:

  兩臺(tái)nginx服務(wù)器服務(wù)正常,此時(shí)是沒(méi)有主從之分的,兩者級(jí)別一樣高,當(dāng)配置keepalived之后就有了主從之分了。
keepalived實(shí)現(xiàn)nginx高可用(HA)

  keepalived的安裝本文就不講述了,具體可參考主從熱備+負(fù)載均衡(LVS + keepalived)

  keepalived作用其實(shí)在第一張圖中已經(jīng)有所體現(xiàn),主要起到兩個(gè)作用:實(shí)現(xiàn)VIP到本地ip的映射; 以及檢測(cè)nginx狀態(tài)。

  master上的keepalived.conf內(nèi)容如下:

復(fù)制代碼

global_defs {
notification_email {997914490@qq.com
br/>997914490@qq.com<br/}
notification_email_from sns-lvs@gmail.com
smtp_server smtp.hysec.com
smtp_connection_timeout 30
router_id nginx_backup              # 設(shè)置nginx backup的id,在一個(gè)網(wǎng)絡(luò)應(yīng)該是唯一的
}
vrrp_script chk_http_port {
script "/usr/local/src/check_nginx_pid.sh"
interval 2                          #(檢測(cè)腳本執(zhí)行的間隔)
weight 2
}
vrrp_instance VI_1 {
state BACKUP                        # 指定keepalived的角色,MASTER為主,BACKUP為備
interface eth0                      # 當(dāng)前進(jìn)行vrrp通訊的網(wǎng)絡(luò)接口卡(當(dāng)前centos的網(wǎng)卡)
virtual_router_id 66                # 虛擬路由編號(hào),主從要一直
priority 99                         # 優(yōu)先級(jí),數(shù)值越大,獲取處理請(qǐng)求的優(yōu)先級(jí)越高
advert_int 1                        # 檢查間隔,默認(rèn)為1s(vrrp組播周期秒數(shù))
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_http_port                   #(調(diào)用檢測(cè)腳本)
}
virtual_ipaddress {
192.168.0.200                   # 定義虛擬ip(VIP),可多設(shè),每行一個(gè)
}
}

復(fù)制代碼

  nginx檢測(cè)腳本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ù),進(jìn)行VIP轉(zhuǎn)移
killall keepalived                    
fi
fi

復(fù)制代碼

  啟動(dòng)keepalived

  # service keepalived start

  訪(fǎng)問(wèn)VIP,效果如下:

  我們來(lái)看下keepalived的日志信息

    master(192.168.0.221):

    

    backup(192.168.0.222):

    

    當(dāng)我們把master上的keepalived停掉(模擬宕機(jī)),再來(lái)看下keepalived日志

    原master(192.168.0.221):

    

    原backup(192.168.0.222):

    

    通過(guò)VIP可以正常訪(fǎng)問(wèn)服務(wù),前端請(qǐng)求感受不到后端nginx的切換;重新喚醒原master(192.168.0.221)的測(cè)試這里就不進(jìn)行了,大家自行測(cè)試
注意點(diǎn)

  1、執(zhí)行腳本時(shí)報(bào)錯(cuò):/bin/sh^M: bad interpreter: 沒(méi)有那個(gè)文件或目錄

    因?yàn)椴僮飨到y(tǒng)是windows,我在windows下編輯的腳本,所以有可能有不可見(jiàn)字符。腳本文件是DOS格式的, 即每一行的行尾以回車(chē)符和換行符來(lái)標(biāo)識(shí), 其ASCII碼分別是0x0D, 0x0A??梢杂泻芏喾N辦法看這個(gè)文件是DOS格式的還是UNIX格式的, 還是MAC格式的

    解決方法:

      vim filename

      :set ff? #可以看到dos或unix的字樣. 如果的確是dos格式的。

      :set ff=unix #把它強(qiáng)制為unix格式的, 然后存盤(pán)退出。

      再次運(yùn)行腳本。

    從windows編輯文件再拷貝到linux時(shí)要特別注意,另外,腳本需要賦予可執(zhí)行權(quán)限才能執(zhí)行,可執(zhí)行文件的一種直觀表現(xiàn)就是文件本身呈綠色。

  2、負(fù)載均衡最好進(jìn)行多瀏覽器測(cè)試,有些瀏覽器會(huì)緩存,會(huì)產(chǎn)生沒(méi)有負(fù)載均衡的效果,例如我這次測(cè)試中谷歌瀏覽器就出現(xiàn)了類(lèi)似的情況(還沒(méi)搞清楚是否是緩存的原因),火狐,360、IE瀏覽器都是正常的負(fù)載均衡效果。

  3、請(qǐng)求走向

    訪(fǎng)問(wèn)虛擬IP(VIP),keepalived將請(qǐng)求映射到本地nginx,nginx將請(qǐng)求轉(zhuǎn)發(fā)至tomcat,例如:

    keepalived服務(wù)器的ip情況

    

    VIP總會(huì)在keepalived服務(wù)器中的某一臺(tái)上,也只會(huì)在其中的某一臺(tái)上;VIP綁定的服務(wù)器上的nginx就是master,當(dāng)VIP所在的服務(wù)器宕機(jī)了,keepalived會(huì)將VIP轉(zhuǎn)移到backup上,并將backup提升為master。

  4、VIP也稱(chēng)浮動(dòng)ip,是公網(wǎng)ip,與域名進(jìn)行映射,對(duì)外提供服務(wù); 其他ip一般而言都是內(nèi)網(wǎng)ip, 外部是直接訪(fǎng)問(wèn)不了的

看了以上關(guān)于使用集群是網(wǎng)站解決高并發(fā)、海量數(shù)據(jù)問(wèn)題的常用手段,如果大家還有什么地方需要了解的可以在億速云行業(yè)資訊里查找自己感興趣的或者找我們的專(zhuān)業(yè)技術(shù)工程師解答的,億速云技術(shù)工程師在行業(yè)內(nèi)擁有十幾年的經(jīng)驗(yàn)了。

 

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI