IT技(ji)術互動交流平台(tai)

彩吧助手官网

來源(yuan)︰IT165收集  發(fa)布(bu)日期︰2020-02-26 14:42:02

轉載(zai)請(qing)注明(ming)出處︰http://blog.csdn.net/smartbetter/article/details/53535435

Nginx是一種zhi)衿魅砑 彩且恢指 閱艿ttp和反(fan)向代(dai)理(li)服務器,同時還是一個代(dai)理(li)郵件服務器。也就是說(shuo),我們在Nginx上可(ke)以發(fa)布(bu)網(wang)站(zhan),可(ke)以實現負載(zai)均衡(提高應答效率,避免服務器崩潰),還可(ke)以作為(wei)郵件服務器實現收發(fa)郵件等功能。而最常見的就是使用Nginx實現負載(zai)均衡。

Nginx與(yu)其他服務器的性能比較︰

Tomcat服務器面(mian)向Java語言,是重量級的服務器,而Nginx是輕量級的服務器。Apache服務器穩定、開源(yuan)、跨平台(tai),但是Apache服務器不支(zhi)持(chi)高並發(fa),Nginx能支(zhi)持(chi)處理(li)百萬(wan)級的TCP連(lian)接,10萬(wan)以上的並發(fa)連(lian)接,並且是一個很好的泡泡彩票官网跨平台(tai)服務器。
Nginx主要優點有可(ke)以實現高並發(fa)、部署簡單、內存消耗少、成本低等,主要缺(que)點有rewrite功能不夠強大,模塊沒有Apache的多。

本篇主要講解(jie) Nginx + Tomcat 反(fan)向代(dai)理(li)和負載(zai)均衡的部署,以通俗(su)實用為(wei)主。本篇文章每個部分之間沒有太大關系,可(ke)根據需求分開學習。

下(xia)來看一下(xia)Nginx反(fan)向代(dai)理(li)的過程︰
Nginx反(fan)向代(dai)理(li)的過程

Nginx負載(zai)均衡的過程(會(hui)自動選擇壓力(li)較小(xiao)的服務器進行訪問)︰

Nginx負載(zai)均衡的過程

可(ke)以看出,負載(zai)均衡是通過反(fan)向代(dai)理(li)的原理(li)實現的,所以也稱 反(fan)向代(dai)理(li)的負載(zai)均衡 。所以我們會(hui)部署負載(zai)均衡,那(na)麼(me)反(fan)向代(dai)理(li)也就會(hui)了。

總的來說(shuo),負載(zai)均衡實現的方式(shi)分為(wei)軟件實現和硬bu)迪至街鄭 布(bu)迪衷誦械男 史fei)常高,但是對應的成本也非(fei)常高。軟件實現運行效率不如硬bu)  淺殺鞠嘍岳此shuo)低得多。而使用Nginx服務器實現負載(zai)均衡,那(na)麼(me)就是通過軟件的方式(shi)來實現負載(zai)均衡,並且Nginx本身(shen)支(zhi)持(chi)高並發(fa)等。故而使用Nginx服務器實現負載(zai)均衡,能大大節約(yue)企(qi)業的成本,並且由(you)于Nginx是服務器軟件,其執行效率也是非(fei)常高。本篇的目的也就是qian)鎦蠹jia)使用Nginx實現負載(zai)均衡。

負載(zai)均衡的核心就是建(jian)立一個服務器集群,然後用戶首先que)夢實降諶醬dai)理(li)服務器(這里我們選用Nginx),然後由(you)代(dai)理(li)服務器選擇一個集群中的服務器,然後將請(qing)求引(yin)入選定的服務器(這里我們選用Tomcat)。

如下(xia)圖(tu),通過反(fan)向代(dai)理(li)我們實現下(xia)面(mian)的負載(zai)均衡,這里我們 假定 四台(tai)服務器公(gong)網(wang)的ip,一台(tai)做(zuo)代(dai)理(li)服務器,三台(tai)做(zuo)負載(zai)均衡下(xia)的服務器︰

具體(ti)實現負載(zai)均衡

