通過單機壓測可以看到,吞吐量在200-300之間,對於服務器的數據庫也有較大的壓力。
nginx反向代理負載均衡
在單機的情況下,容量總歸有上限,對於我們看服務器後臺進程情況,有這樣一個圖:
表象上:單機cpu使用率增高,內存佔用增加,網絡帶寬使用增加。
cpu us:用戶空間的cpu使用情況(用戶層代碼)
cpu sy:內核空間的cpu使用情況(系統調用)
load average:1,5,15分鐘load平均值,跟着核數係數,0代表通常,1代表打滿,1+代表等待阻塞
memory:free空閒內存,used使用內存
既然有上限,那麼我們需要進行水平擴展,也就是nginx反向代理,並且可以負載均衡。
對於系統可以分佈式部署,對於數據庫而言,在不考慮分庫分表的情況下,就需要開放遠端連接了。
接下來一步一步部署一下。
首先準備四臺服務器,一臺用來做nginx反向代理,兩臺做應用服務器,一臺做數據庫:
因爲我們之前已經把程序放在了一臺服務器上,所以要做轉移:
運行命令:scp -r //var/www [email protected]:/var/,直接使用阿里雲內網拷貝,另一臺也是一樣
然後安裝java,這裏不再贅述。
這裏需要注意的是,配置文件需要改數據庫地址:
當然數據庫並不是誰都能訪問的,所以我們需要添加數據庫的訪問權限,否則訪問不了,telnet ip port的時候會顯示拒絕連接,所以去數據庫服務器打開數據庫:
使用系統的mysql#user:
這裏展示了所有訪問權限,在這裏爲了方便起見,授權所有人只要知道密碼都可以訪問,使用命令:
grant all privileges on *.* to root@'%' identified by 'root';
這樣,就會添加一條,其他服務器就可以訪問了。
接下來部署nginx,nginx可以用來做web服務器,也可以作爲動靜分離服務器以及反向代理服務器。
由於nginx是具有高自由度的軟件,具有非常多的模塊,因此在配置的時候需要非常全面的考慮,所以我們選用OpenResty工具,它裏面集成了大多數nginx的常用模塊,並且可以支持lua。
去官網下載openresty後解壓, ./configure進行編譯,當然前提是安裝了pcre-devel、openssl-devel(yum install pcre-devel openssl-devel gcc curl),然後make install安裝,安裝後在/usr/local/openresty下,注意下/usr/local/openresty/nginx/sbin下會有一個nginx文件,後期如果openresty滿足不了需求,可以自己定製nginx生成文件後替換這個文件即可。
安裝好以後啓動一下,在nginx下sbin/nginx -c conf/nginx.conf,看下端口:
接下來把前端文件上傳到nginx下的html中,這樣前端就可以訪問了,但是我們需要nginx做轉發,所以需要實現當訪問靜態資源文件的時候是直接訪問,需要代理的時候做代理,因此還需要改下配置:
改爲下面的:
alias就是做轉發定位用的,然後當然吧前端資源都放在resources中,接下來請求的時候需要加上resources:
由於要做到動靜分離服務,所以還需要部署反向代理服務器:
部署upstream server,打開配置文件添加下面配置:
代表這個nginx是應用服務器的client,所以http的host字段需要拼接。
代表真正的ip地址是遠端的ip地址,否則backend_server拿到的地址是nginx的地址.
代表這個nginx代理服務器轉發了對應的請求。
接下來sbin/nginx -s reload重新加載nginx即可。
然後開啓tomcat access log驗證
tomcat的access log顯然是記錄日誌用的,對後期拍錯非常有用,springboot默認關閉,所以在配置文件中加:
server.tomcat.accesslog.enabled=true
server.tomcat.accesslog.directory=/var/www/miaosha/tomcat
server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D
第三行分別代表:遠端請求ip地址,默認是“-”,遠端主機user,處理時長,請求url,http返回狀態碼,請求response大小,處理請求的時長。
重啓tomcat後請求,看下日誌: