在兩臺機器上實現負載均衡及熱部署,使用過程中,最大的坑是對依賴包的引入,nginx類似於python,需要各種各樣的包,否則在配置nginx.conf文件時會報錯。再者nginx版本更新很快,所以有問題儘快百度,別瞎捉摸
先在1.1.1.1服務器上爲例安裝nginx
- 使用非root用戶安裝,比如 guest
- 安裝目錄暫時設定爲:/home/guest/nginxServer
- 使用guest用戶登錄
- cd /home/guest
- mkdir -p nginxServer/tar
- mkdir -p nginxServer/tool
- 需要的依賴包:
mogno-c-driver-0.3.1.tar.gz
nginx-1.9.3.tar.gz
nginx-gridfs-0.8.tar.gz
openssl-1.0.1e.tar.gz
zlib-1.2.8.tar.gz
這些依賴包請自行到網上下載。至於版本本人只知道nginx1.9以上能夠支持socket通訊,1.8不行,其他的還不知道有什麼影響。此外nginx1.9還不支持socket服務打印日誌,要nginx14才行。還有,因爲我需要使用mongodb數據庫,所以需要引入mongo的依賴。
把這些依賴包放到/home/nginx/nginxServer/tar目錄下。
- cd /home/nginx/nginxServer/tar
解壓tar包:
tar -xxvf mogno-c-driver-0.3.1.tar.gz
tar -xxvf nginx-1.9.3.tar.gz
tar -xxvf nginx-gridfs-0.8.tar.gz
tar -xxvf openssl-1.0.1e.tar.gz
tar -xxvf zlib-1.2.8.tar.gz
- 把解壓後的mongo-driver中的src目錄cp到nginx-gridfs目錄中的mongo-c-driver目錄
- 安裝nginx 注意:–前需要空格
cd /home/guest/nginxServer/tar/nginx-1.9.3
./configure --prefix=/home/guest/nginxServer/tool --with-pcre=/home/guest/nginxServer/tar/pcre-8.3.6 --with-openssl=/home/guest/nginxServer/tar/openssl-1.0.1e --with-zlib=/home/guest/nginxServer/tar/zlib-1.2.8 --with-http_stub_status_module --add-module=/home/guest/nginxServer/tar/nginx-gridfs-0.8 --with-stream
可以看出上面加入了很多模塊,有‘=‘的是需要外面引入的依賴,不帶的是此nginx版本自帶的,但也要聲明引入。
11. 10執行完後,執行
make & make install
如果沒有報太多錯,並且,在/home/guest/nginxServer/tool 目錄下有四個目錄 conf html logs sbin 說明安裝成功
如果出現權限問題,在開通對應目錄的權限即可。
- 修改啓動端口,啓動nginx服務
檢查nginx是否能啓動成功,首先修改監聽端口:
vim /home/guest/nginxServer/tool/conf/nginx.conf
這裏我使用系統目前沒有使用到的端口2555爲例,當然了nginx有默認的端口,好像是2333,爲防止已經被使用或之前已經安裝了nginx,所以我們就改一個吧!修改位置如下:
server{
listen 2555;
server_name localhost;
....
保存後,啓動nginx,命令如下:
#啓動前檢查配置是否正確
/home/guest/nginxServer/tool/sbin/nginx -t
#啓動nginx
/home/guest/nginxServer/tool/sbin/nginx
- 下面添加服務,修改nginx配置如下(這裏介紹以訪問socket服務):
#修改nginx.conf
vim /home/guest/nginxServer/tool/conf/nginx.conf
增加配置如下,可在任意行加入:
stream{
upstream xxweb_app{
server 1.1.1.1:8080 weight=1;
server 1.1.1.2:8080 weight=1;
}
server{
listen 2444;
proxy_pass xxweb_app;#這個xxweb_app要與上面的upstream xxweb_app保持一致,類似於方法名調用。
}
}
保存後,重啓nginx
#啓動前檢查配置是否正確
/home/guest/nginxServer/tool/sbin/nginx -t
#啓動nginx
/home/guest/nginxServer/tool/sbin/nginx -s reload
- 觀察nginx日誌。監控一段時間:
tail -f /home.guest/nginxServer/tool/logs/access.log
可以在瀏覽器上訪問服務,至於服務的url,nginx只是改變了ip和端口,url上其他的參數還是跟你之前訪問url的內容一樣。我這裏使用的是tomcat服務,訪問webservices接口,所以是
http://1.1.1.1:2444/tomcat1/servicetest?wsdl
流量器上多點幾次,可以在nginx日誌上看到會訪問我們設置兩個服務器,實現了服務站均衡。
15. 如果要實現nginx容災,可以在1.1.1.2上在安裝一個nginx,那麼重複上面的步驟,實現外部服務可以調用我們這兩個nginx服務,如果其中一個臺掛了,另外一個也可以正常使用。
16. 如果要不停服務的更新服務,可以修改服務權重,然後重啓,nginx的重啓是無間斷的,步驟如下:
#修改nginx.conf
vim /home/guest/nginxServer/tool/conf/nginx.conf
增加配置如下,可在任意行加入:
stream{
upstream xxweb_app{
server 1.1.1.1:8080 down;#修改的內容,別把權重改爲0,會報錯的
server 1.1.1.2:8080 weight=1;
}
server{
listen 2444;
proxy_pass xxweb_app;#這個xxweb_app要與上面的upstream xxweb_app保持一致,類似於方法名調用。
}
}
保存後,重啓nginx
#啓動前檢查配置是否正確
/home/guest/nginxServer/tool/sbin/nginx -t
#啓動nginx
/home/guest/nginxServer/tool/sbin/nginx -s reload
到這裏,服務的請求都走1.1.1.2:8080這個服務了,這時候我們就可以更新1.1.1.1的服務了,注意要觀察1.1.1.1的服務等其徹底關閉後再更新,放置有請求還在處理。
17. 服務更新好後,在把1.1.1.1:8080的服務權重改回來,並把1.1.1.2:8080的權重設爲down,然後再重啓,再更新1.1.1.2的服務,這樣就實現了無間斷更新服務的目的。
18. 下面介紹下訪問http服務的配置:
upstream xyweb_app{
server 1.1.1.1:8080 weight=1;
server 1.1.1.2:8080 weight=1;
}
server{
listen 9000;
server_name hostname;#這個服務名是服務器的域名,要在hosts文件中配置
charset utf-8;
access_log logs/access.log main;
location /{
proxy_pass http://xxweb_app;#與上面的xyweb_app保持一致
}
}
- 最後介紹下,nginx的併發量配置
也是在nginx.conf中配置,新啓一行配置如下:
#進程數 與機器核數對應,查看機器核數命令如下,這裏是進程數 :cat /proc/cupinfo |grep "processor"|wc -l
worker_processes 32;
#單進程處理線程數 與命令 ulimit -n 的結果保持一致
worker_rlimit_nofile 10240;
通常生成的機器配置很好的,可看出上面的處理線程數可達到1024032,打個半折有1024016個併發數,20萬級別了,可處理的併發量還是很高的。