好了,整體(ti)架構已經基本上清晰了,下(xia)來ci)頤搶淳嚀ti)實現下(xia)︰

提示︰本篇我們基本上都是使用SSH進行相關操作的,Windows下(xia)可(ke)以嘗試安裝PuTTY,Mac下(xia)直接使用系統自yuan)鬧斬斯?嘸ji)可(ke)。

1.Linux下(xia)搭建(jian)Nginx服務器

我們在 192.168.2.20 這台(tai)服務器上搭建(jian)Nginx服務器︰

1)下(xia)載(zai)Nginx http://nginx.org/

2)上傳服務器Nginx安裝包

$ scp ~/Downloads/nginx-1.10.2.tar.gz root@192.168.2.20:/usr/local

3)安裝Nginx

$ ssh root@192.168.2.20    //SSH連(lian)接# yum -y install gcc gcc-c++ autoconf automake //gcc、gcc-c++的庫(ku)文件# yum install -y pcre pcre-devel   //安裝Nginx依賴包# yum install -y zlib zlib-devel

注意︰-y表示遇到判斷全部yes,autoconf表示自動配置,automake表示自動編(bian)譯。

# cd /usr/local# tar -zxvf nginx-1.10.2.tar.gz   //解(jie)壓縮# cd nginx-1.10.2    //切換到該目錄下(xia)# ./configure     //配置# make# make install     //安裝

檢驗是否(fu)完成安裝︰

# cd /usr/local# ls      //如果(guo)存在nginx文件夾(jia),則(ze)安裝成功

經過上面(mian)的安裝步驟和目錄設(she)置,nginx的啟動程序就是/usr/local/nginx/sbin/nginx,默認(ren)配置文件是/usr/local/nginx/conf/nginx.conf,但是不建(jian)議直接編(bian)輯nginx.conf,一般我們都選擇新建(jian)配置文件,然後在新建(jian)的配置文件中修改端口、反(fan)向代(dai)理(li)路(lu)徑等。

2.Nginx的啟動、停止、信號控制

1)啟動Nginx服務器(格式(shi)︰Nginx可(ke)執行文件 -c Nginx配置文件)︰

# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

2)停止Nginx服務器︰

停止Nginx服務器首先要查詢Nginx的主進程號(master process),假設(she)此處查詢得到1060(方便(bian)下(xia)面(mian)演示使用)︰

# ps -efgrep nginx

下(xia)來看如何停止Nginx服務器,停止Nginx有三種zhi)絞shi)︰

從(cong)容停止︰

# ps -efgrep nginx //查看Nginx的主進程號(master process),假設(she)此處查詢得到1060# kill -quit 1060

快速停止︰

# kill -term 1060

強制停止︰

# pkill -9 nginx

3)重啟Nginx服務器︰

當我們修改了Nginx配置文件,需要重啟才能生效。我們在重啟之前(qian)還需要驗證配置文件的正(zheng)確(que)性,然後進行重啟操作︰

# /usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf //驗證# /usr/local/nginx/sbin/nginx -s reload     //重啟

4)平滑升級Nginx服務器

平滑升級不會(hui)停掉在運行著的進程,這些進程會(hui)繼續(xu)處理(li)請(qing)求,但不會(hui)再接受新請(qing)求,在這些老進程在處理(li)完還在處理(li)的na)qing)求後,停止。此平滑升級的過程中,新開的進程會(hui)被處理(li)。這就是平滑升級。

# /usr/local/nginx/sbin/nginx -v  //查看當前(qian)版(ban)本

下(xia)面(mian)進行平滑升級︰

# cd /usr/local# tar -zxvf nginx-1.11.6.tar.gz  //解(jie)壓縮 新版(ban)本Nginx# cd nginx-1.11.6    //切換到該目錄下(xia)# ./configure    //配置# make# cd /usr/local/nginx/sbin   //打開 舊版(ban)本Nginx可(ke)執行文件位置# cp nginx nginx.old   //備(bei)份 舊版(ban)本Nginx可(ke)執行文件,防止升級錯誤而無法(fa)恢復# cp -rfp /usr/local/nginx-1.11.6/objs/nginx /usr/local/nginx/sbin //復制新版(ban)本可(ke)執行文件到舊版(ban)本處# rm -f /usr/local/nginx-1.11.6.tar.gz //善後工作 刪jing)顧蹺募 rm -rf /usr/local/nginx-1.11.6  //刪jing)募jia)

至此,Nginx服務器平滑升級成功。

3.Nginx中負載(zai)均衡的實現

我們還是先連(lian)接SSH,然後進行下(xia)面(mian)操作(一般不建(jian)議修改默認(ren)主配置文件nginx.conf,所以我們新建(jian)負載(zai)均衡配置文件fzjh.conf,保證服務器安全,如下(xia))︰

# cd /usr/local/nginx/conf# touch fzjh.conf# vi fzjh.conf //用vi編(bian)輯器打開文件,然後按(an)鍵盤的i

注意︰vi編(bian)輯器中,鍵盤按(an) i 進入 INSERT 狀(zhuang)態,按(an) Esc 退出 INSERT 狀(zhuang)態。
然後輸(shu)入以下(xia)配置me)dai)碼(注釋部分按(an)需開啟)︰

#設(she)置低權限(xian)用戶,為(wei)了安全而設(she)置的user nobody;#工作衍生進程數worker_processes 4;#設(she)置me)砦笪募娣怕lu)徑#error_log logs/error.log;#error_log logs/error.log notice;#error_log logs/error.log info;#設(she)置pid存放路(lu)徑(pid是控制系統chi)兄匾 募pid logs/nginx.pid;#設(she)置最大連(lian)接數events{ worker_connections 1024;}http{ #主要是用于設(she)置一組(zu)可(ke)以在proxy_pass和fastcgi_pass指令中使用額(e)代(dai)理(li)服務器,默認(ren)負載(zai)均衡方式(shi)為(wei)輪詢 upstream tomcat_client { #設(she)置同一個cookie的兩次(ci)/多次(ci)請(qing)求,請(qing)求的是同一台(tai)服務器 ip_hash; #weight權重,默認(ren)1,權重越大訪問概率越大,backup備(bei)用服務器,服務器全部崩潰後啟動 server 192.168.2.21:8080 weight=5; server 192.168.2.22:8080 weight=5; server 192.168.2.23:8080 weight=5 backup; } #開啟gzip壓縮,開啟後,訪問網(wang)頁會(hui)自動壓縮 #gzip on; #指定服務器的名稱和參數 server { listen 80; server_name test.nginxtest.net; #設(she)置字zhi)#charset koi8-r; #location / 指用根目錄做(zuo)負載(zai)均衡 location / {  proxy_pass http://tomcat_client;  proxy_redirect default;  #設(she)置me)dai)理(li)  proxy_set_header Host $host;  proxy_set_header X-Real-IP $remote_addr; } }}

輸(shu)入完成後按(an)下(xia)Esc,然後輸(shu)入︰

:wq!

就可(ke)以保存並退出負載(zai)均衡的配置文件了,下(xia)來ci)頤羌釉zai)我們的配置文件︰

# /usr/local/nginx/sbin/nginx      //啟動Nginx# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/fzjh.conf //加載(zai)配置文件

如果(guo)存在端口佔用,可(ke)以使用如下(xia)命令Kill掉Nginx的程序︰

# killall -9 nginx

至此,Nginx服務器部署完畢。下(xia)面(mian)我們開始部署負載(zai)均衡下(xia)的那(na)三台(tai)真實提供(gong)數據的服務器。

4.Linux下(xia)安裝jdk

我們在192.168.2.21、192.168.2.22、192.168.2.23這三台(tai)服務器安裝jdk,以192.168.2.21為(wei)例︰

1)下(xia)載(zai)jdk http://www.oracle.com/technetwork/java/javase/downloads/index.html

2)上傳服務器jdk安裝包

$ scp ~/Downloads/jdk-8u112-linux-x64.tar.gz root@192.168.2.21:/usr/local

3)安裝jdk

$ ssh root@192.168.2.21   //SSH連(lian)接# cd /usr/local# tar -zxvf jdk-8u112-linux-x64.tar.gz //解(jie)壓縮# mv jdk1.8.0_112/ jdk   //將jdk1.8.0_112重命名為(wei)jdk# vi /etc/profile   //用vi編(bian)輯器打開文件,然後按(an)鍵盤的i

