Nginx基礎(chǔ)

1 nginx介紹

? ? ? ? nginx是一款高性能的http 服務(wù)器/反向代理服務(wù)器及電子郵件(IMAP/POP3)代理服務(wù)器璃诀。由俄羅斯的程序設(shè)計師Igor Sysoev所開發(fā)甸私,官方測試nginx能夠支支撐5萬并發(fā)鏈接贸弥,并且cpu、內(nèi)存等資源消耗卻非常低,運行非常穩(wěn)定呻拌,所以現(xiàn)在很多知名的公司都在使用nginx睦焕。

2 nginx的應(yīng)用場景

????????1垃喊、http服務(wù)器:Nginx是一個http服務(wù)可以獨立提供http服務(wù)本谜。可以做網(wǎng)頁靜態(tài)服務(wù)器溜在。

????????2他托、虛擬主機:以實現(xiàn)在一臺服務(wù)器虛擬出多個網(wǎng)站掖肋。例如個人網(wǎng)站使用的虛擬主機。

????????3赏参、反向代理志笼,負載均衡沿盅。當網(wǎng)站的訪問量達到一定程度后,單臺服務(wù)器不能滿足用戶的請求時纫溃,需要用多臺服務(wù)器集群可以使用nginx做反向代理腰涧。并且多臺服務(wù)器可以平均分擔負載,不會因為某臺服務(wù)器負載高宕機而某臺服務(wù)器閑置的情況紊浩。

反向代理/負載均衡

????????反向代理:反向代理服務(wù)器位于用戶與目標服務(wù)器之間南窗,但是對于用戶而言,反向代理服務(wù)器就相當于目標服務(wù)器郎楼,即用戶直接訪問反向代理服務(wù)器就可以獲得目標服務(wù)器的資源。同時窒悔,用戶不需要知道目標服務(wù)器的地址呜袁,也無須在用戶端作任何設(shè)定。

????????負載均衡:就是將請求分攤到多個tomcat上進行處理简珠,增加了請求并發(fā)量和吞吐量。

3 nginx安裝(linux)

1.官網(wǎng)下載nginx linux 版本的安裝包放到指定目錄下 (cd /data/soft )膘融。

2.解壓命令 tar zxvf nginx-1.20.0.tar.gz(記淄鸦酢:解壓后的文件夾名稱不要改成nginx臼疫,不然安裝的時候會報錯凤价,因為安裝的時候會創(chuàng)建一個nginx文件夾)湾盗。

3.創(chuàng)建臨時文件夾,不然有可能會報錯 mkdir /var/temp/nginx -p比伏。

4.進入解壓后的目錄 cd nginx-1.20.0 輸入如下命令澈段,目的是配置nginx悔醋。

./configure --prefix=/data/soft/nginx --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_gzip_static_module --with-http_stub_status_module鹦聪。

下面是配置參數(shù)的含義:

nginx配置參數(shù)

5. make 編譯。

6.make install 安裝琴儿。

7. cd /data/soft/nginx/sbin 下

????????./nginx????啟動nginx

? ??????./nginx -s stop????停止nginx:

? ??????./nginx -s reoad????重新加載

? ? ? ? ./nginx -t? ? 檢查配置文件是否正確

? ? ? ? ./nginx -s quit? ? 停止nginx(等處理的請求結(jié)束/生產(chǎn)環(huán)境停止用這個命令)

注意:在云服務(wù)器安裝 記得開放nginx默認的80端口雄嚣。

4 nginx的進程模型

????????nginx模型有兩種進程,master進程和worker進程骇吭。master進程主要用來管理worker進程,管理包含:接收來自外界的信號蛀缝,向各worker進程發(fā)送信號,監(jiān)控worker進程的運行狀態(tài),當worker進程退出后(異常情況下)构哺,會自動重新啟動新的worker進程湖笨。而基本的網(wǎng)絡(luò)事件眠菇,則是放在worker進程中來處理了笑窜。多個worker進程之間是對等的辐益,他們同等競爭來自客戶端的請求认罩,各進程互相之間是獨立的宦搬。一個請求,只可能在一個worker進程中處理,一個worker進程四瘫,不可能處理其它進程的請求。worker進程的個數(shù)是可以設(shè)置的洗做,一般我們會設(shè)置與機器cpu核數(shù)一致

nginx的進程模型

? ? ? ? 如下圖我們啟動ngin后可以看一下他的進程。用命令 ps-ef | grep nginx。里面默認有兩個一個msater一個worker杯缺。

????????我們?vi /data/soft/nginx/conf/nginx.conf 將worker_processes 改成 2 看看肉微。(改完記得重新加載nginx ./nginx -s reload)

修改worker數(shù)量

????????接下來查看nginx進程發(fā)現(xiàn)有兩個worker進程了。

兩個worker

5 nginx如何處理實現(xiàn)高并發(fā)

為什么nginx可以處理這么高并發(fā)的請求呢琅摩?

先總結(jié):得益于nginx的worker搶占機制(進程模型)和異步非阻塞式的處理方式。

平時設(shè)置worker的數(shù)量應(yīng)該與cpu的核數(shù)設(shè)置一致。

5.1 同步與異步的理解:

同步與異步的重點在消息通知的方式上搭独,也就是調(diào)用結(jié)果通知的方式嗤朴。

同步:當一個同步調(diào)用發(fā)出去后股缸,調(diào)用者要一直等待調(diào)用結(jié)果的通知后坎背,才能進行后續(xù)的執(zhí)行。

異步:當一個異步調(diào)用發(fā)出去后,調(diào)用者不能立即得到調(diào)用結(jié)果的返回沮协。

異步調(diào)用,要想獲得結(jié)果行瑞,一般有兩種方式:

????????1突照、主動輪詢異步調(diào)用的結(jié)果;

????????2衔肢、被調(diào)用方通過callback來通知調(diào)用方調(diào)用結(jié)果。

生活實例:

????????同步取快遞:小明收到快遞將送達的短信,在樓下一直等到快遞送達蝉揍。

????????異步取快遞:小明收到快遞將送達的短信熙卡,快遞到樓下后,小明再下樓去取。

????????異步取快遞乐严,小明知道快遞到達樓下有兩種方式:1、不停的電話問快遞小哥到了沒有,即主動輪詢锐涯;2、快遞小哥到樓下后填物,打電話通知小明纹腌,然后小明下樓取快遞,即回調(diào)通知滞磺。

5.2 阻塞與非阻塞的理解

? ? ? ? ? ?阻塞與非阻塞的重點在于進/線程等待消息時候的行為升薯,也就是在等待消息的時候阅茶,當前進/線程是掛起狀態(tài)蝌诡,還是非掛起狀態(tài)爷狈。

? ? ? ? ? ?阻塞:阻塞調(diào)用在發(fā)出去后,在消息返回之前虑绵,當前進/線程會被掛起,直到有消息返回坷剧,當前進/線程才會被激活

? ? ? ? ? ?非阻塞:非阻塞調(diào)用在發(fā)出去后偏序,不會阻塞當前進/線程,而會立即返回。

????????生活實例:

????????????????阻塞取快遞:小明收到快遞即將送達的信息后醒第,什么事都不做,一直專門等快遞淡诗。

????????????????非阻塞取快遞:小明收到快遞即將送達的信息后气嫁,等快遞的時候,還一邊敲代碼脂矫、一邊刷微信墩邀。

????????????????同步與異步逾柿,重點在于消息通知的方式蘸炸;阻塞與非阻塞智嚷,重點在于等消息時候的行為。

????????所以,就有了下面4種組合方式:

????????????????1. 同步阻塞:小明收到信息后,啥都不干馒疹,等快遞佳簸;?

????????????????2. 同步非阻塞:小明收到信息后,邊刷微博颖变,邊等著取快遞生均;?

????????????????3. 異步阻塞:小明收到信息后,啥都不干腥刹,一直等著快遞員通知他取快遞马胧;?

????????????????4. 異步非阻塞:小明收到信息后,邊刷著微博肛走,邊等快遞員通知他取快遞漓雅。

5.3 work搶占機制

work搶占機制

????????在master里面,先建立需要lfd,然后fork出多個worker進程朽色,當用戶進入nginx服務(wù)的時候邻吞,每個worker的lfd變的可讀,并且這些worker會搶占一個accept_mutex的鎖葫男,一個worker得到accept_mutex這個互斥量抱冷,其他的worker就不能占有。搶到這個accept_mutex的worker就開始讀取請求-解析請求-處理請求梢褐,數(shù)據(jù)徹底返回客戶端之后旺遮,這個事件就算結(jié)束。

5.4 nginx事件處理

nginx事件處理

????????一般服務(wù)器事件處理:同樣的3個進程盈咳,如果采用一個進程負責一個request的方式耿眉,那么,同時進來3個request之后鱼响,每個進程就負責其中一個鸣剪,直至會話關(guān)閉。期間,如果有第4個request進來了筐骇。就無法及時反應(yīng)了债鸡,因為4個進程都沒干完活呢,因此铛纬,一般有個調(diào)度進程厌均,每當新進來了一個request,就新開個進程來處理告唆。

