Nginx+Tomcat實(shí)現(xiàn)負(fù)載均衡

一、環(huán)境準(zhǔn)備

Tomcat1:192.168.31.103
Tomcat2:192.168.31.117
Nginx:192.168.31.154
在103和117上分別部署相同的Tomcat程序气笙,修改index.jsp頁面蜡娶,把內(nèi)容改為各自的IP地址
Nginx的安裝請(qǐng)參考:http://www.reibang.com/p/2a31c0b8bec9

二借浊、修改配置文件nginx.conf

在http節(jié)點(diǎn)中增加:
## user-api upstream user-api { server 192.168.31.103:8080 weight=3; server 192.168.31.117:8080 weight=3; } server { listen 80; server_name 192.168.31.154; location / { proxy_pass http://user-api/; } }
upstream為Nginx的負(fù)載均衡模塊础米,里面定義了負(fù)載應(yīng)用的列表虚循。
server{}為虛擬主機(jī)配置辐烂,server_name為虛擬主機(jī)的IP或者域名淆衷,多個(gè)域名之間用空格隔開亏掀,listen為監(jiān)聽的端口忱反,location / 表示監(jiān)聽80端口下面的所有請(qǐng)求,proxy_pass配置為:http + upstream名稱
以上配置完成后幌氮,執(zhí)行./nginx -t命令檢測(cè)配置是否有錯(cuò)缭受,再執(zhí)行./ngin -s reload命令進(jìn)行更新。

說明:

upstream按照輪詢(默認(rèn))方式進(jìn)行負(fù)載该互,每個(gè)請(qǐng)求按時(shí)間順序逐一分配到不同的后端服務(wù)器米者,如果后端服務(wù)器down掉,能自動(dòng)剔除宇智。雖然這種方式簡(jiǎn)便蔓搞、成本低廉。
但缺點(diǎn)是:可靠性低和負(fù)載分配不均衡随橘。適用于圖片服務(wù)器集群和純靜態(tài)頁面服務(wù)器集群喂分。
除此之外,upstream還有其它的分配策略机蔗,分別如下:
1蒲祈、weight(權(quán)重)
指定輪詢幾率,weight和訪問比率成正比萝嘁,用于后端服務(wù)器性能不均的情況梆掸。如下所示,10.0.0.88的訪問比率要比10.0.0.77的訪問比率高一倍牙言。
upstream linuxidc{ server 10.0.0.77 weight=5; server 10.0.0.88 weight=10; }

2酸钦、ip_hash(訪問ip)
每個(gè)請(qǐng)求按訪問ip的hash結(jié)果分配,這樣每個(gè)訪客固定訪問一個(gè)后端服務(wù)器咱枉,可以解決session的問題卑硫。
upstream favresin{ ip_hash; server 10.0.0.10:8080; server 10.0.0.11:8080; }

3、fair(第三方)
按后端服務(wù)器的響應(yīng)時(shí)間來分配請(qǐng)求蚕断,響應(yīng)時(shí)間短的優(yōu)先分配欢伏。與weight分配策略類似。
upstream favresin{ server 10.0.0.10:8080; server 10.0.0.11:8080; fair; }

