通過HTTPS訪問我們做的網站時,總會彈出“本頁不但包含安全的內容,也包含不安全的內容”的對話框。
              這是由于網頁中含有<iframe>,但iframe的src屬性沒有設置造成的。
              解決該問題可用如下方法: 
                客戶端:設置IE的屬性。例:在IE6上,工具-〉Internet選項-〉安全選項卡-〉自定義級別-〉將“顯示混合內容”設置為啟用 即可解決該問題。這個討厭的對話框就不會總出現了,嘿嘿。

          posted @ 2011-05-14 16:02 小馬歌 閱讀(461) | 評論 (0)編輯 收藏
           

          由于http協(xié)議的簡單性以及業(yè)務的需要,我們不可避免地需要自己去實現一些走http協(xié)議的server

          當我們的短連接http服務器(如驗證碼服務器)是客戶端是瀏覽器(iefirefoxchrome)的時候,有一個問題需要特別注意,我稱之為短連接http服務器陷阱。首先,先來看下面一系列同一個請求,但是不同抓包工具抓取的內容的截圖:

          1.使用httpwatch抓包獲取的內容

          2.使用sniffer抓包獲取的內容

          其中,兩者是同一個請求,從sniffer抓包內容看、瀏覽器和server已經完成了交互過程。但是瀏覽器(包括iefirefoxchrome)Result卻是ERROR_INTERNET_CONNECTION_RESET,這是為什么呢?

          通過走讀server代碼,發(fā)現server做了這樣一個邏輯,在有請求過來的時候只讀取了100個字節(jié),因為server認為這100個字節(jié)足夠判斷客戶端的請求行為(GET /HTTP/1.0 少于100個字節(jié)),而其它請求信息(包括cookie等等)是無用的,然后返回response信息,然后關閉連接。流程如下:

          1)讀取100個字節(jié) => 2)返回response信息 => 3)關閉socket

          當客戶端請求的量不大的時候(內網開發(fā)機并發(fā)請求量<100)、很容易出現上文所述http服務器陷阱的問題。當客戶端請求的量很大的時候,出現上述問題的幾率倒不大,但是偶爾也會出現。分析原因如下:

          當并發(fā)量很少的時候,server讀取了100個字節(jié)并返回response后,馬上關閉連接。由于并發(fā)量少,server處理速度很快,這樣很快就會關閉了連接。但是,此時客戶端(瀏覽器)也許還有一些數據(例如cookie信息等)并沒有真正發(fā)送到server的內核緩沖區(qū)。于是,瀏覽器繼續(xù)把剩余的數據試圖發(fā)送到server,但是,此時發(fā)現server已經關閉了連接,就會引發(fā)ERROR_INTERNET_CONNECTION_RESET錯誤。雖然用sniffer抓包發(fā)現實際上整個交互過程已經完成,但是瀏覽器缺認為這是一個致命的錯誤,獲取到的返回數據并沒有正確的顯示在瀏覽器上。

          當并發(fā)量很大的時候,雖然server只讀取了100個字節(jié),但是由于服務器的處理能力有限,從讀取了100字節(jié)到關閉連接的過程有一定的時間差。客戶端可以在這個時間差的時間內把剩余的數據發(fā)送到了server內核緩沖區(qū)(雖然應用程序沒有讀取這部分數據)。因此,出現ERROR_INTERNET_CONNECTION_RESET錯誤的概率就會變小。

          總結,在實現短連接的http服務器(尤其是提供給瀏覽器使用的服務器)時,盡量把http header數據包讀取完整,不要因為只需要一小部分header信息就能處理請求而不讀取其它的頭部信息,以此來加快處理速度或者節(jié)省空間。這往往適得其反,可能會引起一些列不可預料的問題。

          由此,引發(fā)另一個思考,既然不可避免的需要讀取完整的http header數據包,那么,瀏覽器請求的時候,應該盡量保持http header不要過于龐大,既是為了減緩server的壓力也是為了加快server的處理速度。而減少http header長度的最好方法就是減少cookie的內容。
          來自: http://hi.baidu.com/yancncen/blog/item/2b79c4a2c8e83ba7cbefd091.html
          posted @ 2011-05-12 19:26 小馬歌 閱讀(705) | 評論 (0)編輯 收藏
           
               摘要: 網站的加載速度是決定網站等級的重要因素,值得站長特別關注。原因很簡單,沒有人愿意為了打開一個網頁而等老半天,換句話說,如果你的網站打開速度很慢,將流失大量的訪客,甚至出現多米諾效應的不良影響。在埋頭深入代碼中試圖提高網站速度之前,先要確定導致網站訪問速度緩慢的真正原因是什么。本文收集了非常有用的WEB服務和工具,可以幫助你診斷和分析你的網站,讓你更加全面的了解自己的網站性能。  &...  閱讀全文
          posted @ 2011-05-11 19:26 小馬歌 閱讀(254) | 評論 (0)編輯 收藏
           
          網站建設的核心關鍵是“如何發(fā)現潛在客戶并有效的轉化為合作客戶”,這里提到有效的轉化也就是說找到的客戶不一定會選用我們的產品或者服務,成為了我們的客戶的轉化才是有效的轉化,那么在競爭如此激烈的網絡時代,我們該怎么去挖掘潛在客戶并提高我們網站的轉化率呢?關鍵之一就是提高網站的可用性。

            對于網站來說,可用性是指用戶能否有效地找到所需的信息或完成他的任務,效率如何以及是否讓人有愉快滿意的感受。如果網站可用性較差,會浪費用戶的時間,大大降低網站的回頭訪問率,這對網站的生存是一個至關重要的問題。因此,為網站開發(fā)人員提供可用性改善建議和改進工具是十分必要的。

          usability testing 25 Tools to Improve Your Websites Usability

            如何知道訪客是否喜歡你的網站?借助可用性檢測工具追蹤用戶行為可以回答這個問題。跟蹤到的數據可以給你提供精確的信息,讓你知道用戶喜歡你網站的什么地方,哪些區(qū)域是最突出,哪些地方是用戶最容易忽略的。不要小看這些收集到的數據,因為這些數據可以幫助你有效的提高網站的點擊率和轉化率。

            改善您的網站不要挑時間,當你發(fā)現你的網站吸引不了多少訪客的時候,就應該立即行動了。 這里收集了很多非常好的工具,通過不同的方法追蹤用戶的行為并提供給你改進網站可用性的建議。它們中有些可能不是免費的,但一個好的回報是值得去付出的。 為大家獵取所需的工具是一件開心又很有意義的事情!

          Userfly

          Userfly可以提供免費的網頁訪客動作記錄服務。只需要在網頁中添加一段簡單的Javascript代碼,就可以記錄訪客從打開該網頁到關閉整個過程中的動作。Userfly能夠記錄的內容包括鼠標的移動、點擊以及鍵盤輸入等動作。對于網站擁有者來說,Userfly可以很方便的對用戶行為進行檢測和分析,通過A/B Testing等方法為網站UI/UE提供非常有價值的信息。

          userfly 25 Tools to Improve Your Websites Usability

          Attention Wizard

          Attention Wizard是一個視覺工具,它可以幫助您提高轉換率,輕松地識別目標網頁存在的問題。 Attention Wizard用高級人工智能算法來模擬人類視線的軌跡和聚焦點。Attention Wizard能夠立刻對你提交的網頁樣本進行處理并生成“眼球軌跡熱力圖”。這個“熱力圖”可以預測你網站的訪問者在最初的幾秒內是如何瀏覽的。 生成的結果中,有75%都是通過眼睛跟蹤和鼠標跟蹤來完成的。Attention Wizard有簡易版、高級版和終極版三個版本。

          attentionwizard 25 Tools to Improve Your Websites Usability

          ClickDensity

          一個完整的可用性工具包,通過從訪客那里獲取的實時數據來改善網站內容結構,優(yōu)化鏈接和廣告的投放位置,分析和提高網站的粘性。 它將告訴你訪客究竟在何處點擊。

          注冊之后,把網站提供的一段Javascript代碼加入到你的網站中即可,當用戶訪問網站的時候,一個小的附加文件會自動下載用于傳輸用戶的點擊事件。該產品提供免費試用版,可付費升級到不同的高級版本。

          clickdensity 25 Tools to Improve Your Websites Usability

          CrazyEgg

          CrazyEgg能夠監(jiān)控一個頁面的所有點擊并能清楚的顯示頁面的點擊熱圖,可以相當準確地監(jiān)控所有頁面的點擊位置。

          crazyegg 25 Tools to Improve Your Websites Usability

          Clicktale

          它是對你的網站訪客瀏覽行為進行分析的一個工具,以類似視頻的方式將訪問者在你的網站上進行的操作全部記錄下來,你可以在線觀看也可以下載到電腦上。利用ClickTale的訪客行為視頻記錄,可以幫你更好的布局你的網頁,給訪問者帶來更好的用戶體驗進而提升轉化率。 它還提供了實時監(jiān)控的性能分析,轉化分析,鏈接分析,先進的過濾和市場分析。

          clicktale 25 Tools to Improve Your Websites Usability

          Clixpy

          Clixpy幾乎記錄了訪客的所有動作,如鼠標移動,點擊,滾動和表單輸入。 這些動作對于定位用戶發(fā)現容易或者困難內容,那些東西最吸引他們以及為什么用戶會離開網站有很大的幫助。這有助于優(yōu)化目標網頁,并幫助您把訪問者轉化為客戶。

          clixpy 25 Tools to Improve Your Websites Usability

          ChalkMark

          Chalkmark可以讓你快速創(chuàng)建一個項目,在訪客中對界面原型進行調查以了解用戶關注的焦點在哪,結果中可以查看每項任務的熱圖,并知道有多少用戶跳過了任務。可以免費注冊,也可以按月或者年付費到不限制任務數級別。

          chalkmark 25 Tools to Improve Your Websites Usability

           ClickHeat

          是GPL許可下的開源軟件,是一個很強大的JavaScript 庫,它可以幫你統(tǒng)計一個頁面上用戶點擊的熱度分布圖,支持中文顯示。

          clickheat 25 Tools to Improve Your Websites Usability

          Mouseflow

          通過視頻記錄和分析用戶的點擊和滾動行為,生成鼠標點擊和移動熱圖,幫助你優(yōu)化目標頁面和提高轉化率。

          4Q Online Survey

          用戶是否對網站真正的滿意? 第四季的網上調查,一個免費的解決方案,可以告訴你關于你網站的訪問者的詳細信息,例如用戶為什么訪問你的網站,是否以正確的操作方式完成任務,如果不是,會是原因是什么阻礙了他們。 這項調查可以在用戶中收集到大量的反饋。

          4qsurvey 25 Tools to Improve Your Websites Usability

          Concept Feedback

          Concept Feedback通過在線的專業(yè)團隊快速的對網站設計,可用性和營銷等方面提供反饋。對于公開的意見,團隊中WEB方面的專業(yè)人員會給你一個整體的意見, 對于私密反饋,你可以邀請?zhí)囟▽<姨峁┓答仯⒔M織出圖形化的結果。 專業(yè)的反饋來自于在設計,可用性和營銷領域的專家。

          conceptfeedback 25 Tools to Improve Your Websites Usability

          FeedbackArmy

           你可以通過提交你網站的問題來獲得一個快速的可用性測試并得到10項反饋。不過,不要支付15美元,如果想得到50項反饋則需要55美元。

           feedbackarmy 25 Tools to Improve Your Websites Usability

           Feng GUI

          Feng GUI通過模擬人的視覺在開始的5秒內看到的東西來生成熱點圖,它為設計和開發(fā)人員提供了測試服務,通過分析觀察角度、品牌效益和預測效果。

          feng gui 25 Tools to Improve Your Websites Usability

          Five Second Test

          通過匯集用戶在5秒內回答的問題集來改善目標網頁以讓訪客關注關鍵內容。

          fivesecondtest 25 Tools to Improve Your Websites Usability

          Google Site Search

          在Google Site Search中,強化了企業(yè)網站的索引范圍;一個托管的搜索解決方案,可以呈現無廣告的搜索結果,提高網站的轉化率和銷售額,降低成本。

          sitesearch 25 Tools to Improve Your Websites Usability

          Kampyle

          Kampyle可以讓你在你的網站出現一個在線發(fā)送反饋信息的按鈕,點擊此按鈕可以彈出調查表,讓訪客可以反饋信息。Kampyle提供了反饋表單模板,你只需要簡單修改即可,另外Kampyle還提供了豐富的反饋統(tǒng)計功能。

          kampyle 25 Tools to Improve Your Websites Usability

          Loop 11

          使用Loop 11可以很容易的創(chuàng)建一個專業(yè)的可用性測試,收集反饋并及時的得到可用性的量化數據,然后立即看到結果。 支持超過40種語言。

          loop11 25 Tools to Improve Your Websites Usability

          OpenHallway

          OpenHallway記錄用戶在遠程或本地的可用性數據。用戶的屏幕和語音會被記錄并被上傳到您的帳戶。

          openhallway 25 Tools to Improve Your Websites Usability

          Silverback

          一個用于設計人員和開發(fā)人員通過捕獲屏幕活動來進行可用性測試的軟件,可以記錄測試者的表情和聲音,有批量導出功能并可以標示出任何值得注意的時刻。

          silverbackapp 25 Tools to Improve Your Websites Usability

          Site Tuners

          它通過指導你了解在目標網頁中存在的轉化率問題并回答您的具體的轉換相關的問題。通過優(yōu)化目標網頁快速而簡便的獲得最好的轉換率。

          sitetuners 25 Tools to Improve Your Websites Usability

          TechSmith

          TechSmith是世界領先的為個人和專業(yè)領域提供屏幕捕獲和錄制軟件的供應商。人們普遍使用TechSmith產品來從他們的計算機屏幕上捕獲內容。Morae是用于了解你的客戶的一個很好的軟件。使用Morae一個好處是,它會自動計算并給出效果和滿意度,而不只是分析和報告。

          morae 25 Tools to Improve Your Websites Usability

          Usabilla

          Usabilla幫助網站所有者更深入的了解他們的客戶,不僅僅是數據。收集有關網頁,實物模型,線框或任何圖像的視覺反饋。

          usabilla 25 Tools to Improve Your Websites Usability

          User Testing

          UserTesting觀察用戶在自己的環(huán)境中的活動,傾聽他們的想法,然后形成結論。

          usertesting 25 Tools to Improve Your Websites Usability

          Webnographer

          是一個遠程的可用性測試工具,測試網站、Web應用程序或者原型在自然環(huán)境中可操作行的指標,通過調查問卷捕獲用戶的思想。

          webnographer 25 Tools to Improve Your Websites Usability

          Webtrends

          優(yōu)化重點在于發(fā)現市場潛力和精準的投遞內容。世界上數以千計的網站智能企業(yè),包括半數以上的財富和全球500強企業(yè),正依靠WebTrends提高他們的網站轉換率、優(yōu)化他們的市場營銷效果,以獲得更高的投資回報。作為全球網站分析行業(yè)的領導者,WebTrends憑借其多次獲得業(yè)界大獎、全面地咨詢服務和無與倫比的專業(yè)經驗,而成為Web分析行業(yè)最權威的衡量標準。通過其提供的按需服務和各種軟件產品,WebTrends幫助用戶獲得精確的、可被執(zhí)行的Web分析數據。

          webtrends 25 Tools to Improve Your Websites Usability

          Website Optimiser

          網站優(yōu)化工具是Google免費的網站測試和優(yōu)化工具。使用該工具,無需投入任何費用就可以提高現有網站的價值和點擊量。通過使用網站優(yōu)化工具對網站內容和設計進行測試和優(yōu)化,不管您是營銷新手還是專家,都可以輕松快捷地增加收入和投資回報率。可以進行A/B實驗和多版本實驗兩種實驗。

          websiteoptimize 25 Tools to Improve Your Websites Usability

           這些都是非常有用的工具,如果你發(fā)現了更好的,記得與我們分享:)

           

          編譯來源:25個提高網站可用性和轉化率的工具

          原文來自:25 Tools To Improve Your Website’s Usability

          ?
          posted @ 2011-05-11 19:25 小馬歌 閱讀(160) | 評論 (0)編輯 收藏
           
          對于Web開發(fā)人員來說,找到有用的CSS工具,就像找到一個魔燈,可以讓他那些艱難的任務變得有趣。CSS工具幫助開發(fā)人員創(chuàng)造更加時尚,更有創(chuàng)意的網站。在這篇文章中收集了40個有用和強大的CSS工具,記得收藏起來哦。

          YAML Builder

          YAML Builder是強大的可視化布局工具,只需要簡單的設置參數和拖拽模塊就能快速創(chuàng)建基于YAML的布局。

          Ultimate CSS Gradient Generator by ColorZilla

          非常棒的一款 CSS 漸變生成工具,支持跨瀏覽器。

          Grid Designer

          Grid Designer 用于在線網格設計,有很多選項用于定義列,尺寸和間距。

          My CSS Menu

          My CSS Menu 用于自定義跨瀏覽器的CSS菜單制作。

          Csstxt

          Csstxt 幫助你定義文本樣式。

          Simple CSS

          Simple CSS  幫助你非常容易的創(chuàng)建層疊樣式表。

          Firdamatic: the Design Tool for the Uninspired Webloggers

          Firdamati 是一個無表格布局生成器,可以幫助你容易的創(chuàng)建一個表單,可定制皮膚。

          Sky CSS Tool

           

          Sky CSS 可以讓你在無需編寫任何編碼就可以創(chuàng)建CSS類。

          The 1KB CSS Grid

          這是一款非常輕量的CSS網格工具。

          Free CSS Template Code Generator

          一款CSS模板代碼生成工具。

          Variable Grid System

          The variable grid system 是一款快速生成CSS網格的工具,基于 960 網格系統(tǒng)。

          GRIDINATOR

          Gridinator 幫助你生成基于960.gs的網格布局。

          Blueprint Grid CSS Generator

          這也是一款生成靈活網格布局的工具。

          CSS Grid Calculator

          使用 CSS Grid Calculator 可以快速的創(chuàng)建一個可視化布局。

          templatr

          這款在線工具,幫助你為你的網站快速創(chuàng)建一個獨一無二的模板。

          XHTML/CSS Markup Generator

          Markup Generator 是一款簡單的標記代碼生成工具。

          Spiffy Corners – Purely CSS Rounded Corners

          Spiffy Corners 是一款圓角效果生成工具。

          Spritebox

          Spritebox 是一款所見即所得的工具,幫助設計師從一張 sprite image 生成CSS Classes 和 CSS IDs。

          SlickMap CSS

          SlickMap CSS 是一個簡單的樣式單用來根據 sitemap 顯示對應的圖形化信息。

          CSS Layout Generator – CSS Portal

          一款 CSS 布局在線生成工具。

          CSS Menu Maker

          一款在線的 CSS 菜單生成工具。

          Clean CSS

          CleanCSS 是一款很棒的CSS格式化和優(yōu)化工具。

          CSS3 Please!

          一款非常強大的在線CSS工具。

          Tabs Generator

          這是一款選項卡在線生成工具。

          CSS Sorter

          幫助你對CSS規(guī)則按字母進行排序。

          CSS Type Set

          這是一款輔助你選擇字體的工具。

          CSS Layout Generator

          這也是一款CSS布局生成工具。

          Layout Generator

          一款用于生成多列布局和網格布局的工具。

          Em Calculator

          Em Calculator 是一款單位換算工具。

          Colors Pallete Generator

          Colors Pallete Generator是一個在線查看圖片配色的服務。colors pallete generator 只需要上傳圖片,或者輸入圖片的網絡地址,其便可以分析出此圖片應用的配色方案。

          CSS Menu Generator by Webmaster Toolkit

          CSS Menu Generator 是一款在線菜單生成工具。

          CSS Table Wizard

          使用 CSS Table Wizard 試驗邊框樣式并生成對應代碼。

          CSS Layout Generator

          CSS Layout Generator 是一款在線工具,用于創(chuàng)建HTML+CSS 模板(layouts)。

          Fonttester

          Font Tester 是一款字體在線對比工具。

          CSS font style

          The CSS font-style 字體樣式屬性用于設置字體樣式為斜體或傾斜。

          CSS Color Codes

          CSS color codes 帶有兩個選擇,十六進制顏色代碼和RGB顏色代碼,以便您可以從顏色選擇器輕松地選擇與色彩,并從底部獲取十六進制值。

          CSS Colors

          CSS Colors 為您提供全面的圖表,顯示十六進制以及RGB顏色值。你可以很容易找到的RGB顏色組合,從0到255,一共有超過16萬色。

          WordPress Theme Generator

          一款WordPress主題在線生成工具。

          List-O-Matic

          List-O-Matic 是一款用于創(chuàng)建列表布局的工具。

          Typetester

          Typetester 用于在線比較字體效果。

          MinifyMe

          一款壓縮工具,幫助你快速的把CSS 和 JavaScript 文件壓縮成一個文件。

          (編譯來源:夢想天空  原文來自:40 Excellent (Yet Free) CSS Tools And Generators For Developers

          推薦40個優(yōu)秀的免費CSS工具
          posted @ 2011-05-11 19:24 小馬歌 閱讀(147) | 評論 (0)編輯 收藏
           
          在開發(fā)中,借助得力的工具可以事半功倍。今天,這篇文章向大家分享最新收集的15款非常有用的 JavaScript 開發(fā)工具。

          TestSwarm: Continious & Distributed JS Testing
          TestSwarm是Mozilla實驗室推出的一個開源項目,它旨在為開發(fā)者提供在多個瀏覽器版本上快速輕松測試自己JavaScript代碼的方法。

          Javascript-212 in Useful JavaScript and jQuery Tools, Libraries, Plugins

          Minimee
          在網絡上,速度是很重要的,Minimee能幫助你將CSS和JavaScript文件進行自動壓縮和打包。

          Javascript-169 in Useful JavaScript and jQuery Tools, Libraries, Plugins

          Doctor JS
          Doctor JS 是一款幫你分析 JavaScript 代碼的工具,測試你的代碼在多態(tài)、原型、異常和回調方面寫得怎么樣。

          Javascript-174 in Useful JavaScript and jQuery Tools, Libraries, Plugins

          Remy Sharp’s JSConsole
          一個在線的 JavaScript 控制臺工具,對于測試、調試和演示非常有用。

          Javascript-269 in Useful JavaScript and jQuery Tools, Libraries, Plugins

          JavaScript Library Boilerplate
          JavaScript Library Boilerplate 幫助你隨時隨地創(chuàng)建自己的 JavaScript 庫。

          Javascript-260 in Useful JavaScript and jQuery Tools, Libraries, Plugins

          jsdoc-toolkit
          JsDoc Toolkit 是一款輔助工具,你只需要根據約定在 JavaScript 代碼中添加相應的注釋,它就可以根據這些注釋來自動生成API文檔。

          Js-010 in Useful JavaScript and jQuery Tools, Libraries, Plugins

          Jasmine: BDD for your JavaScript
          Jasmine 是一個有名的javascript單元測試框架,它是獨立的“行為驅動開發(fā)”框架。

          Js-011 in Useful JavaScript and jQuery Tools, Libraries, Plugins

          ObfuscateJS: JavaScript compressor
          一款 JavaScript 混淆工具,去除空白和注釋,重命名變量等。

          Javascript-282 in Useful JavaScript and jQuery Tools, Libraries, Plugins

          PEG.js
          PEG.js 是一個JavaScript的表達式語法解析器,它使您能夠輕松地建立復雜的數據或計算機程序語言的快速分析器。

          Javascript-228 in Useful JavaScript and jQuery Tools, Libraries, Plugins

          JSONView
          JSONView 是一款幫助你在瀏覽器中查看JSON文檔的Firefox插件。

          Js-014 in Useful JavaScript and jQuery Tools, Libraries, Plugins

          JSonduit
          JSonduit 是一個將網頁內容轉換為 JSON 格式訂閱器的工具。

          Javascript-182 in Useful JavaScript and jQuery Tools, Libraries, Plugins

          jsplumb
          jsPlumb 為開發(fā)者提供了可視化鏈接元素到頁面的方法,可以結合jQuery、MooTools 和 YUI3使用。

          Javascript-193 in Useful JavaScript and jQuery Tools, Libraries, Plugins

          Helma
          Helma 是一個用來開發(fā)快速、穩(wěn)定的Web應用程序的開源框架,它使用JavaScript 來作為服務端腳本環(huán)境,從而可以省略編譯周期。

          Js-015 in Useful JavaScript and jQuery Tools, Libraries, Plugins

          HTML + JSON Report
          一款將 JSON 數據轉換為可讀性更高的HTML格式內容的在線工具。

          Javascript-300 in Useful JavaScript and jQuery Tools, Libraries, Plugins

          JSON Editor
          這個編輯器可以幫助你方便的編輯 JSON 字符串。

          Javascript-222 in Useful JavaScript and jQuery Tools, Libraries, Plugins

          posted @ 2011-05-11 19:23 小馬歌 閱讀(229) | 評論 (0)編輯 收藏
           
          根據要求配置MySQL主從備份、讀寫分離,結合網上的文檔,對搭建的步驟和出現的問題以及解決的過程做了如下筆記;
                現在使用的兩臺服務器已經安裝了MySQL,全是rpm包裝的,能正常使用。
                為了避免不必要的麻煩,主從服務器MySQL版本盡量保持一致;
          環(huán)境:192.168.0.1 (Master)
                    192.168.0.2 (Slave)
          MySQL Version:Ver 14.14 Distrib 5.1.48, for pc-linux-gnu (i686) using readline 5.1
          1、登錄Master服務器,修改my.cnf,添加如下內容;
          server-id = 1   //數據庫ID號, 為1時表示為Master,其中master_id必須為1到232–1之間的一個正整數值;
          log-bin=mysql-bin   //啟用二進制日志;
          binlog-do-db=data //需要同步的二進制數據庫名;
          binlog-ignore-db=mysql   //不同步的二進制數據庫名;這個同步后聽說很麻煩,我沒有同步;
          log-bin=/var/log/mysql/updatelog //設定生成的log文件名;
          log-slave-updates //把更新的記錄寫到二進制文件中;
          slave-skip-errors //跳過錯誤,繼續(xù)執(zhí)行復制;
          2、建立復制所要使用的用戶;
          mysql>grant replication slave on *.* to test@192.168.0.2 identified by '********'
          3、重啟mysql;
          /usr/bin/mysqladmin -uroot shutdown;
          /usr/bin/mysql_safe &
          4、現在備份Master上的數據
             鎖定后我直接tar.gz data這個庫文件;
          mysql>FLUSH TABLES WITH READ LOCK;
          cd /var/lib/mysql
          tar data.tar.gz data
          接著直接執(zhí)行了遠程scp;
          scp ./data.tar.gz root@192.168.0.2:/var/lib/mysql
          5、登錄Slave數據庫服務器,修改my.cnf;
          server-id       = 3   //2已經被用在另一個服務器上了,如果以后要再加Slave號接著往后數就OK了;
          log-bin=mysql-bin
          master-host     =   192.168.0.1
          master-user     =   test
          master-password =   ******
          master-port     = 3306
          master-connect-retry=60   //如果發(fā)現主服務器斷線,重新連接的時間差;
          replicate-ignore-db=mysql //不需要備份的數據庫;
          replicate-do-db=data //需要備份的數據庫
          log-slave-update
          slave-skip-errors
          6、解壓剛才從Master scp過來的文件,此處不用改權限、屬主,默認沒有改變,可以根據實際情況進行修改;
          7、上述完成后,可以啟動slave了;查看slave狀態(tài);
          mysql>slave start;
          mysql>show slave status\G;
          *************************** 1. row ***************************
                         Slave_IO_State: Waiting for master to send event
                            Master_Host: 192.168.0.1
                            Master_User: test
                            Master_Port: 3306
                          Connect_Retry: 60
                        Master_Log_File: updatelog.000001
                    Read_Master_Log_Pos: 106
                         Relay_Log_File: onlinevc-relay-bin.000013
                          Relay_Log_Pos: 1069
                  Relay_Master_Log_File: updatelog.000001
                       Slave_IO_Running: Yes
                      Slave_SQL_Running: Yes
                        Replicate_Do_DB: data
                    Replicate_Ignore_DB: mysql
                     Replicate_Do_Table:
                 Replicate_Ignore_Table:
                Replicate_Wild_Do_Table:
          Replicate_Wild_Ignore_Table:
                             Last_Errno: 0
                             Last_Error:
                           Skip_Counter: 0
                    Exec_Master_Log_Pos: 106
                        Relay_Log_Space: 1681
                        Until_Condition: None
                         Until_Log_File:
                          Until_Log_Pos: 0
                     Master_SSL_Allowed: No
                     Master_SSL_CA_File:
                     Master_SSL_CA_Path:
                        Master_SSL_Cert:
                      Master_SSL_Cipher:
                         Master_SSL_Key:
                  Seconds_Behind_Master: 0
          Master_SSL_Verify_Server_Cert: No
                          Last_IO_Errno: 0
                          Last_IO_Error:
                         Last_SQL_Errno: 0
                         Last_SQL_Error:
          1 row in set (0.00 sec)

          ERROR:
          No query specified

          8、查看Master上面的狀態(tài);
          mysql> show master status;
          +------------------+----------+--------------+------------------+
          | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
          +------------------+----------+--------------+------------------+
          | updatelog.000012 |    15016 | data         | mysql            |
          +------------------+----------+--------------+------------------+
          1 row in set (0.00 sec)
          由此可見兩者的File、Position存在問題,所要要去Slave上設置對應主庫的Master_Log_File、Read_Master_Log_Pos;執(zhí)行如下語句;
          mysql>slave stop;
          mysql>CHANGE MASTER TO MASTER_HOST='192.168.0.1',MASTER_USER='test', MASTER_PASSWORD='******',MASTER_LOG_FILE='updatelog.000012',MASTER_LOG_POS=15016;
          確保 Slave_IO_Running: Yes 、Slave_SQL_Running: Yes都要為YES才能證明Slave的I/O和SQL進行正常。
          9、解鎖主庫表;
          UNLOCK TABLES;
          到此主從MySQL服務器配置完成,測試結果如下;
          mysql> show master status;
          +------------------+----------+--------------+------------------+
          | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
          +------------------+----------+--------------+------------------+
          | updatelog.000012 |   717039 | data | mysql            |
          +------------------+----------+--------------+------------------+
          1 row in set (0.00 sec)
          mysql> show slave status\G;
          *************************** 1. row ***************************
                         Slave_IO_State: Waiting for master to send event
                            Master_Host: 192.168.0.1
                            Master_User: test
                            Master_Port: 3306
                          Connect_Retry: 60
                        Master_Log_File: updatelog.000012
                    Read_Master_Log_Pos: 717039
                         Relay_Log_File: onlinevc-relay-bin.000013
                          Relay_Log_Pos: 1222
                  Relay_Master_Log_File: updatelog.000012
                       Slave_IO_Running: Yes
                      Slave_SQL_Running: Yes
                        Replicate_Do_DB: data
                    Replicate_Ignore_DB: mysql
                     Replicate_Do_Table:
                 Replicate_Ignore_Table:
                Replicate_Wild_Do_Table:
          Replicate_Wild_Ignore_Table:
                             Last_Errno: 0
                             Last_Error:
                           Skip_Counter: 0
                    Exec_Master_Log_Pos: 717039
                        Relay_Log_Space: 1834
                        Until_Condition: None
                         Until_Log_File:
                          Until_Log_Pos: 0
                     Master_SSL_Allowed: No
                     Master_SSL_CA_File:
                     Master_SSL_CA_Path:
                        Master_SSL_Cert:
                      Master_SSL_Cipher:
                         Master_SSL_Key:
                  Seconds_Behind_Master: 0
          Master_SSL_Verify_Server_Cert: No
                          Last_IO_Errno: 0
                          Last_IO_Error:
                         Last_SQL_Errno: 0
                         Last_SQL_Error:
          1 row in set (0.00 sec)

          ERROR:
          No query specified
          ####################################   如下是MySQL數據庫讀寫分離操作步驟 ##########################################
          此處使用MySQL自己(Mysql-proxy)的代理實現數據庫的讀寫分離;
          所需要安裝包如下;
          1、check-0.9.8
          2、glib-2.18.4
          3、libevent-2.0.6-rc
          4、lua-5.1.4
                wget http://www.lua.org/ftp/lua-5.1.4.tar.gz
          5、pkg-config-0.23
          6、mysql-5.0.56
          7、mysql-proxy-0.8.0
                http://mysql.cdpa.nsysu.edu.tw/Downloads/MySQL-Proxy/mysql-proxy-0.8.0.tar.gz

          別的安裝包地址當時沒有記下載地址,不過大部分都在這個網站上找的;http://sourceforge.net/
          &&&&&&&&&& 安裝開始 &&&&&&&&
          1、tar -zxvf check-0.8.4.tar.gz
              cd check-0.8.4
              ./configure
              make
              make install
          2、tar -zxvf glib-2.18.4.tar.gz   //系統(tǒng)rpm包可能版本低出現了問題3;
              ./configure
              make
              make install
          3、tar -zxvf libevent-2.0.6-rc.tar.gz
              cd libevent-2.0.6-rc
              ./configure --prefix=/usr/local/libevent
               make && make install
          4、tar -zxvf lua-5.1.4.tar.gz
              INSTALL_TOP= /usr/local/lua    //    為了把lua安裝到/var/lib/lua下,故要修改其下的Makefile;
          或者直接執(zhí)行:sed -i 's#INSTALL_TOP= /usr/local#INSTALL_TOP= /usr/local/lua#' Makefile
          root@testmysql [/software/lua-5.1.4]# make
          Please do
             make PLATFORM
          where PLATFORM is one of these:
             aix ansi bsd freebsd generic linux macosx mingw posix solaris
          See INSTALL for complete instructions.
          這處是要你選擇服務器所使用的平臺;
          執(zhí)行:make linux //此處執(zhí)行后出現了錯誤,解決辦法在下面問題解決區(qū)1處,此處先跳過;
          再執(zhí)行:make install
          設置環(huán)境變量:
              export LUA_CFLAGS="-I/usr/local/lua/include" LUA_LIBS="-L/usr/local/lua/lib -llua -ldl" LDFLAGS="-L/usr/local/libevent/lib -lm"
              export CPPFLAGS="-I/usr/local/libevent/include"
              export CFLAGS="-I/usr/local/libevent/include"

          5、tar -zxvf pkg-config-0.23.tar.gz
              cd pkg-config-0.23
              ./configure
              make
              make install
          安裝完之后要執(zhí)行:cp etc/lua.pc /usr/local/lib/pkgconfig/lua5.1.pc      //原因見下面的問題解決區(qū)2處;
          6、安裝MySQL客戶端;
          因為此服務器系統(tǒng)是默認安裝了MySQL,沒有安裝客戶端,我又裝了client、devel如下所示已安裝的rpm包;
             root@testmysql [/software/lua-5.1.4]# rpm -qa | grep MySQL
          MySQL-client-5.1.48-0.glibc23
          MySQL-bench-5.0.91-0.glibc23
          MySQL-test-5.1.48-0.glibc23
          MySQL-shared-5.1.48-0.glibc23
          MySQL-server-5.1.48-0.glibc23
          MySQL-devel-5.1.48-0.glibc23
          此后的Mysql-proxy時總是一直報錯,編譯不過去,無奈之下用源碼包客戶端;(此時的rpm包都沒有卸載,直接執(zhí)行了下面的安裝)//此處問題見問題解決區(qū)4處;
              tar zxvf mysql-5.0.56.tar.gz     //此處我直接使用了mysql的5.0.56的源碼包;
              cd mysql-5.0.56
              ./configure --prefix=/usr/local/mysql --without-server
              make && make install

          7、tar xvf mysql-proxy-0.8.0.tar.gz
              cd mysql-proxy-0.8.0
              ./configure --prefix=/usr/local/mysql-proxy --with-mysql=/usr/local/mysql --with-lua    //問題解決處4有介紹;
              Make && Make install

          8、在/var/lib/bin創(chuàng)建mysql-proxy.sh,內容如下;
               #!/bin/bash
               LUA_PATH="/usr/local/mysql-proxy/lib/mysql-proxy/lua/?.lua" /usr/local/mysql-proxy/bin/mysql-proxy --proxy-backend-addresses=192.168.0.1:3306 --proxy-read-only-backend-addresses=192.168.0.2:3306 --proxy-lua-script=/usr/local/mysql-proxy/lib/mysql-proxy/rw-splitting.lua >> /var/log/mysql-proxy.log &
               然后加上可執(zhí)行權限;
               chmod a+x /var/lib/bin/mysql-proxy.sh
               執(zhí)行:/var/lib/bin/mysql-proxy.sh 啟動服務;
          9、驗證是否開戶了:4040、4041;
              root@testmysql [/usr/local/bin]# netstat -an | grep 404*
              tcp        0      0 0.0.0.0:4040                0.0.0.0:*                   LISTEN     
              tcp        0      0 0.0.0.0:4041                0.0.0.0:*                   LISTEN  
          10、測試讀寫分離,此步略過,所有配置已經完成。

          &&&&&&&&&&&&&&&&&&&&&&&&&&&   問題解決區(qū)   &&&&&&&&&&&&&&&&&&&&&&&&&&&&
          1、在安裝的第四步執(zhí)行make linux時報錯如下:
          root@testmysql [/software/lua-5.1.4]# make linux
          cd src && make linux
          make[1]: Entering directory `/software/lua-5.1.4/src'
          make all MYCFLAGS=-DLUA_USE_LINUX MYLIBS="-Wl,-E -ldl -lreadline -lhistory -lncurses"
          make[2]: Entering directory `/software/lua-5.1.4/src'
          gcc -O2 -Wall -DLUA_USE_LINUX   -c -o lapi.o lapi.c
          gcc -O2 -Wall -DLUA_USE_LINUX   -c -o lcode.o lcode.c
          gcc -O2 -Wall -DLUA_USE_LINUX   -c -o ldebug.o ldebug.c
          gcc -O2 -Wall -DLUA_USE_LINUX   -c -o ldo.o ldo.c
          gcc -O2 -Wall -DLUA_USE_LINUX   -c -o ldump.o ldump.c
          gcc -O2 -Wall -DLUA_USE_LINUX   -c -o lfunc.o lfunc.c
          gcc -O2 -Wall -DLUA_USE_LINUX   -c -o lgc.o lgc.c
          gcc -O2 -Wall -DLUA_USE_LINUX   -c -o llex.o llex.c
          gcc -O2 -Wall -DLUA_USE_LINUX   -c -o lmem.o lmem.c
          gcc -O2 -Wall -DLUA_USE_LINUX   -c -o lobject.o lobject.c
          gcc -O2 -Wall -DLUA_USE_LINUX   -c -o lopcodes.o lopcodes.c
          gcc -O2 -Wall -DLUA_USE_LINUX   -c -o lparser.o lparser.c
          gcc -O2 -Wall -DLUA_USE_LINUX   -c -o lstate.o lstate.c
          gcc -O2 -Wall -DLUA_USE_LINUX   -c -o lstring.o lstring.c
          gcc -O2 -Wall -DLUA_USE_LINUX   -c -o ltable.o ltable.c
          gcc -O2 -Wall -DLUA_USE_LINUX   -c -o ltm.o ltm.c
          gcc -O2 -Wall -DLUA_USE_LINUX   -c -o lundump.o lundump.c
          gcc -O2 -Wall -DLUA_USE_LINUX   -c -o lvm.o lvm.c
          gcc -O2 -Wall -DLUA_USE_LINUX   -c -o lzio.o lzio.c
          gcc -O2 -Wall -DLUA_USE_LINUX   -c -o lauxlib.o lauxlib.c
          gcc -O2 -Wall -DLUA_USE_LINUX   -c -o lbaselib.o lbaselib.c
          gcc -O2 -Wall -DLUA_USE_LINUX   -c -o ldblib.o ldblib.c
          gcc -O2 -Wall -DLUA_USE_LINUX   -c -o liolib.o liolib.c
          gcc -O2 -Wall -DLUA_USE_LINUX   -c -o lmathlib.o lmathlib.c
          gcc -O2 -Wall -DLUA_USE_LINUX   -c -o loslib.o loslib.c
          gcc -O2 -Wall -DLUA_USE_LINUX   -c -o ltablib.o ltablib.c
          gcc -O2 -Wall -DLUA_USE_LINUX   -c -o lstrlib.o lstrlib.c
          gcc -O2 -Wall -DLUA_USE_LINUX   -c -o loadlib.o loadlib.c
          gcc -O2 -Wall -DLUA_USE_LINUX   -c -o linit.o linit.c
          ar rcu liblua.a lapi.o lcode.o ldebug.o ldo.o ldump.o lfunc.o lgc.o llex.o lmem.o lobject.o lopcodes.o lparser.o lstate.o lstring.o ltable.o ltm.o lundump.o lvm.o lzio.o lauxlib.o lbaselib.o ldblib.o liolib.o lmathlib.o loslib.o ltablib.o lstrlib.o loadlib.o linit.o
          ranlib liblua.a
          gcc -O2 -Wall -DLUA_USE_LINUX   -c -o lua.o lua.c
          In file included from lua.h:16,
                           from lua.c:15:
          luaconf.h:275:31: error: readline/readline.h: No such file or directory
          luaconf.h:276:30: error: readline/history.h: No such file or directory
          lua.c: In function 鈥榩ushline鈥?
          lua.c:182: warning: implicit declaration of function 鈥榬eadline鈥?
                                                                              lua.c:182: warning: assignment makes pointer from integer without a cast
          lua.c: In function 鈥榣oadline鈥?
          lua.c:210: warning: implicit declaration of function 鈥榓dd_history鈥?
                                                                                 make[2]: *** [lua.o] Error 1
          make[2]: Leaving directory `/software/lua-5.1.4/src'
          make[1]: *** [linux] Error 2
          make[1]: Leaving directory `/software/lua-5.1.4/src'
          make: *** [linux] Error 2

          解決方法:yum install libtermcap-devel
                    yum install ncurses-devel                                 
                    yum install libevent-devel                                   
                    yum install readline-devel
            
          2、安裝MySQL-proxy時報錯:
          checking for LUA... configure: error: Package requirements (lua5.1 >= 5.1) were not met:

          No package 'lua5.1' found

          Consider adjusting the PKG_CONFIG_PATH environment variable if you
          installed software in a non-standard prefix.

          Alternatively, you may set the environment variables LUA_CFLAGS
          and LUA_LIBS to avoid the need to call pkg-config.
          See the pkg-config man page for more details.
          解決辦法:
          cp etc/lua.pc /usr/local/lib/pkgconfig/lua5.1.pc

          3、安裝MySQL-proxy時報錯:
          checking for GLIB... configure: error: Package requirements (glib-2.0 >= 2.16.0) were not met:

          No package 'glib-2.0' found

          Consider adjusting the PKG_CONFIG_PATH environment variable if you
          installed software in a non-standard prefix.

          Alternatively, you may set the environment variables GLIB_CFLAGS
          and GLIB_LIBS to avoid the need to call pkg-config.
          See the pkg-config man page for more details.
          解決辦法:
             1、查看系統(tǒng)已經安裝glib的rpm包;
              glibc-2.5-49.el5_5.4
              glibc-headers-2.5-49.el5_5.4
              glib2-2.12.3-4.el5_3.1
              glibc-common-2.5-49.el5_5.4
              glibc-devel-2.5-49.el5_5.4
             2、下載安裝glib-2.18.4.tar.gz

          4、剛開始使用系統(tǒng)里rpm所指定的mysq_config時,mysql-proxy安裝報錯,信息如下;
              configure: error: mysql_config not exists or not executable, use $ ./configure --with-mysql=/path/to/mysql_config
              看到幫助安裝文檔里要求如下:
              --with-mysql[=PATH]     Include MySQL support. PATH is the path to 'mysql_config'。
          解決辦法就是:安裝包中的第6步。

          http://hi.baidu.com/adriannet/blog/item/e06d2d58ea8d798f810a1854.html

          posted @ 2011-05-10 18:12 小馬歌 閱讀(328) | 評論 (0)編輯 收藏
           
          前一段時間在負責實施一個項目,利用nginx的七層負載均衡的良好性能做調度器,后端兩臺PHP應用服務器,實現靜動態(tài)分離處理,在整個系統(tǒng)環(huán)境全部部署完后,把應用程序放上去測試時,發(fā)現一個問題,現把問題和解決辦法寫出來,與大家一起分享和討論。

            一、系統(tǒng)環(huán)境:

            1、nginx負載均衡/反向代理服務器(1臺)

            環(huán)境:CentOS 5.5 nginx-0.7.65

            IP:192.168.0.10

            2、后端PHP應用服務器(2臺)

            環(huán)境:CentOS 5.5 Apache + PHP

            Webserver1 IP:192.168.0.20

            Webserver1 IP:192.168.0.21

            二、安裝配置

            1、安裝nginx負載均衡/反向代理服務器

            安裝過程就不詳說了,可以參考我另一篇文章《nginx+tomcat負載均衡集群安裝配置》,nginx負載均衡/反向代理配置如下:

            …

            upstream phpserver {

            server 192.168.0.20:80 weight=5;

            server 192.168.0.21:80 weight=5;

            }

            …

            server {

            listen 80;

            server_name localhost;

            root /webroot;

            index index.php index.html index.htm;

            location ~ .*\.(php|php5)?$ {

            proxy_pass http://phpserver;

            include proxy.conf;

            }

            location ~ /\..+ {

            deny all;

            }

            access_log /var/log/nginx/access.log;

            }

            2、后端PHP應用服務器的詳細安裝配置遲些再寫出來;

            三、測試發(fā)現的問題及解決辦法

            1、當后端兩臺PHP應用服務器都正常時,訪問速度非常快,查看日志,原來一個請求,是后端兩臺服務器同時響應的;

            2、為了模仿故障測試,停掉一臺PHP應用服務器,這時再訪問,請求打開一頁面時,發(fā)現有一半響應比較快,另一半響應很慢,最后頁面是可以打開,但速度不理想,很慢,查看error日志,發(fā)現nginx還是把請求的一半發(fā)往已停掉的那臺服務器,難怪會這么慢;但當很快(10秒內)再打開一個請求頁面時,速度又非常快了,查看日志,發(fā)現nginx不會把請求的一半發(fā)往已停掉的那臺服務器;過一會再發(fā)起一個請求時,又出現有一半響應比較快另一半響應很慢的現象了,查看日志,nginx又把請求的一半發(fā)往已停掉的那臺服務器;

            3、到這里,我明白了nginx檢查后端應用服務器的健康時是有一個時間間隔的,應該怎樣處理這個問題呢,當后端有一臺服務器down機時,用戶訪問感覺不出有慢的現象?原來在nginx負載均衡配置里加上下面兩個參數時可以有效的解決這個問題:

            upstream phpserver {

            server 192.168.0.20:80 weight=5 max_fails=2 fail_timeout=600s;

            server 192.168.0.21:80 weight=5 max_fails=2 fail_timeout=600s;

            }

            3.1)max_fails = NUMBER ---- 在一定時間內(這個時間在fail_timeout參數中設置)檢查這個服務器是否可用時產生的最多失敗請求數,默認為1,將其設置為0可以關閉檢查,這些錯誤在proxy_next_upstream或fastcgi_next_upstream(404錯誤不會使max_fails增加)中定義;

            3.2)fail_timeout = TIME ---- 在這個時間內產生了max_fails所設置大小的失敗嘗試連接請求后這個服務器可能不可用,同樣它指定了服務器不可用的時間(在下一次嘗試連接請求發(fā)起之前),默認為10秒,fail_timeout與前端響應時間沒有直接關系,不過可以使用proxy_connect_timeout和 proxy_read_timeout來控制。

            我設置當有2個請求失敗,就表示后端的服務器不可用,在以后的600S時間內nginx不會再把請求發(fā)往已檢查出標記為不可用的服務器,再次測試時,把后端一臺PHP應用服務務器停掉,只是有一個請求打開頁面時出現上面的現象,以后10分鐘內都不會出現了,請求頁面打開速度正常,fail_timeout的值可以根據你的實際情況而定。

          posted @ 2011-05-10 17:52 小馬歌 閱讀(257) | 評論 (0)編輯 收藏
           

          1、Nginx介紹

             Nginx ("engine x") 是一個高性能的 HTTP 和 反向代理 服務器,也是一個 IMAP/POP3/SMTP 代理服務器 。 Nginx 是由 Igor Sysoev 為俄羅斯訪問量第二的Rambler.ru 站點開發(fā)的,它已經在該站點運行超過四年多了。Igor 將源代碼以類BSD許可證的形式發(fā)布。自Nginx 發(fā)布四年來,Nginx 已經因為它的穩(wěn)定性、豐富的功能集、示例配置文件和低系統(tǒng)資源的消耗而聞名了。目前國內各大門戶網站已經部署了Nginx,如新浪、網易、騰訊等;國內幾個重要的視頻分享網站也部署了Nginx,如六房間、酷6等。新近發(fā)現Nginx 技術在國內日趨火熱,越來越多的網站開始部署Nginx。

           

          2、為什么使用Nginx

             Nginx 是一個高性能Web和反向代理服務器, 它具有有很多非常優(yōu)越的特性(主要是基于Linux系統(tǒng)闡述的):

          l 在高連接并發(fā)的情況下,Nginx是Apache服務器不錯的替代品: Nginx在美國是做虛擬主機生意的老板們經常選擇的軟件平臺之一. 能夠支持高達 50,000 個并發(fā)連接數的響應, 感謝Nginx為我們選擇了 epoll and kqueue 作為開發(fā)模型.

          l Nginx作為負載均衡服務器: Nginx 既可以在內部直接支持 Rails 和 PHP 程序對外進行服務, 也可以支持作為 HTTP代理 服務器對外進行服務. Nginx采用C進行編寫, 不論是系統(tǒng)資源開銷還是CPU使用效率都比 Perlbal 要好很多.

          l 作為郵件代理服務器: Nginx 同時也是一個非常優(yōu)秀的郵件代理服務器(最早開發(fā)這個產品的目的之一也是作為郵件代理服務器), Last.fm 描述了成功并且美妙的使用經驗.

          l Nginx 是一個 [#installation 安裝] 非常的簡單 , 配置文件 非常簡潔(還能夠支持perl語法), Bugs 非常少的服務器: Nginx 啟動特別容易, 并且?guī)缀蹩梢宰龅?*24不間斷運行,即使運行數個月也不需要重新啟動. 你還能夠 不間斷服務的情況下進行軟件版本的升級 。

          以上都是官方的一些說法,看看網上的一些意見:“4GB內存的服務器+Apache(prefork模式)一般只能處理3000個并發(fā)連接,因為它們將占用3GB以上的內存,還得為系統(tǒng)預留1GB的內存。我曾經就有兩臺Apache服務器,因為在配置文件中設置的MaxClients為4000,當Apache并發(fā)連接數達到3800時,導致服務器內存和Swap空間用滿而崩潰。而這臺 Nginx 0.5.31 + PHP 5.2.4 (FastCGI) 服務器在3萬并發(fā)連接下,開啟的10個Nginx進程消耗100M內存(20MB*10=100M),開啟的250個php-cgi進程消耗1G內存(4MB*250≈1GB),加上系統(tǒng)自身消耗的內存,總共才消耗2GB內存。如果服務器內存較小,完全可以只開啟25個php-cgi進程,這樣php-cgi消耗的總內存數才100M。在開啟25個php-cgi進程的情況下,每分鐘的處理能力只比開啟250個php-cgi進程時低了不到一半。”

           

          3、Nginx的安裝

             基于李,楊家用的1臺主機,操作系統(tǒng)是Win2003版本的,進行安裝配置。

              Windows的安裝比較簡單,直接到http://wiki.nginx.org/NginxInstall下載需要的壓縮包,解壓到相應目錄(假如是C:/nginx),點擊目錄下面的nginx.exe即可啟動。

           

          4、動靜分離和負載均衡的準備工作

          l Host配置:

             127.0.0.1 yangli.com

          l 服務器:win2003  1臺

          l Web容器:Tomcat 6(8888端口)、Resin(8080端口)

                        Tomcat和resin都部署相同應用,getUsers.jsp作為測試頁面。

          l 反向代理服務器:Nginx-0.8.34.zip

                              靜態(tài)目錄路徑:e:/home/htmlfile/getUsers.html

          l 項目部署:普通web項目,例如:example

          Ø Resin-3.0.26配置:

                 <host id="yangli.com" root-directory=".">

                 <web-app id="/" document-directory="E:/example/webapp"/>

                 </host>

          Ø Apache-tomcat-6.0.26 配置文件:

                  D:\apache-tomcat-6.0.26\webapps\examples

                  修改:D:\apache-tomcat-6.0.26\conf\server.xml

                  增加:

          <Host name="yangli.com"  appBase="D:\apache-tomcat-6.0.26\webapps\examples"

                      unpackWARs="true" autoDeploy="true"

                      xmlValidation="false" xmlNamespaceAware="false">

            <Context path="" docBase="D:\apache-tomcat-6.0.26\webapps\examples">

                    </Context>

            </Host>

          主要是為了解決訪問tomcat服務器的時候,

          不需要http://yangli.com:8888/examples/getUser.jsp

          可以直接訪問:http://yangli.com:8888/getUser.jsp

          具體說明,可以上網搜搜。

          l 實現原理圖:

           

           

           

           

          配置原理圖

           

          5、動靜分離

          假設后端只有一臺web服務器,配置如下:

          upstream yangli.com {

             server 127.0.0.1:8888;

             #tomcat

          }

           

          server {

                  listen       2010;

                  server_name  yangli.com;

                  access_log  off;

                  location / {

                      root   e:/home/htmlfile;           

                      index index.html index.htm;        

                      if (!-f $request_filename) {

              rewrite ^/([a-zA-Z]+).html   /$1.jsp last;

                          proxy_pass http://yangli.com;

                          break;

                      }

                  }

          }

          注明:如果是靜態(tài)文件將定位到:e:/home/htmlfile;  目錄

                如果e:/home/htmlfile不存在該文件,則請求到后端服務器:

                這里使用了rewrite規(guī)則rewrite ^/([a-zA-Z]+).html   /$1.jsp last;

                if (!-f $request_filename) {

              rewrite ^/([a-zA-Z]+).html   /$1.jsp last;

                          proxy_pass http://yangli.com;

                          break;

                      }

           

          當我們請求:

           

           

           

           

           

          此時:訪問的是E:\home\htmlfile\2010.html

           

           

           

           

           

           

           

           

          當我們訪問:

           

           

          根據rewrite規(guī)則,實際請求到了:127.0.0.1:8888上的tomcat進行處理,這樣子就實現了動靜分離,而對于用戶來說,感覺只是僅僅訪問了html頁面。

          同樣測試Resin,也是成功的。

           

          6、負載均衡

           

          1. Nginx 負載均衡基礎知識

          nginx的upstream目前支持4種方式的分配

          1)、輪詢(默認)

          每個請求按時間順序逐一分配到不同的后端服務器,如果后端服務器down掉,能自動剔除。

          2)、weight

          指定輪詢幾率,weight和訪問比率成正比,用于后端服務器性能不均的情況。

          2)、ip_hash

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

          3)、fair(第三方)

          按后端服務器的響應時間來分配請求,響應時間短的優(yōu)先分配。

          4)、url_hash(第三方)

          在需要使用負載均衡的server中增加

          proxy_pass http://yangli.com;

           

          每個設備的狀態(tài)設置為:

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

          b)        weight 默認為1.weight越大,負載的權重就越大。

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

          d)        fail_timeout:max_fails次失敗后,暫停的時間。

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

           

           修改配置如下:

              upstream yangli.com {

                 server 127.0.0.1:8888;

                 #tomcat

                 server 127.0.0.1:8080 backup;

                 #resin

              }

           

          下面來測試一下:

           

           

          實際上訪問了:

           

           

          由于:resin設為backup,那么當tomcat宕機了,nginx會將請求發(fā)送到resin服務器,此時resin接管了tomcat,為外界提供服務。

           

          測試如下:

          1、關閉tomcat服務器

          執(zhí)行:D:\apache-tomcat-6.0.26\bin\shutdown.bat

           

          表明tomcat已經被關閉

           

          2、訪問http://yangli.com:2010/getUsers.html

           

           

          請求到resin服務器上了。

           

          3、啟動tomcat服務器:

          D:\apache-tomcat-6.0.26\bin\startup.bat

           

           

          頁面訪問正常

          4、訪問http://yangli.com:2010/getUsers.html

           

          由于tomcat工作正常,于是又接管,作為主服務器進行工作。

           

          7、總結

             本文主要闡述了利用Nginx實現動靜分離和負載均衡,其中后端服務器使用了Resin和Tomcat,旨在表明Nginx并不關心后端服務器類型,只要后端服務器部署了相同的應用,訪問正常即可。

           

           

          最后附上nginx配置:

               upstream yangli.com {
                     server 127.0.0.1:8888;
                     server 127.0.0.1:8080 backup;
                 }


          server {
                  listen       2010;
                  server_name  yangli.com;
                  access_log  off;

                  location / {
                      root   e:/home/htmlfile;           
                      index index.html index.htm;         
                      if (!-f $request_filename) {
                          rewrite ^/([a-zA-Z]+).html   /$1.jsp last;
                          proxy_pass http://yangli.com;
                          break;
                      }
                  }

              }


          本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/jooben/archive/2010/04/06/5454995.aspx

          posted @ 2011-05-10 17:51 小馬歌 閱讀(3008) | 評論 (0)編輯 收藏
           

          ####################################
          #Nginx與php分離配置
          #Author:楚霏
          #Date: 2010-5-12
          #Update: 2010-5-12
          #Env: Centos 5.4 x86_64
          ####################################

          一、準備工作
          ####################################
          環(huán)境:Centos 5.4 x86_64
          WEBServer IP: 10.0.0.240
          PHPServer1 IP: 10.0.0.241
          PHPServer1 IP: 10.0.0.242
          ####################################

          二、思路
          ####################################
          WEBServer:
          1.只負責接收http請求并分發(fā);
          2.只安裝nginx,不安裝php;
          3.只建/www/wwwroot目錄,不存放php代碼;
          4.所有靜態(tài)文件使用CDN。

          PHPServer:
          1.只負責處理php請求;
          2.只安裝php-fastcgi和mysql客戶端;
          3.建/www/wwwroot目錄,最好從NFS文件服務器上掛載網站代碼。
          ####################################

          三、配置
          ####################################
          #WEBServer:
          #增加一行到nginx.conf
          #----------------------------引用文字-開始----------------------------
          include upstream.conf;
          #----------------------------引用文字-結束----------------------------

          #新加upstream配置文件
          #vi /usr/local/nginx/conf/upstream.conf
          #----------------------------引用文字-開始----------------------------
          upstream FastCGIServers {
          server 10.0.0.241:9000;
          server 10.0.0.251:9000;
          }
          #----------------------------引用文字-結束----------------------------

          #修改虛擬主機配置文件的fastcgi_pass為負載均衡指定的upstream值
          #----------------------------引用文字-開始----------------------------
          location ~ \.php$ {
          include fastcgi_params;
          #fastcgi_pass unix:/tmp/php-fcgi.sock;
          fastcgi_pass FastCGIServers;
          fastcgi_index index.php;
          fastcgi_param SCRIPT_FILENAME /www/wwwroot/test.com$fastcgi_script_name;
          }
          #----------------------------引用文字-結束----------------------------

          #PHPServer:
          vi /usr/local/php-fcgi/etc/php-fpm.conf
          #----------------------------引用文字-開始----------------------------
          #把監(jiān)聽地址改為本機ip:port
          #找到:
          /tmp/php-fcgi.sock

          #改為:
          10.0.0.241:9000

          #把請允許的客戶端改為WEBServer的地址
          #找到:
          127.0.0.1
          #改為:
          10.0.0.240
          #----------------------------引用文字-結束----------------------------
          ####################################

          四、特點
          ####################################
          1.擴展容易:增加一臺php服務器,就不用配置nginx了,直接到nginx配置文件中增加一行即可
          2.nginx配置全在一臺機器,不再需要建太多虛擬主機,也不需要每臺服務器hosts文件中解析自定義的域名
          2.更好發(fā)揮各自優(yōu)勢,nginx只用來接收http請求,有望達到傳說中的并發(fā)10萬;php-fcgi也可以開更多的進程。
          ####################################

          posted @ 2011-05-10 17:50 小馬歌 閱讀(1501) | 評論 (0)編輯 收藏
          僅列出標題
          共95頁: First 上一頁 53 54 55 56 57 58 59 60 61 下一頁 Last 
           
          主站蜘蛛池模板: 滦平县| 张掖市| 蓬莱市| 红桥区| 响水县| 徐水县| 房山区| 桂平市| 岳西县| 普安县| 乌恰县| 五大连池市| 嵩明县| 大姚县| 左贡县| 邢台县| 呼玛县| 依兰县| 延庆县| 五峰| 额敏县| 全州县| 普格县| 南昌县| 鹿邑县| 赣榆县| 区。| 闽清县| 元阳县| 古交市| 西充县| 翼城县| 博白县| 黄龙县| 金湖县| 泉州市| 巴南区| 蓬安县| 高州市| 定结县| 玛沁县|