????????nginx事件處理:nginx每進來一個request棺弊,會有一個worker進程去處理。但不是全程的處理悔详,處理到什么程度呢镊屎?處理到可能發(fā)生阻塞的地方惹挟,比如向上游(后端)服務(wù)器轉(zhuǎn)發(fā)request茄螃,并等待請求返回。那么连锯,這個處理的worker不會這么傻等著归苍,他會在發(fā)送完請求后,注冊一個事件:“如果upstream返回了运怖,告訴我一聲拼弃,我再接著干”。于是他就休息去了摇展。此時吻氧,如果再有request 進來,他就可以很快再按這種方式處理咏连。而一旦上游服務(wù)器返回了盯孙,就會觸發(fā)這個事件,worker才會來接手祟滴,這個request才會接著往下走振惰。

6 nginx.config配置結(jié)構(gòu)

1. user root ;

設(shè)置worker進程的用戶垄懂,指linux中的用戶骑晶,涉及到一些操作文件目錄的權(quán)限,默認是nobody草慧。

2. worker_processes桶蛔;

worker進程工作數(shù)的設(shè)置,一般來說cpu有幾個就設(shè)置幾個漫谷。

3. error_log logs/error.log info仔雷;

nginx日志級別:debug/info/warn/error

4. pid logs/nginx.pid;

nginx的進程pid

5.設(shè)置工作模式

event事件

6. http指令塊,針對http網(wǎng)絡(luò)傳輸?shù)囊恍┲噶钆渲?/p>

http指令塊

7.include? yc.config?

引入外部配置文件,避免配置文件過大 可讀性差

8. 設(shè)定日志格式朽寞,main為定義的格式名稱识窿,如此access_log就可以直接使用這個變量了。

參數(shù)對照解析

9. sendfile使用高校文件傳輸脑融,提升傳輸性能喻频,啟用后才能夠使用tcp_nopush,指當前數(shù)據(jù)表積累一定大小后才能發(fā)送,提升了傳輸效率肘迎。

sendfile on;

tcp_nopush on;

10.keepalive_timeout 65;

設(shè)置客戶端與服務(wù)器請求的超時時間甥温,保證客戶端請求的時候不會重復(fù)建立新的連接,節(jié)約資源損耗妓布。

11. gzip on姻蚓;

啟用壓縮,html/css壓縮后傳輸更快匣沼。

12.server 指令塊可以在http指令中設(shè)置多個模擬主機

listen:監(jiān)聽端口狰挡;

server_name localhost/ip/域名

location:請求路由映射,匹配攔截

root:請求位置

index:首頁設(shè)置

server指令塊

7 nginx配置前端靜態(tài)文件訪問

假如我的前端項目放置在 /data/html目錄下 我們可以如下圖配置靜態(tài)資源訪問

靜態(tài)資源

8 nginx 跨域防盜鏈

nginx跨域server配置
nginx防盜鏈server配置

9 nginx 集群

9.1 搭建tomcat集群

如下圖:我們搭建了反向代理释涛,兩臺tomcat集群加叁。

nginx反向代理集群

9.2 nginx負載均衡

1.負載均衡之——輪詢?

搭建完集群后請求會被依次分攤到三臺tomcat服務(wù)器上,按順序依次訪問唇撬。

2.負載均衡之——加權(quán)輪詢

如果集群的兩臺tomcat服務(wù)器配置不一樣它匕,我們可以為配置高的server增加權(quán)重,使其改變訪問的流量窖认,數(shù)值越小被分配到的流量就越少豫柬。

加權(quán)

9.3 nginx upstream參數(shù)詳解

參數(shù)列表

max_conns:可以根據(jù)服務(wù)的好壞來設(shè)置最大連接數(shù),防止掛掉扑浸,比如1000烧给,我們可以設(shè)置800

max_conns

max_fails、?fail_timeout:

max_fails:失敗多少次 認為主機已掛掉則首装,踢出创夜,公司資源少的話一般設(shè)置2~3次,多的話設(shè)置1次

max_fails=3 fail_timeout=30s代表在30秒內(nèi)請求某一應(yīng)用失敗3次仙逻,認為該應(yīng)用宕機驰吓,后等待30秒,這期間內(nèi)不會再把新請求發(fā)送到宕機應(yīng)用系奉,而是直接發(fā)到正常的那一臺檬贰,時間到后再有請求進來繼續(xù)嘗試連接宕機應(yīng)用且僅嘗試1次,如果還是失敗缺亮,則繼續(xù)等待30秒...以此循環(huán)翁涤,直到恢復(fù)。


