基于Nginx + memcached+Tomcat 的負載均衡 session共享及其調(diào)優(yōu)點

鄙人最近在研究Nginx的負載均衡宝泵,遇到不少坑粗恢,最后成功完成負載均衡梆造,在這里分享下:

簡述:

現(xiàn)有設備:

VMWARE配了3臺服務器

server6:192.168.0.106

server7:192.168.0.105

server9:192.168.0.103

目標:server6,server7安裝Tomcat服務器洛心,server9安裝tengine負載server6固耘,server7兩臺服務器。



1.下載

http://tengine.taobao.org/

2.安裝

2.1解壓縮

2.2編譯安裝

cd /usr/local

tar zxvf tengine-2.2.0.tar.gz

cd tengine-2.2.0

./configure --prefix=/usr/local/tengine

(運行時可能會報./configure: error: the HTTP rewrite module requires the PCRE library.的錯誤词身,可執(zhí)行下面兩條語句:

yum?-y?install?pcre-devel

yum ?-y?install?openssl?openssl-devel

再./configure --prefix=/usr/local/tengine

make && make install

至此安裝完成厅目。

2.3開啟服務

修改/etc/init.d/nginx文件

vi /etc/init.d/nginx

修改內(nèi)容:

nginx="/usr/local/tengine/sbin/nginx"

NGINX_CONF_FILE="/usr/local/tengine/conf/nginx.conf"


2.4啟動服務

修改可執(zhí)行權(quán)限

chmod 777 nginx

service nginx start

重啟命令:service nginx reload

(注意nginx大小寫,之前用Nginx一直啟動不了,后來才發(fā)現(xiàn)2了损敷。如果啟動不成功葫笼,有可能是防火墻問題,關閉防火墻:service iptables stop)


3.使用

虛擬主機&虛擬目錄

回到自己window系統(tǒng)拗馒,修改hosts

進入:C:\Windows\System32\drivers\etc

修改hosts路星,在最后添加:

192.168.0.103test.qq.com

注:192.168.0.103是就是我們剛剛配Nginx的server9的地址,test.qq.com是入口網(wǎng)址

然后在瀏覽器輸入:

test.qq.com

=>


恭喜诱桂,你的Nginx服務器配置成功洋丐!


負載均衡

現(xiàn)在我們將兩臺服務器server6,server7負載到server9上

1.修改配置

vi /usr/local/apache-tomcat-7.0.61/conf/nginx.conf:

upstream tomcat {

server 192.168.0.106:8080;

server 192.168.0.105:8080;

check interval=3000 rise=2 fall=5 timeout=1000 type=http;

check_http_send "HEAD / HTTP/1.0\r\n\r\n";

check_http_expect_alive http_2xx http_3xx;

}

server {

server_name test.qq.com;

location / { proxy_passhttp://tomcat; }

location /status { check_status; }

}

說明:添加upstream 命名為tomcat挥等,里面有兩個sever月劈,就是我們的server6崔梗,server7.

在下面server里的location /中括號里的內(nèi)容我們改為proxy_passhttp://tomcat;意思就是將那兩臺服務器放到這臺服務器上砰碴。

OK兽埃,此時我們reload一下Nginx服務器:

service nginx reload

2.啟動tomcat

將Tomcat分別放在server6,server7服務器上涡相,修改webapps/ROOT/index.jsp

server6里的index.jsp:

server6

<%=session.getId()%>

server7里的index.jsp:

server7

<%=session.getId()%>

ok,到../bin里啟動一下Tomcat

再刷一下剛才的頁面test.qq.com:




OK哲泊,此時我們看到server6,server7來回切換,證明Nginx集群成功催蝗。

但可以看到sessionID是經(jīng)常變的切威,此時我們要做共享session操作。


共享session

第一:

Memcached

1丙号、安裝libevent

2先朦、安裝memcached

可以用yum方式安裝

yum -y install –enablerepo=rpmforge memcached php-pecl-memcache

3、啟動memcached

memcached -d -m 128 -u root -l 192.168.0.103?-p 11211 -c 256 -P /tmp/memcached.pid

參數(shù)解釋:

-d:后臺啟動服務

-m:緩存大小

-p:端口

-l:IP

-P:服務器啟動后的系統(tǒng)進程ID犬缨,存儲的文件

-u:服務器啟動是以哪個用戶名作為管理用戶

驗證

memcached安裝成功與否:

memcached-tool 192.168.0.103:11211

cat /tmp/memcached.pid


第二配置tomcat

Tomcat配置

拷貝jar


到tomcat的lib下喳魏,

每個tomcat里面的context.xml中加入

memcachedNodes="n1:192.168.0.103:11211"

sticky="false"

lockingMode="auto"

sessionBackupAsync="false"

requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"

sessionBackupTimeout="1000" transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"

/>

說明:讓memcache的節(jié)點memcachedNodes指向server9的地址:192.168.0.103

OK。重啟server6server7兩臺服務器怀薛。

回到瀏覽器刺彩,輸入

test.qq.com:


我們可以看到,無論服務器輪流切換枝恋,sessionID都保持不變创倔,這樣就做到了真正的負載均衡?。


調(diào)優(yōu)點:

一:鏈接數(shù)問題:

配置文件:

nginx.conf:

cd /usr/local/tengine-2.2.0/conf

vi nginx.conf

1.worker_connections? :連接數(shù)焚碌;

2.worker_processes:cpu核心數(shù)畦攘;

3.Nginx最大連接數(shù) = 連接數(shù)(worker_connections)*cpu核心數(shù)(worker_processes);

4.Linux對外連接數(shù):

cat /proc/sys/fs/file-max

97095

Nginx最大的并發(fā)量是5萬到10萬

當Linux對外連接數(shù) > Nginx最大連接數(shù) :

Nginx這臺服務器的性能沒有完全發(fā)揮

當Linux對外連接數(shù) < Nginx最大連接數(shù) :

Nginx最大連接數(shù)沒有意義十电,對外連接數(shù)不會超過Linux服務器對外最大連接數(shù)

二:sendfile on:

如果sendfile? off掉知押,就進入傳統(tǒng)模式:

用戶有個請求過來了叹螟,網(wǎng)卡接到請求了,內(nèi)核也接響應朗徊,發(fā)現(xiàn)接聽端口是被Nginx占用的首妖,然后把請求發(fā)到Nginx上,Nginx開始讀取磁盤文件爷恳,磁盤文件緩存到Nginx內(nèi)存中的,再從內(nèi)存文件推送到內(nèi)核象踊,內(nèi)核再將文件推到網(wǎng)卡温亲,網(wǎng)卡再發(fā)送到我們客戶端。

如果sendfile打開杯矩,就進入0拷貝模式:

內(nèi)核直接把文件讀到內(nèi)存中栈虚,通過網(wǎng)卡推到客戶端,不過Nginx史隆。

開啟0拷貝是好還是不好魂务?

對于一些小文件,少于1500K的文件泌射,瞬間存儲粘姜,不經(jīng)過Nginx,

大于300M熔酷,直接推給客戶孤紧,客戶端承受不住,

1拒秘,例如日志文件号显,300M的文件推給客戶,還沒消化完躺酒,馬上又有一個日志文件推出去押蚤,客戶端承受不了。

2羹应,網(wǎng)絡扛不住揽碘。

三:輪詢機制:

upstream按照輪詢(默認)方式進行負載,每個請求按時間順序逐一分配到不同的后端服務器量愧,如果后端服務器down掉钾菊,能 自動剔除。雖然這種方式簡便偎肃、成本低廉煞烫。但缺點是:可靠性低和負載分配不均衡。適用于圖片服務器集群和純靜態(tài)頁面服務器集群累颂。

除此之外滞详,upstream還有其它的分配策略凛俱,分別如下:

1.weight(權(quán)重)

指定輪詢幾率,weight和訪問比率成正比料饥,用于后端服務器性能不均的情況蒲犬。如下所示,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)

每個請求按訪問ip的hash結(jié)果分配原叮,這樣每個訪客固定訪問一個后端服務器,可以解決session的問題巡蘸。

upstream favresin{

ip_hash;

server 10.0.0.10:8080;

server 10.0.0.11:8080;

}

3.fair(第三方)

按后端服務器的響應時間來分配請求奋隶,響應時間短的優(yōu)先分配。與weight分配策略類似悦荒。

upstream favresin{

server 10.0.0.10:8080;

server 10.0.0.11:8080;

fair;

}

4.url_hash(第三方)

按訪問url的hash結(jié)果來分配請求唯欣,使每個url定向到同一個后端服務器,后端服務器為緩存時比較有效搬味。

注意:在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還可以為每個設備設置狀態(tài)值萍聊,這些狀態(tài)值的含義分別如下:

down 表示單前的server暫時不參與負載.

weight 默認為1.weight越大,負載的權(quán)重就越大嘀趟。

max_fails :允許請求失敗的次數(shù)默認為1.當超過最大次數(shù)時脐区,返回proxy_next_upstream 模塊定義的錯誤.

fail_timeout : max_fails次失敗后,暫停的時間她按。

backup: 其它所有的非backup機器down或者忙的時候牛隅,請求backup機器。所以這臺機器壓力會最輕酌泰。

upstream bakend{ #定義負載均衡設備的Ip及設備狀態(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;

}


題外:

健康檢查:

在/usr/local/apache-tomcat-7.0.61/conf/nginx.conf文件里添加

location /status {

check_status;

}

service nginx reload 一下

瀏覽器輸入:test.qq.com/status


頁面就會檢測兩臺服務器的運作情況媒佣。



Thanks For Watching~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市陵刹,隨后出現(xiàn)的幾起案子默伍,更是在濱河造成了極大的恐慌,老刑警劉巖衰琐,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件也糊,死亡現(xiàn)場離奇詭異,居然都是意外死亡羡宙,警方通過查閱死者的電腦和手機狸剃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來狗热,“玉大人钞馁,你說我怎么就攤上這事虑省。” “怎么了僧凰?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵探颈,是天一觀的道長。 經(jīng)常有香客問我训措,道長伪节,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任隙弛,我火速辦了婚禮架馋,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘全闷。我一直安慰自己,他們只是感情好萍启,可當我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布总珠。 她就那樣靜靜地躺著,像睡著了一般勘纯。 火紅的嫁衣襯著肌膚如雪局服。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天驳遵,我揣著相機與錄音淫奔,去河邊找鬼。 笑死堤结,一個胖子當著我的面吹牛唆迁,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播竞穷,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼唐责,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了瘾带?” 一聲冷哼從身側(cè)響起鼠哥,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎看政,沒想到半個月后朴恳,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡允蚣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年于颖,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片厉萝。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡恍飘,死狀恐怖榨崩,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情章母,我是刑警寧澤母蛛,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站乳怎,受9級特大地震影響彩郊,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蚪缀,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一秫逝、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧询枚,春花似錦违帆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至渊抄,卻和暖如春尝胆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背护桦。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工含衔, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人二庵。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓贪染,卻偏偏與公主長得像,于是被迫代替她去往敵國和親眨猎。 傳聞我的和親對象是個殘疾皇子抑进,可洞房花燭夜當晚...
    茶點故事閱讀 42,802評論 2 345

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