實(shí)現(xiàn)Nginx基于TCP層的負(fù)載均衡

#實(shí)戰(zhàn)描述:
現(xiàn)如今有很多的大企業(yè)、互聯(lián)網(wǎng)大廠例如百度、京東、新浪、網(wǎng)易、騰訊、淘寶包括UPWEN公司^-^等,都在使用Nginx作為用于發(fā)布自己門(mén)戶(hù)網(wǎng)站的webserver。Nginx是異步框架的網(wǎng)頁(yè)服務(wù)器,也可以用作反向代理、負(fù)載平衡器和HTTP緩存。該軟件由伊戈?duì)枴べ愃饕騽?chuàng)建并于2004年首次公開(kāi)發(fā)布,為俄羅斯訪問(wèn)量第二的Rambler.ru站點(diǎn)開(kāi)發(fā)的,第一個(gè)公開(kāi)版本0.1.0發(fā)布于2004年10月4日,2011年成立同名公司以提供支持。2019年3月11日,Nginx公司被F5 Networks以6.7億美元收購(gòu)。

Nginx是免費(fèi)的開(kāi)源軟件,根據(jù)類(lèi)BSD許可證的條款發(fā)布。Nginx是一款輕量級(jí)的Web服務(wù)器/反向代理服務(wù)器及電子郵件(IMAP/POP3)代理服務(wù)器,其特點(diǎn)是占有內(nèi)存少,并發(fā)能力強(qiáng),事實(shí)上nginx的并發(fā)能力在同類(lèi)型的網(wǎng)頁(yè)服務(wù)器中表現(xiàn)較好。
So,我們得知,很多用戶(hù)選擇Web服務(wù)器使用Nginx,除看重其并發(fā)能力強(qiáng)之外,也通常是把Nginx作為負(fù)載均衡器來(lái)使用,相信這也是F5選擇收購(gòu)Nginx的重要原因之一吧。Nginx既可以實(shí)現(xiàn)四層TCP層如mysql、redis等應(yīng)用的負(fù)載,也可以實(shí)現(xiàn)七層HTTP層負(fù)載均衡,不過(guò)四層TCP層的負(fù)載不支持動(dòng)靜分離的,比如用Tomcat和Nginx配合使用,今天我們先討論四層TCP層負(fù)載的實(shí)現(xiàn)。
接下來(lái),我們看下如何具體實(shí)現(xiàn)。
#實(shí)戰(zhàn)環(huán)境:
準(zhǔn)備兩臺(tái)CentOS7.x,其中一臺(tái)作為Nginx發(fā)布web頁(yè)面,配置不同端口號(hào)的虛擬應(yīng)用(給她起個(gè)hostname名稱(chēng)叫webserver.upwen.com);另外一臺(tái)作為Nginx的負(fù)載均衡(給她起個(gè)hostname名稱(chēng)叫balancer.upwen.com),安裝部署Nginx并實(shí)現(xiàn)四層TCP層負(fù)載。
#具體實(shí)現(xiàn):
##實(shí)現(xiàn)Nginx四層TCP層負(fù)載均衡的先決條件
首先是Nginx版本大于1.9才可以,另外需要編譯安裝前加入--with-stream選項(xiàng)才可以支持Tcp負(fù)載均衡。
##安裝編譯過(guò)程中需要用到的軟件包
我們?cè)趙ebserver.upwen.com主機(jī)上采用編譯安裝的方式安裝nginx。

下載軟件包到本地:

##配置并編譯安裝Nginx

##環(huán)境變量設(shè)置

環(huán)境變量配置好后,測(cè)試啟動(dòng)和關(guān)閉Nginx。

當(dāng)然,我們也可以基于systemd,在/usr/lib/systemd/system/nginx.service配置好,通過(guò)systemctl來(lái)管理Nginx的服務(wù)啟動(dòng)。
?
##配置Nginx虛擬主機(jī)
通過(guò)配置/usr/local/nginx/conf/nginx.conf,配置不同端口的Nginx虛擬主機(jī)。

由于增加了82端口,如果selinux已開(kāi)啟,盡量在不關(guān)閉的情況下,調(diào)整下端口策略。

##Nginx實(shí)現(xiàn)TCP層負(fù)載均衡
使用同樣的方式在balancer.upwen.com主機(jī)上編譯安裝并啟動(dòng)Nginx,在其主配置文件nginx.conf中,使用stream標(biāo)簽配置。

#結(jié)果:
我們?cè)赽alancer主機(jī)上執(zhí)行curl -l?localhost:86命令,會(huì)發(fā)現(xiàn)balancer主機(jī)上的Nginx負(fù)載均衡起到了作用,會(huì)輪詢(xún)webserver主機(jī)上的TCP80和TCP82端口號(hào)的應(yīng)用。

同樣的,我們也可以在webserver主機(jī)上配置例如redis這樣的應(yīng)用,與此同時(shí),在balancer主機(jī)上配置好steam標(biāo)簽,可以實(shí)現(xiàn)輪詢(xún)webserver主機(jī)上TCP6379的redis端口,這一部分,我們放在后面進(jìn)行實(shí)踐。
?
#知識(shí)點(diǎn):
Yum倉(cāng)庫(kù)安裝軟件;
編譯安裝部署軟件;
Nginx主配置文件的使用;
負(fù)載均衡的配置。