4亿乳、url_hash(第三方)
按訪問url的hash結(jié)果來分配請(qǐng)求颜懊,使每個(gè)url定向到同一個(gè)后端服務(wù)器,后端服務(wù)器為緩存時(shí)比較有效。
注意:在upstream中加入hash語句河爹,server語句中不能寫入weight等其他的參數(shù)匠璧,hash_method是使用的hash算法。
upstream resinserver{ server 10.0.0.10:7777; server 10.0.0.11:8888; hash $request_uri; hash_method crc32; }
upstream還可以為每個(gè)設(shè)備設(shè)置狀態(tài)值咸这,這些狀態(tài)值的含義分別如下:
down 表示單前的server暫時(shí)不參與負(fù)載.
weight 默認(rèn)為1.weight越大夷恍,負(fù)載的權(quán)重就越大。
max_fails :允許請(qǐng)求失敗的次數(shù)默認(rèn)為1.當(dāng)超過最大次數(shù)時(shí)媳维,返回proxy_next_upstream 模塊定義的錯(cuò)誤.
fail_timeout : max_fails次失敗后酿雪,暫停的時(shí)間。
backup: 其它所有的非backup機(jī)器down或者忙的時(shí)候侄刽,請(qǐng)求backup機(jī)器指黎。所以這臺(tái)機(jī)器壓力會(huì)最輕。
upstream bakend{ #定義負(fù)載均衡設(shè)備的Ip及設(shè)備狀態(tài) ip_hash; server 10.0.0.11:9090 down; server 10.0.0.11:8080 weight=2; server 10.0.0.11:6060; server 10.0.0.11:7070 backup; }

三州丹、測(cè)試

訪問http://192.168.31.154/dreyer-user-api/index.jsp

Paste_Image.png
Paste_Image.png

不斷的刷新頁面醋安,我們會(huì)發(fā)現(xiàn)應(yīng)用會(huì)在117和103之間隨機(jī)切換,這表明通過Nginx來實(shí)現(xiàn)Tomcat應(yīng)用的負(fù)載均衡目的達(dá)到墓毒。

四吓揪、附錄實(shí)例

nginx.conf
<pre><code>

user www www;

user root;
worker_processes 4;
error_log logs/error.log;

error_log logs/error.log notice;

error_log logs/error.log info;

pid logs/nginx.pid;
events {
use epoll;
worker_connections 40960;
}

load modules compiled as Dynamic Shared Object (DSO)

dso {

load ngx_http_fastcgi_module.so;

load ngx_http_rewrite_module.so;

}

http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
tcp_nodelay on;
types_hash_max_size 2048;
server_names_hash_max_size 512;
server_names_hash_bucket_size 128;
#keepalive_timeout 0;
keepalive_timeout 280;
gzip on;
gzip_comp_level 3;
gzip_types text/plain text/css text/javascript application/x-javascript application/javascript application/xml application/json;
client_header_buffer_size 128k;
large_client_header_buffers 4 256k;

proxy_headers_hash_max_size 51200;
proxy_headers_hash_bucket_size 6400;

## 配置包含的文件信息
include /opt/nginx/conf/tools/*.conf;
include /opt/nginx/sites-enabled/*.conf;

}
</code></pre>
在包含的文件信息中摘取幾段
## dev-pay-api(單節(jié)點(diǎn)) server { listen 80; server_name xxxx.cn; location / { proxy_pass http://172.16.xx.xx:8089/; add_header 'Access-Control-Allow-Origin' '*'; add_header 'Access-Control-Allow-Credentials' 'true'; add_header 'Access-Control-Allow-Methods' 'POST, GET, OPTIONS,PUT,DELETE'; add_header 'Access-Control-Allow-Headers' '*,token'; proxy_set_header Host $http_host; proxy_set_header Cookie $http_cookie; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; client_max_body_size 100m; } }

## qa-web-pay-api(雙機(jī)負(fù)載均衡) upstream qa_web_pay_api { server 172.16.xx.xx:8089 weight=3; server 172.16.xx.xx:8089 weight=3; } server { listen 80; server_name xxxx.com; location / { proxy_pass http://qa_web_pay_api/; add_header 'Access-Control-Allow-Origin' '*'; add_header 'Access-Control-Allow-Credentials' 'true'; add_header 'Access-Control-Allow-Methods' 'POST, GET, OPTIONS,PUT,DELETE'; add_header 'Access-Control-Allow-Headers' '*,token'; proxy_set_header Host $http_host; proxy_set_header Cookie $http_cookie; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; client_max_body_size 100m; } }

## test-web-b(前端代碼,前后端分離的模式) server { listen 80; server_name xxxx.com; rewrite ^(.*)$ https://$host$1 permanent; location / { root /usr/local/www/test-web-b; try_files $uri $uri/ /index.html =404; } }

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末所计,一起剝皮案震驚了整個(gè)濱河市柠辞,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌主胧,老刑警劉巖叭首,帶你破解...
    沈念sama閱讀 212,454評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異踪栋,居然都是意外死亡焙格,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門己英,熙熙樓的掌柜王于貴愁眉苦臉地迎上來间螟,“玉大人吴旋,你說我怎么就攤上這事损肛。” “怎么了荣瑟?”我有些...
    開封第一講書人閱讀 157,921評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵治拿,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我笆焰,道長(zhǎng)劫谅,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,648評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮捏检,結(jié)果婚禮上荞驴,老公的妹妹穿的比我還像新娘。我一直安慰自己贯城,他們只是感情好熊楼,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著能犯,像睡著了一般鲫骗。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上踩晶,一...
    開封第一講書人閱讀 49,950評(píng)論 1 291
  • 那天执泰,我揣著相機(jī)與錄音,去河邊找鬼渡蜻。 笑死术吝,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的晴楔。 我是一名探鬼主播顿苇,決...
    沈念sama閱讀 39,090評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼税弃!你這毒婦竟也來了纪岁?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,817評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤则果,失蹤者是張志新(化名)和其女友劉穎幔翰,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體西壮,經(jīng)...
    沈念sama閱讀 44,275評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡遗增,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了款青。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片做修。...
    茶點(diǎn)故事閱讀 38,724評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖抡草,靈堂內(nèi)的尸體忽然破棺而出饰及,到底是詐尸還是另有隱情,我是刑警寧澤康震,帶...
    沈念sama閱讀 34,409評(píng)論 4 333
  • 正文 年R本政府宣布燎含,位于F島的核電站,受9級(jí)特大地震影響腿短,放射性物質(zhì)發(fā)生泄漏屏箍。R本人自食惡果不足惜绘梦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評(píng)論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望赴魁。 院中可真熱鬧卸奉,春花似錦、人聲如沸颖御。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽郎嫁。三九已至秉继,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間泽铛,已是汗流浹背尚辑。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留盔腔,地道東北人杠茬。 一個(gè)月前我還...
    沈念sama閱讀 46,503評(píng)論 2 361
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像弛随,于是被迫代替她去往敵國(guó)和親瓢喉。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容