版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第2章Web服務(wù)集群2.1Web服務(wù)集群簡(jiǎn)介
2.2
搭建LAMP平臺(tái)2.3
搭建LNMP平臺(tái)2.4Nginx—負(fù)載均衡2.5Web集群實(shí)戰(zhàn)案例-業(yè)務(wù)上線了解Web服務(wù)集群的意義熟練搭建LAMP平臺(tái)熟練搭建LNMP平臺(tái)熟悉Nginx負(fù)載均衡熟練搭建Web服務(wù)集群引言大家所熟悉的博客、論壇等網(wǎng)站,其特點(diǎn)就是用戶(hù)群體較大。當(dāng)Web服務(wù)器直接面向客戶(hù)端時(shí),服務(wù)器往往要承載大量并發(fā)請(qǐng)求,單臺(tái)服務(wù)器難以負(fù)荷。為了應(yīng)對(duì)以上問(wèn)題,可以配置多臺(tái)Web服務(wù)器組成集群,以擴(kuò)展架構(gòu)的穩(wěn)定性和可擴(kuò)展性,承載更多的并發(fā)量以及提高用戶(hù)的訪問(wèn)速度。2.1Web服務(wù)集群簡(jiǎn)介組成及概念Web集群基礎(chǔ)架構(gòu)2.1Web服務(wù)集群簡(jiǎn)介Web服務(wù)集群是指配置若干(兩臺(tái)及以上)臺(tái)Web服務(wù)器組成一個(gè)系統(tǒng),作為一個(gè)整體為用戶(hù)提供Web服務(wù)。在Web集群環(huán)境中,前端使用負(fù)載均衡,將用戶(hù)請(qǐng)求的流量按照算法分散地移交到后端Web服務(wù)器集群中,實(shí)現(xiàn)請(qǐng)求的分發(fā),將會(huì)大大提升系統(tǒng)的吞吐量與請(qǐng)求性能。2.1Web服務(wù)集群簡(jiǎn)介Web服務(wù)器又稱(chēng)為網(wǎng)站服務(wù)器,能夠處理瀏覽器等客戶(hù)端的請(qǐng)求然后返回相應(yīng)結(jié)果,Web服務(wù)器可提供瀏覽類(lèi)網(wǎng)站文件,又可提供下載類(lèi)數(shù)據(jù)文件。常見(jiàn)的Web服務(wù)器協(xié)議有HTTP、HTML文檔格式、URL(UniformResourceLocator,統(tǒng)一資源定位符)等,其中URL就是用戶(hù)在瀏覽器中輸入的網(wǎng)站地址。2.1Web服務(wù)集群簡(jiǎn)介當(dāng)前主流的Web服務(wù)器有Apache、Nginx、IIS,在云端Web類(lèi)應(yīng)用中,使用率可達(dá)95%以上。Apache是世界使用最多的Web服務(wù)器,是Web服務(wù)器的“領(lǐng)頭人”,同時(shí),Nginx性能穩(wěn)定,有著代替Apache的趨勢(shì),這兩者在Linux系統(tǒng)下都能被靈活地配置調(diào)用,而IIS主要用于Windows的Web類(lèi)應(yīng)用。Web服務(wù)器的市場(chǎng)份額2.1Web服務(wù)集群簡(jiǎn)介假設(shè)用戶(hù)A通過(guò)負(fù)載均衡登錄網(wǎng)站,第一次登錄的會(huì)話信息保存在Web服務(wù)器1中,保存的內(nèi)容叫做Session,可以保證用戶(hù)“在線”的狀態(tài)。當(dāng)網(wǎng)站刷新,負(fù)載均衡把請(qǐng)求又分給了Web2,因?yàn)閃eb2沒(méi)有用戶(hù)A的登錄信息,網(wǎng)站就會(huì)提示用戶(hù)A重新登錄,以此類(lèi)推,用戶(hù)A無(wú)法實(shí)現(xiàn)會(huì)話保持。實(shí)現(xiàn)Session共享就可以解決以上問(wèn)題,如Nginx負(fù)載均衡的ip_hash算法、LVS的持久連接機(jī)制、HAProxy負(fù)載均衡的source算法以及基于cookie的會(huì)話保持處理機(jī)制。Web集群基礎(chǔ)架構(gòu)2.2搭建LAMP平臺(tái)LAMP簡(jiǎn)介實(shí)驗(yàn)的準(zhǔn)備環(huán)境LAMP的部署及測(cè)試2.2
搭建LAMP
平臺(tái)2.2.1LAMP簡(jiǎn)介在LAMP中,Linux是自由和開(kāi)放源碼的類(lèi)Unix操作系統(tǒng),可安裝在各種計(jì)算機(jī)硬件設(shè)備中。Apache是最受歡迎的一個(gè)開(kāi)放源碼的Web服務(wù)器軟件,強(qiáng)大且實(shí)用。M可以是多線程、多用戶(hù)的SQL數(shù)據(jù)庫(kù)管理系統(tǒng)MySQL,也可以是MariaDB。P一般是指PHP、Perl或Python等腳本語(yǔ)言,其中PHP是一種編程語(yǔ)言,最初用來(lái)設(shè)計(jì)生產(chǎn)動(dòng)態(tài)網(wǎng)站,主要用于服務(wù)器端的應(yīng)用程序軟件。LAMP可以是LinuxApacheMySQLPHP的簡(jiǎn)寫(xiě),其實(shí)就是把Apache、MySQL以及PHP安裝在Linux系統(tǒng)上,來(lái)運(yùn)行動(dòng)態(tài)網(wǎng)站或者服務(wù)器,是比較常用的Web搭建框架。2.2
搭建LAMP
平臺(tái)2.2.1LAMP簡(jiǎn)介L(zhǎng)AMP的工作原理2.2
搭建LAMP
平臺(tái)2.2.1LAMP簡(jiǎn)介瀏覽器向服務(wù)器發(fā)送HTTP請(qǐng)求,服務(wù)器(Apache)接受請(qǐng)求。PHP作為Apache的組件模塊也會(huì)一起啟動(dòng),它們具有相同的生命周期。Apache會(huì)將一些靜態(tài)資源保存,然后去調(diào)用PHP處理模塊進(jìn)行PHP腳本的處理。腳本處理完后,Apache將處理完的信息通過(guò)httpresponse的方式發(fā)送給瀏覽器,經(jīng)瀏覽器解析、渲染等一系列操作后呈現(xiàn)整個(gè)網(wǎng)頁(yè)。LAMP的工作原理2.2
搭建LAMP
平臺(tái)2.2.2實(shí)驗(yàn)的準(zhǔn)備環(huán)境本書(shū)全部實(shí)驗(yàn)使用虛擬機(jī)代替物理服務(wù)器,在虛擬環(huán)境下的Linux操作系統(tǒng)中進(jìn)行,實(shí)驗(yàn)所用操作系統(tǒng)版本為CentOS7.6。CentOS7自帶Firewalld和SELinux守護(hù)工具,一外一內(nèi),保證系統(tǒng)的安全。嚴(yán)格意義上來(lái)說(shuō),可以通過(guò)配置相關(guān)策略來(lái)開(kāi)放系統(tǒng)及服務(wù)的訪問(wèn)權(quán)限,這種做法雖然較準(zhǔn)確但是繁瑣。為了避免因防火墻造成各種連接不成功以至于實(shí)驗(yàn)失敗的情況,這里直接關(guān)閉Firewalld和SELinux,后續(xù)章節(jié)的實(shí)驗(yàn)也默認(rèn)關(guān)閉。2.2
搭建LAMP
平臺(tái)2.2.2實(shí)驗(yàn)的準(zhǔn)備環(huán)境1.查看系統(tǒng)版本號(hào)[root@qfedu~]#cat/etc/redhat-releaseCentOSLinuxrelease7.6.1810(Core)2.2
搭建LAMP
平臺(tái)2.2.2實(shí)驗(yàn)的準(zhǔn)備環(huán)境2.關(guān)閉CentOS7默認(rèn)防火墻Firewalld[root@qfedu~]#systemctlstatusfirewalld●firewalld.service-firewalld-dynamicfirewalldaemonLoaded:loaded(/usr/lib/systemd/system/firewalld.service;enabled;vendorpreset:enabled)Active:active(running)since一2021-10-2518:05:27CST;7hleft……此處省略部分代碼……(1)首先查看虛擬機(jī)當(dāng)前防火墻的狀態(tài)2.2
搭建LAMP
平臺(tái)2.2.2實(shí)驗(yàn)的準(zhǔn)備環(huán)境2.關(guān)閉CentOS7默認(rèn)防火墻Firewalld通過(guò)上面這段代碼的反饋信息,可以觀察到防火墻目前是開(kāi)啟的。輸出結(jié)果第2行括號(hào)中的第二個(gè)字段表示的是服務(wù)的自啟動(dòng)狀態(tài),若為enabled,則說(shuō)明該服務(wù)會(huì)開(kāi)機(jī)自啟動(dòng);若為disabled,則開(kāi)機(jī)不會(huì)自啟。第3行active表示的是活動(dòng),其冒號(hào)后面若為active(running),則表示防火墻為啟動(dòng)狀態(tài);若為inactive(dead),則說(shuō)明當(dāng)前防火墻為關(guān)閉狀態(tài)。(1)首先查看虛擬機(jī)當(dāng)前防火墻的狀態(tài)2.2
搭建LAMP
平臺(tái)2.2.2實(shí)驗(yàn)的準(zhǔn)備環(huán)境2.關(guān)閉CentOS7默認(rèn)防火墻Firewalld[[root@qfedu~]#systemctlstopfirewalld[root@qfedu~]#systemctldisablefirewalld(2)關(guān)閉防火墻,并禁止其開(kāi)機(jī)自啟2.2
搭建LAMP
平臺(tái)2.2.2實(shí)驗(yàn)的準(zhǔn)備環(huán)境2.關(guān)閉CentOS7默認(rèn)防火墻Firewalld[root@qfedu~]#systemctlstatusfirewalld●firewalld.service-firewalld-dynamicfirewalldaemonLoaded:loaded(/usr/lib/systemd/system/firewalld.service;disabled;vendorpreset:enabled)Active:inactive(dead)……此處省略部分代碼……(3)再次查看防火墻狀態(tài)當(dāng)前防火墻的狀態(tài)為關(guān)閉2.2
搭建LAMP
平臺(tái)2.2.2實(shí)驗(yàn)的準(zhǔn)備環(huán)境3.關(guān)閉SELinux[root@qfedu~]#getenforceEnforcing(1)首先查看當(dāng)前SELinux的狀態(tài)系統(tǒng)返回的信息為Enforcing,意為執(zhí)行,即SELinux正在運(yùn)行2.2
搭建LAMP
平臺(tái)2.2.2實(shí)驗(yàn)的準(zhǔn)備環(huán)境3.關(guān)閉SELinux[root@qfedu~]#setenforce0[root@qfedu~]#getenforcePermissive(2)臨時(shí)關(guān)閉SELinux,并再次查看SELinux的狀態(tài)SELinux的狀態(tài)為Permissive,意為允許的2.2
搭建LAMP
平臺(tái)2.2.2實(shí)驗(yàn)的準(zhǔn)備環(huán)境3.關(guān)閉SELinux[root@qfedu~]#vim/etc/selinux/config#ThisfilecontrolsthestateofSELinuxonthesystem.#SELINUX=cantakeoneofthesethreevalues:#enforcing-SELinuxsecuritypolicyisenforced.#permissive-SELinuxprintswarningsinsteadofenforcing.#disabled-NoSELinuxpolicyisloaded.#SELINUX=enforcing#修改前SELINUX=disabled#修改后(3)禁止SELinux開(kāi)機(jī)自啟將SELINUX=enforcing修改為SELINUX=disabled2.2
搭建LAMP
平臺(tái)2.2.2實(shí)驗(yàn)的準(zhǔn)備環(huán)境3.關(guān)閉SELinux[root@qfedu~]#reboot[root@qfedu~]#getenforceDisabled(4)重啟虛擬機(jī),再次查看SELinux狀態(tài)SELinux的狀態(tài)為Disabled,說(shuō)明SELinux已關(guān)閉,并被禁止開(kāi)機(jī)自啟。至此,準(zhǔn)備工作已全部完成,本書(shū)后續(xù)實(shí)驗(yàn)將不再詳細(xì)介紹該環(huán)節(jié)。2.2
搭建LAMP
平臺(tái)2.2.3LAMP的部署及測(cè)試在單機(jī)環(huán)境下部署LAMP環(huán)境,首先關(guān)閉防火墻及SELinux,之后利用yum工具依次安裝Apache、PHP和MySQL,并進(jìn)行測(cè)試。準(zhǔn)備1臺(tái)VM虛擬機(jī)搭建LAMP平臺(tái)HostNameIP說(shuō)明web139搭建LAMP框架說(shuō)明:操作系統(tǒng)版本CentOS7.6,提前關(guān)閉防火墻及SELinux。2.2
搭建LAMP
平臺(tái)2.2.3LAMP的部署及測(cè)試1.Apache的安裝與測(cè)試[root@web1~]#yum-yinstallhttpd……此處省略部分代碼……已安裝:httpd.x86_640:2.4.6-97.el7.centos.2作為依賴(lài)被安裝:apr.x86_640:1.4.8-7.el7apr-util.x86_640:1.5.2-6.el7httpd-tools.x86_640:2.4.6-97.el7.centos.2mailcap.noarch0:2.1.41-2.el7完畢?。?)安裝Apache2.2搭建LAMP平臺(tái)2.2.3LAMP的部署及測(cè)試1.Apache的安裝與測(cè)試[root@web1~]#httpd-vServerversion:Apache/2.4.6(CentOS)Serverbuilt:Nov10202114:41:18本次實(shí)驗(yàn)的Apache版本為2.4.6(1)安裝Apache2.2搭建LAMP平臺(tái)2.2.3LAMP的部署及測(cè)試1.Apache的安裝與測(cè)試[root@web1~]#systemctlstarthttpd[root@web1~]#systemctlenablehttpdCreatedsymlinkfrom/etc/systemd/system/multi-user.target.wants/httpd.serviceto/usr/lib/systemd/system/httpd.service.(3)啟動(dòng)Apache服務(wù)并設(shè)置開(kāi)機(jī)自啟2.2搭建LAMP平臺(tái)2.2.3LAMP的部署及測(cè)試1.Apache的安裝與測(cè)試在本機(jī)瀏覽器中輸入虛擬機(jī)的IP地址,如果看到Apache默認(rèn)的測(cè)試頁(yè)面,說(shuō)明Apache服務(wù)成功運(yùn)行。直接在瀏覽器上訪問(wèn)當(dāng)前主機(jī)的IP地址。(4)驗(yàn)證Apache服務(wù)是否安裝成功2.2搭建LAMP平臺(tái)2.2.3LAMP的部署及測(cè)試1.Apache的安裝與測(cè)試Apache的默認(rèn)網(wǎng)站目錄是/var/www/html,先切換到該路徑,再創(chuàng)建HTML靜態(tài)頁(yè)面。(5)測(cè)試Apache是否能解析常見(jiàn)的靜態(tài)頁(yè)面[root@web1~]#cd/var/www/html/[root@web1html]#vimindex.htmlWelcometotheworld!2.2搭建LAMP平臺(tái)2.2.3LAMP的部署及測(cè)試1.Apache的安裝與測(cè)試在瀏覽器中輸入IP地址。(5)測(cè)試Apache是否能解析常見(jiàn)的靜態(tài)頁(yè)面靜態(tài)頁(yè)面被成功解析,訪問(wèn)正常2.2搭建LAMP平臺(tái)2.2.3LAMP的部署及測(cè)試1.Apache的安裝與測(cè)試對(duì)動(dòng)態(tài)頁(yè)面進(jìn)行測(cè)試,這里選用的是動(dòng)態(tài)語(yǔ)言中最常用的PHP語(yǔ)言作為測(cè)試對(duì)象。在網(wǎng)站根目錄編寫(xiě)一個(gè)PHP文件:(5)測(cè)試Apache是否能解析常見(jiàn)的動(dòng)態(tài)頁(yè)面[root@web1html]#vimindex.php<?phpphpinfo();?>2.2搭建LAMP平臺(tái)2.2.3LAMP的部署及測(cè)試1.Apache的安裝與測(cè)試在瀏覽器中訪問(wèn)39/index.php(5)測(cè)試Apache是否能解析常見(jiàn)的動(dòng)態(tài)頁(yè)面服務(wù)器僅僅把index.php當(dāng)作正常的靜態(tài)語(yǔ)言原封不動(dòng)地進(jìn)行輸出,并沒(méi)有對(duì)PHP語(yǔ)言進(jìn)行解釋?zhuān)@是因?yàn)锳pache本身并不能識(shí)別PHP語(yǔ)言。如果想達(dá)到預(yù)期效果,服務(wù)器需要先借助PHP軟件進(jìn)行翻譯,再根據(jù)翻譯后的含義進(jìn)行相關(guān)操作。2.2搭建LAMP平臺(tái)2.2.3LAMP的部署及測(cè)試2.PHP的安裝與測(cè)試[root@web1html]#yum-yinstallphp……此處省略部分代碼……已安裝:php.x86_640:5.4.16-48.el7作為依賴(lài)被安裝:libzip.x86_640:0.10.1-8.el7php-cli.x86_640:5.4.16-48.el7php-common.x86_640:5.4.16-48.el7完畢?。?)安裝PHP2.2搭建LAMP平臺(tái)2.2.3LAMP的部署及測(cè)試2.PHP的安裝與測(cè)試[root@web1html]#systemctlrestarthttpd(2)重啟Apache服務(wù)2.2搭建LAMP平臺(tái)2.2.3LAMP的部署及測(cè)試2.PHP的安裝與測(cè)試安裝PHP之后,Apache可以實(shí)現(xiàn)對(duì)動(dòng)態(tài)頁(yè)面的正常訪問(wèn)。需要注意的是安裝PHP之后,需要重啟Apache,才能實(shí)現(xiàn)Apache與PHP的連接。(3)再次訪問(wèn)index.php2.2搭建LAMP平臺(tái)2.2.3LAMP的部署及測(cè)試3.?dāng)?shù)據(jù)庫(kù)的安裝與測(cè)試[root@web1~]#yum-yinstallmariadbmariadb-server……此處省略部分代碼……已安裝:
mariadb.x86_641:5.5.64-1.el7mariadb-server.x86_641:5.5.64-1.el7作為依賴(lài)被安裝:perl-Compress-Raw-Bzip2.x86_640:2.061-3.el7perl-Compress-Raw-Zlib.x86_641:2.061-4.el7perl-DBD-MySQL.x86_640:4.023-6.el7perl-DBI.x86_640:1.627-4.el7(1)安裝MariaDB客戶(hù)端與服務(wù)端perl-Data-Dumper.x86_640:2.145-3.el7perl-IO-Compress.noarch0:2.061-2.el7perl-Net-Daemon.noarch0:0.48-5.el7perl-PlRPC.noarch0:0.2020-14.el7作為依賴(lài)被升級(jí):mariadb-libs.x86_641:5.5.68-1.el7完畢!2.2搭建LAMP平臺(tái)2.2.3LAMP的部署及測(cè)試3.?dāng)?shù)據(jù)庫(kù)的安裝與測(cè)試(1)安裝MariaDB客戶(hù)端與服務(wù)端啟動(dòng)MariaDB服務(wù),并設(shè)置其開(kāi)機(jī)自啟[root@web1~]#systemctlstartmariadb[root@web1~]#systemctlenablemariadb2.2搭建LAMP平臺(tái)2.2.3LAMP的部署及測(cè)試3.?dāng)?shù)據(jù)庫(kù)的安裝與測(cè)試(2)更改數(shù)據(jù)庫(kù)密碼首先,通過(guò)如下指令進(jìn)入數(shù)據(jù)庫(kù)安全設(shè)置模式。[root@web1~]#mysql_secure_installation2.2搭建LAMP平臺(tái)2.2.3LAMP的部署及測(cè)試3.?dāng)?shù)據(jù)庫(kù)的安裝與測(cè)試(2)更改數(shù)據(jù)庫(kù)密碼然后,對(duì)數(shù)據(jù)庫(kù)密碼進(jìn)行修改。這里設(shè)置的用戶(hù)名默認(rèn)為root,密碼為123。[root@web1~]#mysql_secure_installation……此處省略部分代碼……Entercurrentpasswordforroot(enterfornone):#回車(chē)OK,successfullyusedpassword,movingon...SettingtherootpasswordensuresthatnobodycanlogintotheMariaDBrootuserwithouttheproperauthorisation.Setrootpassword?[Y/n]YNewpassword:123Re-enternewpassword:123Passwordupdatedsuccessfully!Reloadingprivilegetables.....Success!……此處省略部分代碼……Cleaningup...Alldone!Ifyou'vecompletedalloftheabovesteps,yourMariaDBinstallationshouldnowbesecure.ThanksforusingMariaDB!2.2搭建LAMP平臺(tái)2.2.3LAMP的部署及測(cè)試3.?dāng)?shù)據(jù)庫(kù)的安裝與測(cè)試(3)登錄數(shù)據(jù)庫(kù)測(cè)試[root@web1~]#mysql-uroot-p123WelcometotheMariaDBmonitor.Commandsendwith;or\g.YourMariaDBconnectionidis11Serverversion:5.5.64-MariaDBMariaDBServerCopyright(c)2000,2018,Oracle,MariaDBCorporationAbandothers.Type'help;'or'\h'forhelp.Type'\c'toclearthecurrentinputstatement.MariaDB[(none)]>\qBye2.2搭建LAMP平臺(tái)2.2.3LAMP的部署及測(cè)試3.?dāng)?shù)據(jù)庫(kù)的安裝與測(cè)試(4)測(cè)試PHP與數(shù)據(jù)庫(kù)是否連通首先在網(wǎng)站根目錄下創(chuàng)建linktest.php,設(shè)定之前設(shè)置的數(shù)據(jù)庫(kù)賬戶(hù)及密碼,若能通過(guò)該賬戶(hù)密碼正常連接數(shù)據(jù)庫(kù),則返回Successfully,否則返回Fail。[root@web1~]#vim/var/www/html/linktest.php<?php$link=mysql_connect('localhost','root','123');if($link)echo"Successfully";elseecho"Fail";mysql_close();?>2.2搭建LAMP平臺(tái)2.2.3LAMP的部署及測(cè)試3.?dāng)?shù)據(jù)庫(kù)的安裝與測(cè)試(4)測(cè)試PHP與數(shù)據(jù)庫(kù)是否連通在瀏覽器上訪問(wèn)linktest.php服務(wù)器目前無(wú)法處理這個(gè)請(qǐng)求。雖然已經(jīng)安裝了數(shù)據(jù)庫(kù),但是并沒(méi)有將數(shù)據(jù)庫(kù)與網(wǎng)站服務(wù)連接起來(lái),缺少PHP與數(shù)據(jù)庫(kù)連接的插件。2.2搭建LAMP平臺(tái)2.2.3LAMP的部署及測(cè)試3.?dāng)?shù)據(jù)庫(kù)的安裝與測(cè)試(5)查看PHP的拓展模塊[root@web1~]#php-m|grepmysql2.2搭建LAMP平臺(tái)2.2.3LAMP的部署及測(cè)試3.?dāng)?shù)據(jù)庫(kù)的安裝與測(cè)試(6)安裝php-mysql[root@web1~]#yum-yinstallphp-mysql……此處省略部分代碼……已安裝:php-mysql.x86_640:5.4.16-48.el7作為依賴(lài)被安裝:php-pdo.x86_640:5.4.16-48.el7完畢!2.2搭建LAMP平臺(tái)2.2.3LAMP的部署及測(cè)試3.?dāng)?shù)據(jù)庫(kù)的安裝與測(cè)試(7)再次查看PHP的拓展模塊[root@web1~]#php-m|grepmysqlmysqlmysqlipdo_mysql2.2搭建LAMP平臺(tái)2.2.3LAMP的部署及測(cè)試3.?dāng)?shù)據(jù)庫(kù)的安裝與測(cè)試(8)重啟Apache服務(wù)[root@web1~]#systemctlrestarthttpd2.2搭建LAMP平臺(tái)2.2.3LAMP的部署及測(cè)試3.?dāng)?shù)據(jù)庫(kù)的安裝與測(cè)試(9)再次在瀏覽器上訪問(wèn)linktest.php改動(dòng)linktest.php中的賬戶(hù)或密碼,這里將root改為rooot,再次訪問(wèn)linktest.php2.2搭建LAMP平臺(tái)2.2.3LAMP的部署及測(cè)試由此可知,在Apache上運(yùn)行一個(gè)網(wǎng)站是非常簡(jiǎn)單的,只要將源碼放入網(wǎng)站根目錄即可。隨著業(yè)務(wù)的發(fā)展,越來(lái)越多的公司選擇使用Java語(yǔ)言來(lái)開(kāi)發(fā)應(yīng)用。能夠發(fā)布JavaWeb程序的服務(wù)器需要支持Servlet和Jsp規(guī)范,常見(jiàn)的有Tomcat服務(wù)器、Resin服務(wù)器、JBoss服務(wù)器、WebLogic服務(wù)器等。其中Tomcat服務(wù)器性能穩(wěn)定且開(kāi)源免費(fèi),易被初學(xué)者掌握,因此,讀者在課余時(shí)間可以學(xué)習(xí)Tomcat服務(wù)器的相關(guān)內(nèi)容。2.3搭建LNMP平臺(tái)LNMP簡(jiǎn)介L(zhǎng)NMP的部署及測(cè)試2.3
搭建LNMP平臺(tái)2.3.1
LNMP簡(jiǎn)介L(zhǎng)AMP是LinuxNginxMySQLPHP的簡(jiǎn)寫(xiě),即把Nginx、MySQL以及PHP安裝在Linux系統(tǒng)上,組成一個(gè)高效、免費(fèi)、高擴(kuò)展的網(wǎng)站服務(wù)系統(tǒng),是國(guó)內(nèi)大中型互聯(lián)網(wǎng)公司網(wǎng)站常用的Web搭建框架。LAMP中是以Apache作為Web服務(wù)器與客戶(hù)端瀏覽器進(jìn)行交互,顧名思義,在LNMP環(huán)境中,是以Nginx作為Web服務(wù)器。Nginx(enginex)是一款高性能、輕量級(jí)的Web服務(wù)器,是一款反向代理服務(wù)器,也是一款郵箱代理服務(wù)器(IMAP/POP3/SMTP),具有性能優(yōu)越、功能豐富、占有內(nèi)存少等優(yōu)點(diǎn)。Nginx既適用于靜態(tài)業(yè)務(wù)又適用于動(dòng)態(tài)業(yè)務(wù),國(guó)內(nèi)的百度、淘寶、阿里、小米等知名網(wǎng)站都在使用Nginx來(lái)滿足其高并發(fā)業(yè)務(wù)的需求,已經(jīng)開(kāi)始逐漸代替Apache。2.3
搭建LNMP平臺(tái)2.3.1
LNMP簡(jiǎn)介L(zhǎng)NMP的工作原理如圖所示。瀏覽器發(fā)送請(qǐng)求到服務(wù)器(Nginx),服務(wù)器響應(yīng)并處理Web請(qǐng)求。如果是靜態(tài)文本直接返回,否則將腳本(PHP)通過(guò)接口傳輸協(xié)議(網(wǎng)關(guān)協(xié)議)PHP-FCGI(fast-cgi,快速通用網(wǎng)關(guān)接口)傳輸給PHP-FPM(進(jìn)程管理程序),然后PHP-FPM調(diào)用PHP解析器的其中一個(gè)進(jìn)程PHP-CGI來(lái)解析PHP腳本信息。然后將解析后的腳本返回到PHP-FPM,PHP-FPM再通過(guò)fast-cgi的形式將腳本信息傳送給Nginx。服務(wù)器再通過(guò)Httpresponse的形式傳送給瀏覽器。瀏覽器再進(jìn)行解析與渲染然后呈現(xiàn)給用戶(hù)。2.3
搭建LNMP平臺(tái)2.3.2
LNMP的分離部署及測(cè)試在本案例中準(zhǔn)備兩臺(tái)VM虛擬機(jī)(或物理服務(wù)器),分離部署LNMP環(huán)境,如表所示。說(shuō)明:其中,應(yīng)用程序及文件服務(wù)器需要Nginx+PHP-FPM插件支持,數(shù)據(jù)庫(kù)服務(wù)器采用Mariadb進(jìn)行實(shí)現(xiàn)。操作系統(tǒng)版本CentOS7.6,提前關(guān)閉防火墻及SELinux(過(guò)程不再贅述)。HostNameIP說(shuō)明web139應(yīng)用程序及文件服務(wù)器db140數(shù)據(jù)庫(kù)服務(wù)器2.3
搭建LNMP平臺(tái)2.3.2
LNMP的分離部署及測(cè)試(1)在準(zhǔn)備的應(yīng)用服務(wù)器(1)上部署Nginx。首先查詢(xún)Nginx的安裝包信息。[root@web1~]#yuminfonginx已加載插件:fastestmirrorLoadingmirrorspeedsfromcachedhostfile*base:*extras:*updates:可安裝的軟件包名稱(chēng):nginx架構(gòu):x86_64時(shí)期:1版本:1.20.1發(fā)布:9.el7大小:587k源:epel/x86_64簡(jiǎn)介:Ahighperformancewebserverandreverseproxyserver網(wǎng)址:協(xié)議:BSD描述:NginxisawebserverandareverseproxyserverforHTTP,SMTP,POP3and:IMAPprotocols,withastrongfocusonhighconcurrency,performanceandlow:memoryusage.1.部署Nginx2.3
搭建LNMP平臺(tái)2.3.2
LNMP的分離部署及測(cè)試(2)利用yum工具就可以實(shí)現(xiàn)Nginx的安裝。[root@web1~]#yum-yinstallnginx……此處省略部分代碼……已安裝:nginx.x86_641:1.20.1-9.el7作為依賴(lài)被安裝:centos-indexhtml.noarch0:7-9.el7.centosgperftools-libs.x86_640:2.6.1-1.el7nginx-filesystem.noarch1:1.20.1-9.el7openssl11-libs.x86_641:1.1.1k-2.el7完畢!1.部署Nginx(3)啟動(dòng)Nginx服務(wù),并設(shè)置該項(xiàng)服務(wù)開(kāi)機(jī)自啟。[root@web1~]#systemctlstartnginx[root@web1~]#systemctlenablenginx2.3
搭建LNMP平臺(tái)2.3.2
LNMP的分離部署及測(cè)試(4)Nginx服務(wù)啟動(dòng)后,會(huì)堅(jiān)守在系統(tǒng)的80端口等待用戶(hù)請(qǐng)求的到來(lái)。檢查Nginx是否正常工作在80端口。[root@web1~]#netstat-unltp|grep80tcp00:80:*LISTEN14484inx:mastertcp600:::80:::*LISTEN14484inx:master1.部署Nginx(5)打開(kāi)瀏覽器,輸入IP,即可看到Nginx的歡迎界面Nginx服務(wù)正常工作因?yàn)镹ginx.conf文件中指向的/usr/share/nginx/html/index.html是CentOS歡迎頁(yè)面,并不影響Nginx的正常啟動(dòng)。2.3
搭建LNMP平臺(tái)2.3.2
LNMP的分離部署及測(cè)試(6)現(xiàn)在測(cè)試Nginx是否能解析常見(jiàn)的動(dòng)靜態(tài)頁(yè)面。首先對(duì)靜態(tài)網(wǎng)頁(yè)進(jìn)行測(cè)試。Nginx的默認(rèn)網(wǎng)站目錄是/usr/share/nginx/html,先切換到該路徑,再創(chuàng)建Html靜態(tài)頁(yè)面,具體如下所示。[root@web1~]#cd/usr/share/nginx/html[root@web1html]#vimindex.htmlWelcometotheworld!1.部署Nginx網(wǎng)站的默認(rèn)目錄是/usr/share/nginx/html,源碼包一般放在這里。錯(cuò)誤日志目錄是/var/log/nginx/access.log,在實(shí)驗(yàn)過(guò)程中,經(jīng)常會(huì)出錯(cuò),需要認(rèn)真查看錯(cuò)誤日志,進(jìn)行排錯(cuò)。(7)在瀏覽器中輸入IP地址,訪問(wèn)結(jié)果如圖。靜態(tài)頁(yè)面被成功解析,訪問(wèn)正常2.3
搭建LNMP平臺(tái)2.3.2
LNMP的分離部署及測(cè)試(8)其次對(duì)動(dòng)態(tài)頁(yè)面進(jìn)行測(cè)試,這里選用的是動(dòng)態(tài)語(yǔ)言中最常用的PHP語(yǔ)言作為測(cè)試對(duì)象。在網(wǎng)站根目錄編寫(xiě)一個(gè)PHP文件。[root@web1html]#vimindex.php<?phpphpinfo();?>按Esc,輸入:wq進(jìn)行保存。1.部署Nginx(9)在瀏覽器中訪問(wèn)39/index.php,結(jié)果如圖。服務(wù)器并不認(rèn)識(shí)index.php,將其當(dāng)作其他文件進(jìn)行下載。2.3
搭建LNMP平臺(tái)2.3.2
LNMP的分離部署及測(cè)試(1)下載安裝PHP-FPM及相關(guān)插件。[root@web1~]#yuminstall-yphp-fpmphp-mysqlphp-gd2.部署PHP-FPMNginx不支持對(duì)外部動(dòng)態(tài)程序的直接調(diào)用或者解析,所有的外部程序(包括PHP)必須通過(guò)FastCGI接口來(lái)調(diào)用。想要讓服務(wù)器可以處理PHP文件,則必須安裝PHP-FPM。此處采用YUM安裝的方式進(jìn)行介紹,此操作依然在應(yīng)用服務(wù)器(39)上進(jìn)行。(2)PHP-FPM安裝完成后,將其開(kāi)啟并設(shè)置其開(kāi)機(jī)自啟。不僅安裝了PHP-FPM,還安裝了相關(guān)依賴(lài)包。其中,PHP-Mysql是用于連接Mysql數(shù)據(jù)庫(kù)的程序,PHP-GD是用于處理圖片或者生成圖片的圖形庫(kù)程序。[root@web1~]#systemctlstartphp-fpm[root@web1~]#systemctlenablephp-fpm2.3
搭建LNMP平臺(tái)2.3.2
LNMP的分離部署及測(cè)試(3)PHP正常工作在9000端口,查看PHP-FPM的進(jìn)程信息。[root@qfedu~]#netstat-anpt|grepphp-fpmtcp00:9000:*LISTEN72441/php-fpm:mast(4)由于Nginx默認(rèn)只處理以.html結(jié)尾的文件,而現(xiàn)在網(wǎng)站要處理PHP文件,那么需要將.php文件加入網(wǎng)站處理的范圍,更新網(wǎng)站接收的文件類(lèi)型。#在Nginx配置文件的Server模塊內(nèi)進(jìn)行添加即可。[root@web1~]#vim/etc/nginx/conf.d/default.confserver{listen80;server_namelocalhost;location/{root/usr/share/nginx/html;indexindex.htmlindex.htmindex.php;}#省略部分代碼}2.部署PHP-FPM服務(wù)器9000端口已經(jīng)被PHP-FPM程序使用。2.3
搭建LNMP平臺(tái)2.3.2
LNMP的分離部署及測(cè)試(5)除了添加PHP主頁(yè)名稱(chēng),還需在其配置文件的Server模塊啟用nginx_fastcgi功能,修改其調(diào)用路徑,修改后的內(nèi)容如下所示。location~\.php${root/usr/share/nginx/html;fastcgi_pass:9000;fastcgi_indexindex.php;fastcgi_paramSCRIPT_FILENAME/$document_root$fastcgi_script_name;includefastcgi_params;}2.部署PHP-FPM其中一些參數(shù)的含義如下所示。location~\.php$表示收到類(lèi)似于.php結(jié)尾的請(qǐng)求之后,將執(zhí)行以下配置,“~”符號(hào)表示類(lèi)似;fastcgi_pass表示請(qǐng)求將發(fā)送的端口,此處為本機(jī)9000端口;fastcgi_index表示PHP的默認(rèn)主頁(yè);fastcgi_param表示調(diào)用PHP的環(huán)境變量,此處調(diào)用了腳本文件的請(qǐng)求路徑。2.3
搭建LNMP平臺(tái)2.3.2
LNMP的分離部署及測(cè)試(6)修改完成后,再次重啟Nginx,訪問(wèn)測(cè)試文件index.php,結(jié)果如圖。2.部署PHP-FPM此時(shí)已經(jīng)可以看到PHP的基礎(chǔ)信息,包括版本信息、創(chuàng)建時(shí)間、文件路徑等,應(yīng)用服務(wù)器已部署完成,接下來(lái)將介紹數(shù)據(jù)庫(kù)服務(wù)器的配置方式。2.3
搭建LNMP平臺(tái)2.3.2
LNMP的分離部署及測(cè)試(1)在準(zhǔn)備的數(shù)據(jù)庫(kù)服務(wù)器(40)上部署Mariadb。首先安裝MariaDB客戶(hù)端與服務(wù)端。[root@db1~]#yum-yinstallmariadbmariadb-server……此處省略部分代碼……已安裝:mariadb.x86_641:5.5.68-1.el7mariadb-server.x86_641:5.5.68-1.el7作為依賴(lài)被安裝:perl-Compress-Raw-Bzip2.x86_640:2.061-3.el7perl-Compress-Raw-Zlib.x86_641:2.061-4.el7perl-DBD-MySQL.x86_640:4.023-6.el7perl-DBI.x86_640:1.627-4.el7perl-Data-Dumper.x86_640:2.145-3.el7perl-IO-Compress.noarch0:2.061-2.el7perl-Net-Daemon.noarch0:0.48-5.el7perl-PlRPC.noarch0:0.2020-14.el7作為依賴(lài)被升級(jí):mariadb-libs.x86_641:5.5.68-1.el7完畢!完畢!3.部署數(shù)據(jù)庫(kù)(2)啟動(dòng)MariaDB服務(wù),并設(shè)置其開(kāi)機(jī)自啟。[root@db1~]#systemctlstartmariadb[root@db1~]#systemctlenablemariadb2.3
搭建LNMP平臺(tái)2.3.2
LNMP的分離部署及測(cè)試(3)通過(guò)如下指令進(jìn)入數(shù)據(jù)庫(kù)安全設(shè)置模式,更改數(shù)據(jù)庫(kù)密碼。[root@db1~]#mysql_secure_installationNOTE:RUNNINGALLPARTSOFTHISSCRIPTISRECOMMENDEDFORALLMariaDBSERVERSINPRODUCTIONUSE!PLEASEREADEACHSTEPCAREFULLY!InordertologintoMariaDBtosecureit,we'llneedthecurrentpasswordfortherootuser.Ifyou'vejustinstalledMariaDB,andyouhaven'tsettherootpasswordyet,thepasswordwillbeblank,soyoushouldjustpressenterhere.Entercurrentpasswordforroot(enterfornone):OK,successfullyusedpassword,movingon...SettingtherootpasswordensuresthatnobodycanlogintotheMariaDBrootuserwithouttheproperauthorisation.Setrootpassword?[Y/n]YNewpassword:123Re-enternewpassword:123Passwordupdatedsuccessfully!Reloadingprivilegetables.....Success!……此處省略部分代碼……Cleaningup...Alldone!Ifyou'vecompletedalloftheabovesteps,yourMariaDBinstallationshouldnowbesecure.ThanksforusingMariaDB!3.部署數(shù)據(jù)庫(kù)這里設(shè)置的用戶(hù)名默認(rèn)為root,密碼為123。2.3
搭建LNMP平臺(tái)2.3.2
LNMP的分離部署及測(cè)試(4)登陸數(shù)據(jù)庫(kù)測(cè)試,并授予應(yīng)用服務(wù)器操作權(quán)限。[root@db1~]#mysql-uroot-p123WelcometotheMariaDBmonitor.Commandsendwith;or\g.YourMariaDBconnectionidis11Serverversion:5.5.68-MariaDBMariaDBServerCopyright(c)2000,2018,Oracle,MariaDBCorporationAbandothers.Type'help;'or'\h'forhelp.Type'\c'toclearthecurrentinputstatement.MariaDB[(none)]>grantallon*.*toroot@'39'identifiedby'123';QueryOK,0rowsaffected(0.00sec)MariaDB[(none)]>flushprivileges;QueryOK,0rowsaffected(0.00sec)MariaDB[(none)]>\qBye3.部署數(shù)據(jù)庫(kù)成功登錄數(shù)據(jù)庫(kù)完成相關(guān)授權(quán)。2.3
搭建LNMP平臺(tái)2.3.2
LNMP的分離部署及測(cè)試(5)在網(wǎng)站默認(rèn)目錄下創(chuàng)建文件link.php。[root@db1~]#cat/usr/share/nginx/html/link.php<?php$link=mysql_connect('2','root','123');if($link)echo"Successfully";elseecho"Fail";mysql_close();?>3.部署數(shù)據(jù)庫(kù)(6)在瀏覽器中訪問(wèn)link.php,結(jié)果如圖。2.4Nginx-負(fù)載均衡反向代理與負(fù)載均衡Nginx負(fù)載均衡的優(yōu)缺點(diǎn)Nginx負(fù)載均衡算法Nginx負(fù)載均衡后端狀態(tài)Nginx負(fù)載均衡的應(yīng)用2.4
Nginx-負(fù)載均衡2.4.1
反向代理與負(fù)載均衡Nginx不僅是一款優(yōu)秀的Web軟件,還可以作為七層代理和負(fù)載均衡。七層負(fù)載均衡在應(yīng)用層,可以完成很多應(yīng)用方面的協(xié)議請(qǐng)求,比如HTTP應(yīng)用負(fù)載均衡,它可以實(shí)現(xiàn)HTTP信息的改寫(xiě)、頭信息的改寫(xiě)、安全應(yīng)用規(guī)則控制、URL匹配規(guī)則控制,以及轉(zhuǎn)發(fā)、rewrite等規(guī)則。代理服務(wù)器(ProxyServer)是網(wǎng)絡(luò)信息的中轉(zhuǎn)站,是個(gè)人網(wǎng)絡(luò)和Internet服務(wù)商之間的中間代理機(jī)構(gòu),負(fù)責(zé)轉(zhuǎn)發(fā)合法的網(wǎng)絡(luò)信息,對(duì)轉(zhuǎn)發(fā)進(jìn)行控制和登記。代理服務(wù)器大多被用來(lái)連接Internet(國(guó)際互聯(lián)網(wǎng))和LocalAreaNetwork(局域網(wǎng))。根據(jù)連接方式的不同,代理可以被分為正向代理和反向代理。2.4
Nginx-負(fù)載均衡2.4.1
反向代理與負(fù)載均衡正向代理可以隱藏客戶(hù)端信息,使服務(wù)端無(wú)法判斷是否為惡意訪問(wèn),給網(wǎng)站帶來(lái)了極大的安全隱患。由此,網(wǎng)站同樣也會(huì)使用代理器,防止惡意的客戶(hù)端會(huì)Web服務(wù)器的直接訪問(wèn),而網(wǎng)站使用的代理器叫做反向代理。正向代理是處于客戶(hù)端與服務(wù)端之間的代理節(jié)點(diǎn)??蛻?hù)端將請(qǐng)求發(fā)送給正向代理,正向代理再向服務(wù)端進(jìn)行請(qǐng)求,最終正向代理將響應(yīng)返回給客戶(hù)端,常見(jiàn)的正向代理有路由器、防火墻等。通常防火墻不允許客戶(hù)機(jī)直接訪問(wèn)外網(wǎng),正向代理的作用是代理內(nèi)網(wǎng)客戶(hù)機(jī)訪問(wèn)外網(wǎng),并使外網(wǎng)服務(wù)端對(duì)客戶(hù)機(jī)不可見(jiàn),如圖所示。2.4
Nginx-負(fù)載均衡2.4.1
反向代理與負(fù)載均衡正向代理和反向代理的區(qū)別在于代理的對(duì)象不一樣,正向代理的代理對(duì)象是客戶(hù)端,反向代理的代理對(duì)象是服務(wù)端。負(fù)載均衡也叫代理,是代理的一種,在Nginx負(fù)載集群中,Nginx僅僅是作為NginxProxy反向代理使用的,由于其反向代理的功能實(shí)現(xiàn)的效果是負(fù)載均衡集群的效果,本書(shū)把它稱(chēng)為Nginx負(fù)載均衡。Nginx做反向代理時(shí),可以根據(jù)URL進(jìn)行判斷,然后分配到不同的后臺(tái)Web服務(wù)器上,所以說(shuō)它是一個(gè)典型的七層負(fù)載均衡器。反向代理同樣是處于客戶(hù)端與服務(wù)端之間的代理節(jié)點(diǎn),與正向代理不同的是,反向代理是服務(wù)于客戶(hù)端的代理節(jié)點(diǎn)??蛻?hù)端的請(qǐng)求不會(huì)直接發(fā)送給服務(wù)端,而是先由反向代理服務(wù)器接收,再由反向代理發(fā)送給服務(wù)端,如圖所示。2.4
Nginx-負(fù)載均衡2.4.1
反向代理與負(fù)載均衡當(dāng)大量用戶(hù)訪問(wèn)網(wǎng)站時(shí),Nginx將用戶(hù)的請(qǐng)求轉(zhuǎn)發(fā)給后端對(duì)應(yīng)的服務(wù)器,服務(wù)器處理完請(qǐng)求后再轉(zhuǎn)發(fā)給Nginx負(fù)載均衡服務(wù)器,Nginx負(fù)載均衡服務(wù)器點(diǎn)最后響應(yīng)給客戶(hù)端,這樣即可實(shí)現(xiàn)負(fù)載均衡的功能,以提升系統(tǒng)的吞吐量、請(qǐng)求性能、高容災(zāi)。Nginx要實(shí)現(xiàn)負(fù)載均衡需要用到proxy_pass代理模塊配置,與Nginx的代理功能較為相似。當(dāng)客戶(hù)端訪問(wèn)時(shí),Nginx負(fù)載均衡將客戶(hù)端請(qǐng)求代理轉(zhuǎn)發(fā)至一組上游服務(wù)器,如圖所示。2.4
Nginx-負(fù)載均衡2.4.1
反向代理與負(fù)載均衡首先Nginx使用upstream模塊定義后端的上游服務(wù)器組。在上游服務(wù)器組中可以添加多臺(tái)后端服務(wù)器。然后在server模塊中定義虛擬主機(jī),但是這個(gè)虛擬主機(jī)不指定自己的Web目錄站點(diǎn),它將使用location規(guī)則匹配URL,然后轉(zhuǎn)發(fā)到上面定義好的上游服務(wù)器組中,最后根據(jù)調(diào)度算法再轉(zhuǎn)發(fā)到后端服務(wù)器上。Nginx負(fù)載均衡實(shí)現(xiàn)原理如圖所示。2.4
Nginx-負(fù)載均衡2.4.2
Nginx負(fù)載均衡的優(yōu)缺點(diǎn)Nginx作為負(fù)載均衡具備如下特點(diǎn)。1.作為開(kāi)源軟件,功能強(qiáng)大,性能卓越,運(yùn)行穩(wěn)定。2.配置文件簡(jiǎn)單靈活。3.有內(nèi)置的健康檢查功能,能夠自動(dòng)剔除工作不正常的后端服務(wù)器。4.上傳文件使用異步模式。5.支持多種分配策略,可以分配權(quán)重,分配方式靈活。Nginx作為負(fù)載均衡的優(yōu)缺點(diǎn)如下所示。優(yōu)點(diǎn)Nginx可以復(fù)制用戶(hù)請(qǐng)求。在后端服務(wù)器出現(xiàn)問(wèn)題時(shí),Nginx會(huì)再?gòu)?fù)制一份請(qǐng)求發(fā)給另一臺(tái)后端服務(wù)器。LVS在這種情況下,只能由用戶(hù)重新發(fā)請(qǐng)求。Nginx可以根據(jù)域名、URL識(shí)別用戶(hù)的請(qǐng)求類(lèi)型,因此Nginx可以做動(dòng)靜分離。而LVS作為4層負(fù)載均衡,只能針對(duì)IP進(jìn)行負(fù)載均衡,無(wú)法針對(duì)文件類(lèi)型做負(fù)載均衡。Nginx為開(kāi)源軟件,可以免費(fèi)使用。缺點(diǎn)Nginx不僅要把用戶(hù)的請(qǐng)求發(fā)送給后端真實(shí)服務(wù)器,還要將后端真實(shí)服務(wù)器返回的頁(yè)面發(fā)送給用戶(hù),流量會(huì)經(jīng)過(guò)Nginx,所以Nginx可能成為瓶頸。2.4
Nginx-負(fù)載均衡2.4.3
Nginx負(fù)載均衡算法負(fù)載均衡將流量分發(fā)給后端Web服務(wù)器,不同的算法對(duì)應(yīng)著負(fù)載均衡不同的流量分發(fā)方式。下面是Nginx常用的5種算法。1.輪詢(xún)算法(RoundRobin,簡(jiǎn)稱(chēng)RR)2.加權(quán)輪詢(xún)算法(WeightRoundRobin,簡(jiǎn)稱(chēng)WRR)3.IP_hash算法4.fair公平算法5.URL_hash算法2.4
Nginx-負(fù)載均衡2.4.3
Nginx負(fù)載均衡算法1.輪詢(xún)算法(RoundRobin,簡(jiǎn)稱(chēng)RR)輪詢(xún)算法是負(fù)載均衡分發(fā)流量的默認(rèn)算法。負(fù)載均衡調(diào)度器通過(guò)輪詢(xún)調(diào)度算法將外部請(qǐng)求按順序輪流分配到集群中的真實(shí)服務(wù)器上,它均等地對(duì)待每一臺(tái)服務(wù)器,而不管服務(wù)器上實(shí)際的連接數(shù)和系統(tǒng)負(fù)載。在配置文件的upstream模塊中輪詢(xún)算法的示例代碼。#配置服務(wù)器組upstreamtest{server1:8080;server2:8080;}server{······此處省略部分代碼······#引用服務(wù)器組location/{proxy_passhttp://test;proxy_set_headerHost$host:$server_port;}}2.4
Nginx-負(fù)載均衡2.4.3
Nginx負(fù)載均衡算法2.加權(quán)輪詢(xún)算法(WeightRoundRobin,簡(jiǎn)稱(chēng)WRR)負(fù)載均衡調(diào)度器可以通過(guò)weight指定輪詢(xún)的權(quán)重,權(quán)重(比例)越大,被調(diào)度的次數(shù)越多。在配置文件的upstream模塊中加權(quán)輪詢(xún)算法的示例代碼。upstreamtest{server1:8080weight=10;server2:8080weight=5;}3.IP_hash算法負(fù)載均衡調(diào)度器根據(jù)每個(gè)請(qǐng)求IP進(jìn)行調(diào)度,可以解決會(huì)話的問(wèn)題,且不能使用weight。即負(fù)載均衡調(diào)度器會(huì)將同一個(gè)客戶(hù)端IP,發(fā)給同一個(gè)Web服務(wù)器。在配置文件的upstream模塊中IP_hash算法的示例代碼。upstreamtest{ip_hash;server1:8080;server2:8080;}2.4
Nginx-負(fù)載均衡2.4.3
Nginx負(fù)載均衡算法4.fair公平算法fair公平算法是Nginx借助第三方插件實(shí)現(xiàn)的調(diào)度算法。負(fù)載均衡調(diào)度器可以根據(jù)請(qǐng)求頁(yè)面的大小和加載時(shí)間長(zhǎng)短進(jìn)行調(diào)度,前提是使用第三方的upstream_fair模塊。當(dāng)客戶(hù)端請(qǐng)求頁(yè)面比較大時(shí),負(fù)載均衡則將請(qǐng)求轉(zhuǎn)發(fā)給后端配置比較高的Web服務(wù)器。在配置文件的upstream模塊中fair公平算法的示例代碼。upstreambackserver{serverserver1;serverserver2;fair;}2.4
Nginx-負(fù)載均衡2.4.3
Nginx負(fù)載均衡算法5.URL_hash算法URL_hash算法是Nginx借助第三方插件實(shí)現(xiàn)的調(diào)度算法。負(fù)載均衡調(diào)度器按照客戶(hù)端請(qǐng)求的URL進(jìn)行hash之后再進(jìn)行調(diào)度,使每個(gè)URL定向到同一服務(wù)器,前提是使用第三方的hash模塊。當(dāng)用戶(hù)再一次之前訪問(wèn)過(guò)的頁(yè)面時(shí),負(fù)載均衡就將請(qǐng)求轉(zhuǎn)發(fā)給同一個(gè)真實(shí)服務(wù)器。在配置文件的upstream模塊中URL_hash算法的示例代碼。upstreambackserver{hash$request_uri;hash_methodcrc32;server1:8080;server2:8080;}2.4
Nginx-負(fù)載均衡2.4.4
Nginx負(fù)載均衡后端狀態(tài)后端Web服務(wù)器在前端Nginx負(fù)載均衡調(diào)度中的狀態(tài),主要有以下幾種。down:表示當(dāng)前的服務(wù)器暫時(shí)不參與負(fù)載。weight:默認(rèn)值為1。weight值越大,負(fù)載的權(quán)重就越大。max_fails:表示允許請(qǐng)求失敗的次數(shù),默認(rèn)值為1。當(dāng)超過(guò)最大次數(shù)時(shí),返回proxy_next_upstream模塊定義的錯(cuò)誤。fail_timeout:達(dá)到max_fails所指定的失敗次數(shù)后需要暫停的時(shí)間。backup:所有的非backup狀態(tài)的服務(wù)器,down或者壓力很大時(shí),backup服務(wù)器將會(huì)開(kāi)始接受請(qǐng)求,所以這臺(tái)服務(wù)器壓力會(huì)最小。client_body_in_file_only:設(shè)置為on可以將客戶(hù)端上傳的數(shù)據(jù)記錄到文件中用來(lái)做調(diào)試。client_body_temp_path:設(shè)置記錄文件的目錄,最多可以設(shè)置3層目錄。Location:對(duì)URL進(jìn)行匹配,可以進(jìn)行重定向或者進(jìn)行新的負(fù)載均衡。2.4
Nginx-負(fù)載均衡2.4.5
Nginx負(fù)載均衡的應(yīng)用實(shí)際上,對(duì)于用戶(hù)訪問(wèn)量不大的小型企業(yè)來(lái)說(shuō),一般用不到負(fù)載均衡。訪問(wèn)流量一般的中型企業(yè),通常只做四層負(fù)載均衡或七層負(fù)載均衡中的一種。而一些大型企業(yè)中,每時(shí)每刻訪問(wèn)量都非常大,通常四、七層負(fù)載均衡都會(huì)做,常見(jiàn)的負(fù)載架構(gòu)如圖所示。2.4
Nginx-負(fù)載均衡2.4.4
Nginx負(fù)載均衡后端狀態(tài)大型企業(yè)中首先會(huì)搭建LVS進(jìn)行四層請(qǐng)求的分發(fā),分發(fā)后的請(qǐng)求再經(jīng)過(guò)七層負(fù)載均衡器Nginx才能到達(dá)后端真實(shí)的服務(wù)器接受處理??偟膩?lái)說(shuō),負(fù)載均衡不論是各種軟件還是硬件上的解決方案,主要是將大量的并發(fā)請(qǐng)求按照一定的規(guī)律分發(fā)給不同的服務(wù)器處理,從而減少某臺(tái)服務(wù)器的瞬時(shí)壓力,提高網(wǎng)站的高可用性。Nginx在負(fù)載均衡的應(yīng)用之所以廣泛,主要?dú)w功于它的靈活配置,一個(gè)nginx.conf文件解決大部分問(wèn)題,不論是Nignx創(chuàng)建虛擬服務(wù)器、Nginx的反向代理服務(wù)器,還是本文介紹的Nginx的負(fù)載均衡,幾乎都在這個(gè)配置文件中進(jìn)行。在服務(wù)器上只需要把Nginx搭建完成即可運(yùn)行起來(lái),而且它是一款輕量級(jí)應(yīng)用,只需要占用小部分資源即可實(shí)現(xiàn)多種實(shí)用性功能。2.5Web集群實(shí)戰(zhàn)案例-業(yè)務(wù)上線工作原理準(zhǔn)備環(huán)境部署數(shù)據(jù)庫(kù)論壇業(yè)務(wù)上線部署負(fù)載均衡-Nginx實(shí)現(xiàn)Web服務(wù)負(fù)載均衡2.5
Web集群實(shí)戰(zhàn)案例-業(yè)務(wù)上線2.5.1
工作原理在負(fù)載均衡集群中,Web服務(wù)集群的所有服務(wù)器節(jié)點(diǎn)向客戶(hù)端提供相同的服務(wù)。集群負(fù)載均衡器則會(huì)接收用戶(hù)的入站請(qǐng)求,然后將請(qǐng)求分?jǐn)偨o后端的Web服務(wù)集群。這樣即可實(shí)現(xiàn)負(fù)載均衡的功能,以提升系統(tǒng)的吞吐量、請(qǐng)求性能、高容災(zāi)。本節(jié)的案例中,將Nginx作為負(fù)載均衡器,也是反向代理服務(wù)器,在Web集群上部署博客應(yīng)用,其工作原理如圖2.22所示。Nginx要實(shí)現(xiàn)負(fù)載均衡需要用到proxy_pass代理模塊配置,與Nginx的代理功能較為相似。所有用戶(hù)的請(qǐng)求統(tǒng)一發(fā)送到Nginx負(fù)載均衡器,然后根據(jù)負(fù)載均衡器的調(diào)度算法請(qǐng)求訪問(wèn)web1和web2。2.5
Web集群實(shí)戰(zhàn)案例-業(yè)務(wù)上線2.5.1
工作原理準(zhǔn)備4臺(tái)VM虛擬機(jī)(或者物理服務(wù)器),一臺(tái)做負(fù)載均衡器,兩臺(tái)Web服務(wù)器做集群,一臺(tái)做數(shù)據(jù)庫(kù)服務(wù)器,具體如表所示。HostNameIP說(shuō)明lb139Nginx負(fù)載均衡器web140Web服務(wù)器部署論壇應(yīng)用web241Web服務(wù)器部署論壇應(yīng)用db142數(shù)據(jù)庫(kù)服務(wù)器說(shuō)明:數(shù)據(jù)庫(kù)服務(wù)器采用Mariadb進(jìn)行實(shí)現(xiàn),操作系統(tǒng)版本CentOS7.6,提前關(guān)閉防火墻及SELinux(過(guò)程不再贅述)。2.5
Web集群實(shí)戰(zhàn)案例-業(yè)務(wù)上線2.5.1
工作原理為了保證各服務(wù)器的時(shí)間一致,保證工作內(nèi)容不會(huì)受時(shí)間干擾(有些計(jì)劃工作內(nèi)容與時(shí)間相關(guān)度很高),給用戶(hù)提供更優(yōu)質(zhì)的服務(wù),一般工作時(shí)都需要將網(wǎng)站后臺(tái)所有服務(wù)器的時(shí)間進(jìn)行校準(zhǔn)。1.首先,通過(guò)各個(gè)服務(wù)器上在服務(wù)器中安裝ntpdate工具,具體如下所示。在使用ntpdate工具校對(duì)時(shí)間時(shí),在命令中添加時(shí)間服務(wù)器的IP地址或域名即可。而時(shí)間服務(wù)器的IP地址或域名只需要通過(guò)搜索引擎進(jìn)行搜索即可得到。此處參考NTP授時(shí)快速域名服務(wù)網(wǎng)站(/),這個(gè)網(wǎng)站中有大量的時(shí)間服務(wù)器IP地址可供選擇。[root@qfedu~]#
yum-yinstallntpdate2.5
Web集群實(shí)戰(zhàn)案例-業(yè)務(wù)上線2.5.1
工作原理2.通過(guò)網(wǎng)站主頁(yè)面中的“IP池”,即可獲取時(shí)間服務(wù)器IP地址,如圖所示?!癐P池”中的時(shí)間服務(wù)器IP地址都是由網(wǎng)站本身、企業(yè)或個(gè)人提供的,為了保證其服務(wù)的可靠性,應(yīng)盡量選擇由網(wǎng)站本身或企業(yè)提供的時(shí)間服務(wù)器IP地址。3.此處選用阿里云提供的1進(jìn)行時(shí)間校對(duì),將“IP池”中對(duì)應(yīng)時(shí)區(qū)的時(shí)間服務(wù)器IP添加到時(shí)間調(diào)整命令中。[root@qfedu~]#ntpdate-u12.5
Web集群實(shí)戰(zhàn)案例-業(yè)務(wù)上線2.5.1
工作原理4.在線上業(yè)務(wù)中為了保證服務(wù)器系統(tǒng)時(shí)間的準(zhǔn)確性,可以通過(guò)配置計(jì)劃任務(wù)定時(shí)對(duì)系統(tǒng)時(shí)間進(jìn)行校準(zhǔn)。[root@qfedu~]#crontab-e*/30****ntpdate-u1[root@qfedu~]#crontab-l*/30****ntpdate-u1添加了一條每30分鐘校準(zhǔn)一次系統(tǒng)時(shí)間的計(jì)劃任務(wù)。2.5
Web集群實(shí)戰(zhàn)案例-業(yè)務(wù)上線2.5.3
部署數(shù)據(jù)庫(kù)1.在準(zhǔn)備的數(shù)據(jù)庫(kù)服務(wù)器(42)上部署Mariadb。首先安裝MariaDB客戶(hù)端與服務(wù)端[root@db1~]#yum-yinstallmariadbmariadb-server……此處省略部分代碼……已安裝:mariadb.x86_641:5.5.68-1.el7mariadb-server.x86_641:5.5.68-1.el7作為依賴(lài)被安裝:perl-Compress-Raw-Bzip2.x86_640:2.061-3.el7……此處省略部分代碼……
作為依賴(lài)被升級(jí):mariadb-libs.x86_641:5.5.68-1.el7完畢!完畢!2.啟動(dòng)MariaDB服務(wù),并設(shè)置其開(kāi)機(jī)自啟。[root@db1~]#systemctlstartmariadb[root@db1~]#systemctlenablemariadb2.5
Web集群實(shí)戰(zhàn)案例-業(yè)務(wù)上線2.5.3
部署數(shù)據(jù)庫(kù)3.通過(guò)如下指令進(jìn)入數(shù)據(jù)庫(kù)安全設(shè)置模式,更改數(shù)據(jù)庫(kù)密碼。[root@db1~]#mysql_secure_installation……此處省略部分代碼……Setrootpassword?[Y/n]YNewpassword:123Re-enternewpassword:123Passwordupdatedsuccessfully!Reloadingprivilegetables.....Success!……此處省略部分代碼……Cleaningup...Alldone!Ifyou'vecompletedalloftheabovesteps,yourMariaDBinstallationshouldnowbesecure.ThanksforusingMariaDB!這里設(shè)置的用戶(hù)名默認(rèn)為root,密碼為123。2.5
Web集群實(shí)戰(zhàn)案例-業(yè)務(wù)上線2.5.3
部署數(shù)據(jù)庫(kù)4.登錄數(shù)據(jù)庫(kù),授予Web服務(wù)器操作權(quán)限,然后創(chuàng)建網(wǎng)站數(shù)據(jù)庫(kù)。[root@db1~]#mysql-uroot-p123……此處省略部分代碼……MariaDB[(none)]>grantallon*.*toroot@'40'identifiedby'123';QueryOK,0rowsaffected(0.00sec)MariaDB[(none)]>grantallon*.*toroot@'41'identifiedby'123';QueryOK,0rowsaffected(0.00sec)#創(chuàng)建discuz數(shù)據(jù)庫(kù),做Web集群的數(shù)據(jù)庫(kù)MariaDB[(none)]>createdatabasediscuz;QueryOK,1rowaffected(0.21sec)MariaDB[(none)]>flushprivileges;QueryOK,0rowsaffected(0.06sec)MariaDB[(none)]>\qBye2.5
Web集群實(shí)戰(zhàn)案例-業(yè)務(wù)上線2.5.4
論壇業(yè)務(wù)上線1.在兩臺(tái)Web服務(wù)器上搭建LNMP環(huán)境,首先安裝Nginx,并設(shè)置為開(kāi)機(jī)自啟。[root@web1~]#yuminstall-ynginx[root@web1~]#systemctlstartnginx[root@web1~]#systemctlenablenginx2.Nginx服務(wù)啟動(dòng)后,會(huì)堅(jiān)守在系統(tǒng)的80端口等待用戶(hù)請(qǐng)求的到來(lái)。檢查Nginx是否正常工作在80端口。[root@web1~]#netstat-unltp|grep80tcp00:80:*LISTEN14484inx:mastertcp600:::80:::*LISTEN14484inx:master3.下載安裝PHP-FPM及相關(guān)插件。[root@web1~]#yuminstall-yphp-fpmphp-mysqlphp-gd4.PHP-FPM安裝完成后,將其開(kāi)啟并設(shè)置其開(kāi)機(jī)自啟。[root@web1~]#systemctlstartphp-fpm[root@web1~]#systemctlenablephp-fpm2.5
Web集群實(shí)戰(zhàn)案例-業(yè)務(wù)上線2.5.4
論壇業(yè)務(wù)上線5.PHP正常工作在9000端口,查看PHP-FPM的進(jìn)程信息。[root@web1~]#netstat-anpt|grepphp-fpmtcp00:9000:*LISTEN72441/php-fpm:mast6.由于Nginx默認(rèn)只處理以.html結(jié)尾的文件,而現(xiàn)在網(wǎng)站要處理PHP文件,那么需要將.php文件加入網(wǎng)站處理的范圍,更新網(wǎng)站接收的文件類(lèi)型。[root@web1~]#vi/etc/nginx/conf.d/default.confserver{listen80;server_namelocalhost;location/{root/usr/share/nginx/html;indexindex.phpindex.htmlindex.htm;}location
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年河南東龍控股集團(tuán)有限公司招聘筆試參考題庫(kù)含答案解析
- 綿陽(yáng)市二零二五年度長(zhǎng)租公寓租賃管理合同4篇
- 2025年度購(gòu)房合同霸王條款解析:購(gòu)房者維權(quán)手冊(cè)3篇
- 2025年江蘇連云港市東海城投集團(tuán)招聘筆試參考題庫(kù)含答案解析
- 2025年版醫(yī)療廢棄物無(wú)害化處置及資源化利用合同3篇
- 2025年浙江國(guó)企湖州市產(chǎn)業(yè)投資發(fā)展集團(tuán)有限公司招聘筆試參考題庫(kù)附帶答案詳解
- 二零二五民間借貸裁判觀點(diǎn)解讀與案例研究合同3篇
- 漳州理工職業(yè)學(xué)院《教師職業(yè)技能》2023-2024學(xué)年第一學(xué)期期末試卷
- 張家口職業(yè)技術(shù)學(xué)院《新時(shí)期文學(xué)思潮》2023-2024學(xué)年第一學(xué)期期末試卷
- 扎蘭屯職業(yè)學(xué)院《秘書(shū)學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025年病案編碼員資格證試題庫(kù)(含答案)
- 企業(yè)財(cái)務(wù)三年戰(zhàn)略規(guī)劃
- 提高膿毒性休克患者1h集束化措施落實(shí)率
- 山東省濟(jì)南市天橋區(qū)2024-2025學(xué)年八年級(jí)數(shù)學(xué)上學(xué)期期中考試試題
- 主播mcn合同模板
- 新疆2024年中考數(shù)學(xué)試卷(含答案)
- 2024測(cè)繪個(gè)人年終工作總結(jié)
- DB11 637-2015 房屋結(jié)構(gòu)綜合安全性鑒定標(biāo)準(zhǔn)
- 制造業(yè)生產(chǎn)流程作業(yè)指導(dǎo)書(shū)
- DB34∕T 4444-2023 企業(yè)信息化系統(tǒng)上云評(píng)估服務(wù)規(guī)范
- 福建中閩能源股份有限公司招聘筆試題庫(kù)2024
評(píng)論
0/150
提交評(píng)論