max_fails、?fail_timeout

9.4 負載均衡算法

1.weight+輪詢:? 默認的算法葵礼,根據(jù)設(shè)置的權(quán)重去輪詢号阿。

2.ip_hash: 根據(jù)用戶ip的hash來決定用戶訪問的是哪一臺tomcat

場景:保持session 一致。(因為同一個ip他的hash一樣鸳粉,通過節(jié)點取余扔涧,保證他的每個請求都訪問到同一臺tomcat避免緩存失效)。另外注意:要是停用機器届谈,不能直接去掉server枯夜,應(yīng)該用down參數(shù),保證節(jié)點數(shù)不變艰山,那么ip_hash還是不變湖雹,要是節(jié)點數(shù)變了,整個hash ip 訪問的機器都會變曙搬。

ip_hash原理
ip_hash?

3.url_hash:原理跟 ip_hash差不多摔吏,但是不同的是將請求的url放到hash函數(shù)中得到值然后再去跟節(jié)點數(shù)取余。

url_hash

4.least_conn :?最少鏈接织鲸。就是去找我們每臺服務(wù)器當前鏈接最少的舔腾,當新的請求進來以后就會去訪問鏈接最少的這一臺溪胶。

10?Nginx + Keepalived高可用

10.1 什么是Keepalived

????????Keepalived是一個免費開源的搂擦,用C編寫的類似于layer3, 4 & 7交換機制軟件,具備我們平時說的第3層哗脖、第4層和第7層交換機的功能瀑踢。主要提供loadbalancing(負載均衡)和?high-availability(高可用)功能,負載均衡實現(xiàn)需要依賴Linux的虛擬服務(wù)內(nèi)核模塊(ipvs)才避,而高可用是通過VRRP協(xié)議實現(xiàn)多臺機器之間的故障轉(zhuǎn)移服務(wù)橱夭。?

10.2 Keepalived雙機主備原理

????????首先Keepalived可以在主機上產(chǎn)生一個虛擬的ip, 這里叫做vip(v是virtual的意思) 。當用戶訪問主機時, 虛擬ip會跟這個主機ip綁定桑逝,他有心跳機制去檢測主機是否宕機棘劣,若主機宕機以后虛擬ip會跟備用機綁定,然后就會通過備用機器訪問楞遏。

Keepalived雙機主備

10.3?Keepalived 安裝(linux)

keepalived和nginx安裝方式差不多茬暇,我選用安裝包方式安裝。

1. 上傳壓縮包到指定目錄下寡喝。我的是(/data/soft)使用 tar -zxvf keepalived-2.0.18.tar.gz 解壓壓縮包糙俗。

2 . cd?keepalived-2.0.18? 進入解壓好的文件目錄下?

./configure --prefix=/data/soft/keepalived --sysconf=/etc? ?配置一下安裝路徑為/data/soft ,配置文件的路徑是/etc下

執(zhí)行后出現(xiàn)報錯:*** WARNING - this build will not support IPVS with IPv6. Please install libnl/libnl-3 dev libraries to support IPv6 with IPVS.

然后 yum?-y?install?libnl?libnl-devel 安裝一下预鬓。

之后再重新運行? ./configure --prefix=/data/soft/keepalived --sysconf=/etc 就ok 了巧骚。

執(zhí)行完以后 跟nginx一樣 會出現(xiàn)Makefile

3.?make && make install? ?編譯和安裝 里面會有警告信息,不用管就可以了。

4.將keeplived 加入操作系統(tǒng)

cp /data/soft/keepalived-2.0.18/keepalived/etc/init.d/keepalived /etc/init.d/

cp /data/soft/keepalived-2.0.18/keepalived/etc/sysconfig/keepalived /etc/sysconfig/keepalived/

10.4 keepalived.conf配置文件說明

配置文件的位置: /etc/keepalived/keepalived.conf

配置詳解

10.5?Keepalived 基本命令

加為系統(tǒng)服務(wù):

cp /data/soft/keepalived-2.0.18/keepalived/etc/init.d/keepalived /etc/init.d/

cp /data/soft/keepalived-2.0.18/keepalived/etc/sysconfig/keepalived?/etc/sysconfig/keepalived/? -

啟動:systemctl start keeplived.service

停止:systemctl stop keeplived.service

重啟:systemctl restart keeplived.service

10.6 keepalived 演示雙主備

第一步:創(chuàng)建兩臺nginx劈彪,分別安裝nginx和keeplived竣蹦,其ip配置如下:

虛擬ip:192.168.159.161

nginx01 ip:192.168.167.100? 作為master

nginx02 ip:192.168.167.111

nginx01 master主機 安裝好nginx和keeplived。并且keeplived的配置修改如下圖:

主機的keeplived配置

nginx02 backup從機?安裝好nginx和keeplived沧奴。并且keeplived的配置修改如下圖:

備用機的keeplived配置

配置好以后分別啟動nginx和keeplived

第二步:打開瀏覽器訪問虛擬ip看看當前是哪臺nginx在工作草添。為了方便查看我修改了nginx的index.html加上了本機ip地址。

如下圖:我們發(fā)現(xiàn)虛擬ip訪問的是主機扼仲。

master主機

然后我們在主機上執(zhí)行 :systemctl stop keeplived.service? 停止主機的keeplived远寸。然后訪問看看:

停止master的keeplived

之后刷新瀏覽器發(fā)現(xiàn)現(xiàn)在訪問到的是備用機的nginx

backup從機

10.7 keeplived 實現(xiàn)nginx自動重啟

首先我們將兩臺服務(wù)器的keeplived都起來,只啟動從機的nginx屠凶,master主機的nginx我們停掉看看訪問瀏覽器會使什么結(jié)果驰后,因為在生產(chǎn)環(huán)境中主機的nginx也有可能宕機,那么我們就需要能訪問到備用機的nginx矗愧。

如圖:我們訪問虛擬ip發(fā)現(xiàn)灶芝,無法訪問了,說明虛擬ip在主機nginx掛掉后綁定的還是主機唉韭,無法訪問到從機夜涕。

我們查看一下主機的 ip addr 可以看到 主機上跟虛擬IP綁定著

主機 ip addr

再看一下從機的 ip addr : 沒有出現(xiàn)虛擬ip

從機 ip addr

如果出現(xiàn)上述情況,那么我們就需要對master主機nginx增加心跳檢測属愤,如果它宕機了就要自動重啟女器,若是它起不來的話應(yīng)該把keeplived停止掉,然后使備用機被啟用住诸。下面我們用keeplived實現(xiàn)此功能

第一步:在keeplived 配置文件的地方 增加nginx重啟shell腳本check_nginx.sh

重啟ngin腳本

chmod +x /etc/keepalived/check_nginx.sh? ? ?為腳本添加權(quán)限驾胆。

/data/soft/nginx/sbin/nginx -stop 先停止nginx,打開瀏覽器訪問一下主機看nginx是否已經(jīng)停止贱呐。

然后 ./chech_nginx.sh 運行腳本丧诺,打開瀏覽器訪問主機nginx看看是否已經(jīng)啟動。

第二步:將nginx重啟腳本添加到keeplived配置文件中實現(xiàn)定時運行

keepalived配置定時運行nginx檢查腳本

第三步:重啟keepalived然后運行測試

systemctl restart keepalived? ? ? ? ? ? --重啟keepalived

/data/soft/nginx/sbin/nginx -s stop? ?--停止nginx

當我們 停止nginx后 他會自動將nginx啟動起來奄薇!

10?LVS實現(xiàn)負載均衡

? ? ? ? 參考原文鏈接:https://blog.csdn.net/weixin_40470303/article/details/80541639

? ??????LVS(Linux Virtual Server)即Linux虛擬服務(wù)器驳阎,是由章文嵩博士主導(dǎo)的開源負載均衡項目,目前LVS已經(jīng)被集成到Linux內(nèi)核模塊中馁蒂。該項目在Linux內(nèi)核中實現(xiàn)了基于IP的數(shù)據(jù)請求負載均衡調(diào)度方案呵晚,其體系結(jié)構(gòu)如下圖所示,終端互聯(lián)網(wǎng)用戶從外部訪問公司的外部負載均衡服務(wù)器远搪,終端用戶的Web請求會發(fā)送給LVS調(diào)度器劣纲,調(diào)度器根據(jù)自己預(yù)設(shè)的算法決定將該請求發(fā)送給后端的某臺Web服務(wù)器,比如谁鳍,輪詢算法可以將外部的請求平均分發(fā)給后端的所有服務(wù)器癞季,終端用戶訪問LVS調(diào)度器雖然會被轉(zhuǎn)發(fā)到后端真實的服務(wù)器劫瞳,但如果真實服務(wù)器連接的是相同的存儲,提供的服務(wù)也是相同的服務(wù)绷柒,最終用戶不管是訪問哪臺真實服務(wù)器志于,得到的服務(wù)內(nèi)容都是一樣的,整個集群對用戶而言都是透明的废睦。最后根據(jù)LVS工作模式的不同伺绽,真實服務(wù)器會選擇不同的方式將用戶需要的數(shù)據(jù)發(fā)送到終端用戶,LVS工作模式分為NAT模式嗜湃、TUN模式奈应、以及DR模式。