下(xia)來ci)頤且貧 guang)標至最後面(mian),兩個回車(che)換行,然後添加下(xia)面(mian)代(dai)碼配置java的環境(jing)變量︰

JAVA_HOME='/usr/local/jdk'CLASS_PATH='$JAVA_HOME/lib:$JAVA_HOME/jre/lib'PATH='.:$PATH:$JAVA_HOME/bin'CATALINA_HOME='/usr/local/tomcat'export JAVA_HOME CATALINA_HOME

輸(shu)入完成後按(an)下(xia)Esc,然後輸(shu)入︰

:wq!

就可(ke)以保存並退出了。此時我們想(xiang)讓(rang)其立即(ji)生效,則(ze)需要繼續(xu)輸(shu)入命令︰

# source /etc/profile

此時profile文件就更(geng)新了,此時環境(jing)變量就配置成功了。下(xia)面(mian)我們驗證一下(xia)jdk是否(fu)安裝配置成功︰

# java -version

如果(guo)返回java版(ban)本號則(ze)安裝成功。

5.Linux下(xia)搭建(jian)Tomcat服務器

我們在192.168.2.21、192.168.2.22、192.168.2.23這三台(tai)服務器搭建(jian)Tomcat服務器,以192.168.2.21為(wei)例︰

1)下(xia)載(zai)Tomcat http://tomcat.apache.org/

2)上傳服務器Tomcat安裝包

$ scp ~/Downloads/apache-tomcat-8.5.9.tar.gz root@192.168.2.21:/usr/local

3)安裝Tomcat

$ ssh root@192.168.2.21   //SSH連(lian)接# cd /usr/local# tar -zxvf apache-tomcat-8.5.9.tar.gz //解(jie)壓縮# mv apache-tomcat-8.5.9/ tomcat //將apache-tomcat-8.5.9重命名為(wei)tomcat

4)設(she)置Tomcat網(wang)頁文件目錄

Tomcat默認(ren)網(wang)頁文件的路(lu)徑是 /usr/local/tomcat/webapps/ROOT,但是一般我們不在這里存放,我們在Linux根目錄jia)陸jian) data/wwwroot 目錄︰

# mkdir /data    //新建(jian)目錄# mkdir /data/www# mkdir /data/www/ROOT# cd /usr/local/tomcat/conf# vi server.xml   //用vi編(bian)輯器打開server.xml配置文件,打開後鍵盤按(an)i

我們找到Host節點下(xia)的appBase=”webapps”,修改為(wei)︰

appBase='/data/www'

輸(shu)入完成後按(an)下(xia)Esc,然後輸(shu)入︰

:wq!

就可(ke)以保存並退出配置文件了,然後重啟Tomcat即(ji)可(ke)生效,此時Tomcat的網(wang)頁文件目錄就變成了 /data/www/ROOT 了。

配置Tomcat環境(jing)變量,我們在配置jdk的時候已經配置好了,可(ke)以回頭看一下(xia)。

6.Tomcat的啟動、停止

1)啟動Tomcat服務器

# /usr/local/tomcat/bin/startup.sh

2)停止Tomcat服務器︰

# /usr/local/tomcat/bin/shutdown.sh

到此,Nginx + Tomcat 負載(zai)均衡 集群 已經部署完畢了。不過有了服務器,肯定也少不了數據庫(ku),下(xia)面(mian)拓(tuo)展一下(xia)Linux下(xia)安裝MySQL數據庫(ku)的方法(fa)。

7.Linux下(xia)安裝MySQL數據庫(ku)

我們重新找了 192.168.2.30 這台(tai)服務器上MySQL數據庫(ku)︰

1)下(xia)載(zai)MySQL數據庫(ku) http://dev.mysql.com/downloads/mysql/

2)上傳MySQL數據庫(ku)安裝包

$ scp ~/Downloads/mysql-5.1.51.tar.gz root@192.168.2.30:/usr/local

3)安裝MySQL