另外:LVS實現(xiàn)的是基于四層的負載均衡购披,基于ip和端口的請求轉(zhuǎn)發(fā)杖挣。

LVS網(wǎng)絡(luò)拓撲圖

10.1 NAT模式

????????NAT(Network Address Translation)即網(wǎng)絡(luò)地址轉(zhuǎn)換,其作用是通過數(shù)據(jù)報頭的修改刚陡,使得位于企業(yè)內(nèi)部的私有IP地址可以訪問外網(wǎng)惩妇,以及外部用用戶可以訪問位于公司內(nèi)部的私有IP主機。VS/NAT工作模式拓撲結(jié)構(gòu)如下圖所示筐乳,LVS負載調(diào)度器可以使用兩塊網(wǎng)卡配置不同的IP地址歌殃,eth0設(shè)置為私鑰IP與內(nèi)部網(wǎng)絡(luò)通過交換設(shè)備相互連接,eth1設(shè)備為外網(wǎng)IP與外部網(wǎng)絡(luò)聯(lián)通蝙云。

????? ?第一步氓皱,用戶通過互聯(lián)網(wǎng)DNS服務(wù)器解析到公司負載均衡設(shè)備上面的外網(wǎng)地址,相對于真實服務(wù)器而言贮懈,LVS外網(wǎng)IP又稱VIP(Virtual IP Address)虛擬IP匀泊,用戶通過訪問虛擬IP,即可連接后端的真實服務(wù)器(Real Server)朵你,而這一切對用戶而言都是透明的,用戶以為自己訪問的就是真實服務(wù)器揣非,但他并不知道自己訪問的VIP僅僅是一個調(diào)度器抡医,也不清楚后端的真實服務(wù)器到底在哪里、有多少真實服務(wù)器早敬。

? ?第二步忌傻,用戶將請求發(fā)送至192.168.1.150,此時LVS將根據(jù)預(yù)設(shè)的算法選擇后端的一臺真實服務(wù)器(192.168.1.1~192.168.1.3)搞监,將數(shù)據(jù)請求包轉(zhuǎn)發(fā)給真實服務(wù)器水孩,并且在轉(zhuǎn)發(fā)之前LVS會修改數(shù)據(jù)包中的目標地址以及目標端口,目標地址與目標端口將被修改為選出的真實服務(wù)器IP地址以及相應(yīng)的端口琐驴。

? ? 第三步俘种,真實的服務(wù)器將響應(yīng)數(shù)據(jù)包返回給LVS調(diào)度器秤标,調(diào)度器在得到響應(yīng)的數(shù)據(jù)包后會將源地址和源端口修改為VIP及調(diào)度器相應(yīng)的端口,修改完成后宙刘,由調(diào)度器將響應(yīng)數(shù)據(jù)包發(fā)送回終端用戶苍姜,另外,由于LVS調(diào)度器有一個連接Hash表悬包,該表中會記錄連接請求及轉(zhuǎn)發(fā)信息衙猪,當同一個連接的下一個數(shù)據(jù)包發(fā)送給調(diào)度器時,從該Hash表中可以直接找到之前的連接記錄布近,并根據(jù)記錄信息選出相同的真實服務(wù)器及端口信息垫释。

NAT模式

10.2 TNU模式

????????在LVS(NAT)模式的集群環(huán)境中,由于所有的數(shù)據(jù)請求及響應(yīng)的數(shù)據(jù)包都需要經(jīng)過LVS調(diào)度器轉(zhuǎn)發(fā)撑瞧,如果后端服務(wù)器的數(shù)量大于10臺饶号,則調(diào)度器就會成為整個集群環(huán)境的瓶頸。我們知道季蚂,數(shù)據(jù)請求包往往遠小于響應(yīng)數(shù)據(jù)包的大小茫船。因為響應(yīng)數(shù)據(jù)包中包含有客戶需要的具體數(shù)據(jù),所以LVS(TUN)的思路就是將請求與響應(yīng)數(shù)據(jù)分離扭屁,讓調(diào)度器僅處理數(shù)據(jù)請求算谈,而讓真實服務(wù)器響應(yīng)數(shù)據(jù)包直接返回給客戶端。VS/TUN工作模式拓撲結(jié)構(gòu)如下圖所示料滥。其中然眼,IP隧道(IP tunning)是一種數(shù)據(jù)包封裝技術(shù),它可以將原始數(shù)據(jù)包封裝并添加新的包頭(內(nèi)容包括新的源地址及端口葵腹、目標地址及端口)高每,從而實現(xiàn)將一個目標為調(diào)度器的VIP地址的數(shù)據(jù)包封裝,通過隧道轉(zhuǎn)發(fā)給后端的真實服務(wù)器(Real Server)践宴,通過將客戶端發(fā)往調(diào)度器的原始數(shù)據(jù)包封裝鲸匿,并在其基礎(chǔ)上添加新的數(shù)據(jù)包頭(修改目標地址為調(diào)度器選擇出來的真實服務(wù)器的IP地址及對應(yīng)端口),LVS(TUN)模式要求真實服務(wù)器可以直接與外部網(wǎng)絡(luò)連接,真實服務(wù)器在收到請求數(shù)據(jù)包后直接給客戶端主機響應(yīng)數(shù)據(jù)。

TNU模式

10.3 基于DR模式的LVS負載均衡

????????在LVS(TUN)模式下螃成,由于需要在LVS調(diào)度器與真實服務(wù)器之間創(chuàng)建隧道連接晨横,這同樣會增加服務(wù)器的負擔。與LVS(TUN)類似,DR模式也叫直接路由模式,其體系結(jié)構(gòu)如圖4所示,該模式中LVS依然僅承擔數(shù)據(jù)的入站請求以及根據(jù)算法選出合理的真實服務(wù)器渡贾,最終由后端真實服務(wù)器負責將響應(yīng)數(shù)據(jù)包發(fā)送返回給客戶端。與隧道模式不同的是雄右,直接路由模式(DR模式)要求調(diào)度器與后端服務(wù)器必須在同一個局域網(wǎng)內(nèi)空骚,VIP地址需要在調(diào)度器與后端所有的服務(wù)器間共享纺讲,因為最終的真實服務(wù)器給客戶端回應(yīng)數(shù)據(jù)包時需要設(shè)置源IP為VIP地址(192.168.1.150),目標IP為客戶端IP府怯,這樣客戶端訪問的是調(diào)度器的VIP地址刻诊,回應(yīng)的源地址也依然是該VIP地址(真實服務(wù)器上的VIP),客戶端是感覺不到后端服務(wù)器存在的牺丙。由于多臺計算機都設(shè)置了同樣一個VIP地址则涯,所以在直接路由模式中要求調(diào)度器的VIP地址是對外可見的,客戶端需要將請求數(shù)據(jù)包發(fā)送到調(diào)度器主機冲簿,而所有的真實服務(wù)器的VIP地址必須配置在Non-ARP的網(wǎng)絡(luò)設(shè)備上粟判,也就是該網(wǎng)絡(luò)設(shè)備并不會向外廣播自己的MAC及對應(yīng)的IP地址,真實服務(wù)器的VIP對外界是不可見的峦剔,但真實服務(wù)器卻可以接受目標地址VIP的網(wǎng)絡(luò)請求档礁,并在回應(yīng)數(shù)據(jù)包時將源地址設(shè)置為該VIP地址。調(diào)度器根據(jù)算法在選出真實服務(wù)器后吝沫,在不修改數(shù)據(jù)報文的情況下呻澜,將數(shù)據(jù)幀的MAC地址修改為選出的真實服務(wù)器的MAC地址,通過交換機將該數(shù)據(jù)幀發(fā)給真實服務(wù)器惨险。整個過程中羹幸,真實服務(wù)器的VIP不需要對外界可見。

DR模式

下面我們實現(xiàn)LVS DR模式的負載均衡:我們搭建三臺服務(wù)器辫愉,配置約定如下栅受。dip是真實的ip,vip是虛擬ip。

服務(wù)器信息

第一步:配置三臺機器

三臺機器上運行命令: systemctl stop NetworkManager? ? ?systemctl disable NetworkManager

第二步:配置LVS服務(wù)器虛擬ip

進入網(wǎng)卡的配置文件夾下? cd /etc/sysconfig/network-scripts/

編輯 網(wǎng)卡配置文件 ifcfg-ens33? 添加ADDRESS2=192.168.159.150

添加虛擬IP

然后重啟網(wǎng)卡配置:service network restart

查看網(wǎng)卡配置:ip addr

如圖 ens33 多了虛擬ip的配置

ip addr

第三步:LVS服務(wù)器安裝ipvsdam?

yum install ipvsadm

安裝好以后恭朗,查看版本號 ipvsadm -Ln

查看版本號

第四步:分別配置兩臺 nginx 服務(wù)器虛擬ip(步驟一樣)

1.進入網(wǎng)卡配置文件夾? cd /etc/sysconfig/network-scripts/