$ ssh root@192.168.2.30   //SSH連(lian)接# groupadd mysql   //建(jian)立mysql的組(zu)# useradd mysql -g mysql  //增(zeng)加用戶mysql到mysql的組(zu)中# yum listgrep ncurses# yum -y install ncurses-devel# yum install ncurses-devel# cd /usr/local# tar -zxvf mysql-5.1.51.tar.gz  //解(jie)壓縮# cd mysql-5.1.51# ./configure --prefix=/usr/local/mysql --with-mysqld-ldflags=-all-static --with-client-ldflags=-all-static --with-readline --with-sll //配置,設(she)置安裝路(lu)徑,設(she)置編(bian)譯mysql不帶(dai)共(gong)享庫(ku),設(she)置編(bian)譯client不帶(dai)共(gong)享庫(ku),設(she)置要以rmp的方式(shi)安裝tar包,設(she)置以rmp的方式(shi)安裝opensll# make# make install    //安裝,在make[4]的時候等待時間比較長,幾分鐘到十幾分鐘,都是正(zheng)常現象(xiang)# /usr/local/mysql/bin/mysql_install_db --user //對安裝好的MySQL進行初始化# cp ./support-files/mysql.server /etc/init.d/mysql //將MySQL啟動服務復制到系統chi)脅 孛wei)mysql# cp ./support-files/my-medium.cnf /etc/my.cnf //復制規則(ze)文件# chmod 755 /etc/init.d/mysql   //更(geng)改文件權限(xian)//文件權限(xian)由(you)三個數字組(zu)成,第一位︰文件擁有者的權限(xian),第二位︰文件擁有者同組(zu)的人shuo)娜ㄏxian),第三位︰文件擁有者非(fei)同組(zu)人shuo)娜ㄏxian)//7︰可(ke)讀可(ke)寫可(ke)執行,5︰可(ke)讀可(ke)執行# cd /usr/local/mysql# chown -R mysql .     //將 /usr/local/mysql 的擁有者更(geng)改為(wei)mysql# chgrp -R mysql .     //將 /usr/local/mysql 歸到mysql組(zu)中# ps -efgrep mysql# kill -9 3632   //將mysql所有進程號依次(ci)殺死,這里假定是3632# /usr/local/mysql/bin/mysql_install_db --user=mysql //再次(ci)初始化# service mysql start     //啟動MySQL# /usr/local/mysql/bin/mysqladmin -u root password '123456' //設(she)置MySQL密碼

到此MySQL就安裝成功了,下(xia)來ci)頤遣饈砸幌xia)︰

# /usr/local/mysql/bin/mysql -u root -p

如果(guo)輸(shu)入密碼後可(ke)以登進MySQL,那(na)麼(me)就測試成功。下(xia)面(mian)我們設(she)置MySQL允許開啟遠程連(lian)接︰

# /usr/local/mysql/bin/mysql -u root -pmysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;//創建(jian)用戶用于遠程連(lian)接(root︰用戶名,%︰所有電腦都可(ke)以連(lian)接,也可(ke)以設(she)置某個ip地址(zhi)運行連(lian)接,123456︰密碼)mysql> flush privileges;  //立即(ji)生效

下(xia)面(mian)我們查詢一下(xia)數據庫(ku)的用戶︰

mysql> SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM mysql.user;mysql> q    //登出

找一台(tai)電腦測試一下(xia),使用Navicat遠程登錄MySQL,登進成功。

本篇文章到此結束(shu)。

Tip︰喜(xi)歡本篇文章的記得“頂一下(xia)”哦!

Tag標簽︰集群  指南  
  • 彩吧助手官网

智胜彩票官网About IT165 - 廣告服務 - 隱私聲明(ming) - 版(ban)權申明(ming) - 免責條款 - 網(wang)站(zhan)地圖(tu) - 乐彩网官网網(wang)友(you)投稿(gao) - 聯系方式(shi)
本站(zhan)內容來自于互聯網(wang),僅供(gong)用于網(wang)絡(luo)技(ji)術學習,學習中請(qing)遵循相關法(fa)律法(fa)規
彩吧助手官网 | 下一页