2.拷貝配置文件重命名 cp ifcfg-lo ifcfg-lo:1

3.編輯文件 vi ifcfg-lo:1

4.重啟網(wǎng)卡 service network restart

5.ip addr 查看配置屏镊,出現(xiàn)虛擬ip信息

第四步:為兩臺nginx服務(wù)器配置arp。

1. vi /etc/sysctl.conf? ? 加上如圖配置

配置詳情

2. sysctl -p 使配置文件生效痰腮。

3.? 配置網(wǎng)絡(luò)配置 route add -host 192.168.159.150 dev lo:1

route -n 查看? 多了 192.168.159.150 的配置

配置

將?route add -host 192.168.159.150 dev lo:1 添加到?/etc/rc.local 文件末尾? 開機自動執(zhí)行

開機自啟

第五步:LVS服務(wù)器使用ipvsadm配置集群規(guī)則

1.創(chuàng)建LVS節(jié)點而芥,用戶訪問的集群調(diào)度者

ipvsadm?-A?-t 192.168.159.150:80?-s?rr

-A:添加集群

-t?:?tcp協(xié)議

ip地址︰設(shè)定集群的訪問ip,也就是LVS的虛擬ip.-s∶設(shè)置負載均衡的算法诽嘉,rr表示輪詢

p∶設(shè)置連接持久化的時間

2.創(chuàng)建兩臺RS真實服務(wù)器

ipvsadm -a -t 192.168.159.150:80 -r 192.168.159.111:80 -g

ipvsadm -a -t 192.168.159.150:80 -r 192.168.159.100:80 -g

-a∶添加真實服務(wù)器

-t : tcp協(xié)議

-r︰真實服務(wù)器的ip地址

-g∶設(shè)定DR模式

配置LVS集群

接下來我們訪問 虛擬ip 192.168.159.150?

如下圖蔚出,已經(jīng)訪問到 100 nginx服務(wù)器了。我們把100nginx停掉后虫腋,訪問150會訪問到111。說明集群配置成功了稀余。

11?LVS+keepalived

上面我們已經(jīng)學習配置keepalived 和 LVS集群悦冀。那么我們可以配置兩個LVS,一個主一個備睛琳。當主keepalived LVS 宕機后就啟用備用的keepalived LVS盒蟆。

第一步:創(chuàng)建兩臺LVS 服務(wù)器(99(主) 和98 )

兩臺服務(wù)器分別 都安裝keepalived?

第二步:配置主LVS keepalived配置文件

如下圖:虛擬ip是192.168.159.150? 添加LVS的配置如下圖踏烙。

keepalived LVS的配置

然后重啟 keepalived 訪問虛擬ip 看是否能訪問到。

第三步:配置從LVS keepalived.config

將主節(jié)點的keepalived的配置復(fù)制到從節(jié)點然后改一下 id 和 backup 還有權(quán)重就可以了

keepalived LVS的配置

然后重啟 keepalived?

為了測試 備用機是否好使历等,我們將主keepalived 停止掉以后讨惩,我們訪問虛擬ip看能訪問到nginx。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末寒屯,一起剝皮案震驚了整個濱河市荐捻,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌寡夹,老刑警劉巖处面,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異菩掏,居然都是意外死亡魂角,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進店門智绸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來野揪,“玉大人,你說我怎么就攤上這事瞧栗∷刮龋” “怎么了?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵沼溜,是天一觀的道長平挑。 經(jīng)常有香客問我,道長系草,這世上最難降的妖魔是什么通熄? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮找都,結(jié)果婚禮上唇辨,老公的妹妹穿的比我還像新娘。我一直安慰自己能耻,他們只是感情好赏枚,可當我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著晓猛,像睡著了一般饿幅。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上戒职,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天栗恩,我揣著相機與錄音,去河邊找鬼洪燥。 笑死磕秤,一個胖子當著我的面吹牛乳乌,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播市咆,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼汉操,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蒙兰?” 一聲冷哼從身側(cè)響起磷瘤,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎癞己,沒想到半個月后膀斋,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡痹雅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年仰担,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片绩社。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡摔蓝,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出愉耙,到底是詐尸還是另有隱情贮尉,我是刑警寧澤,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布朴沿,位于F島的核電站猜谚,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏赌渣。R本人自食惡果不足惜魏铅,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望坚芜。 院中可真熱鬧览芳,春花似錦、人聲如沸鸿竖。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽缚忧。三九已至悟泵,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間闪水,已是汗流浹背魁袜。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留敦第,地道東北人峰弹。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像芜果,于是被迫代替她去往敵國和親鞠呈。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,472評論 2 348